[Vagrant & VirtualBox] Vagrant: ドットインストールの開発環境構築レッスンをベースにWordPress環境をProvisioningしてみた

シェルスクリプトから、Apache, MySQL, PHP, WordPress, phpMyAdmin をインストールしてみます。

[markdown]

> * [ローカル開発環境の構築 (全12回) – プログラミングならドットインストール](http://dotinstall.com/lessons/basic_local_development_v2)

つかってみて不具合があれば修正していくつもり。

## Vagrantfile

こちらにおきました。
[https://gist.github.com/DriftwoodJP/6694891](https://gist.github.com/DriftwoodJP/6694891)

> * [Ruby – vagrantの設定を色々調べて(試してみた) – Qiita [キータ]](http://qiita.com/ryurock/items/91df14537512c03488ac)

NFS mount について。

> * [Vagrant: synced_folder 内のファイル変更が認識されない | deadwood](https://www.d-wood.com/blog/2014/01/30_5357.html)

## provisioning

以下を参考にいろいろ追記してみました。

> * [Vagrant+VirtualBox(CentOS6)で「gem install rails」がすっごい遅い時の対処法 | IDEA*IDEA](http://www.ideaxidea.com/archives/2013/08/resolv.html)

mysql_secure_installation は何を行っているか。

> * [mysql_secure_installation の中身 – TAKUMI SAKAMOTO'S BLOG](http://blog.takus.me/2013/08/11/mysql_secure_installation/)
> * [tech facilities: MySQLの mysql_secure_installation が中身でやっていること。](http://techfacilities.blogspot.jp/2013/03/mysql-mysqlsecureinstallation.html)

wordpress

> * [Vagrantで構築した仮想マシンにWordpress環境を構築する手順まとめ | Apple情報局](http://ottan.me/2013/03/24/steps-to-build-wordpress-to-virtual-machine-built-with-vagrant/)

`>/dev/null 2>&1` で不要なログを捨てている。

“`
echo “Installing Apache etc…”
apt-get update >/dev/null 2>&1
“`

> * [Vagrantで PHP+MySQL環境を構築する(シェル編) – Qiita [キータ]](http://qiita.com/seltzer/items/f91619b96ac2d1ee2339)

## 利用方法

gist にあげておくと楽かも。

### 設定ファイルを git clone

“`
% git clone https://gist.github.com/6694891.git
Cloning into ‘6694891’…
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
Checking connectivity… done
“`

ディレクトリをプロジェクト名に変更。

“`
% mv 6694891 your_project
% cd your_project
“`

CentOS boxが既にあれば、Vagrantfile の config.vm.box を書き換えて下さい。なければダウンロードしてきます。

“`
% vagrant up
“`

以上、Boxのダウンロードも含め15分くらい。

## 接続方法

### ssh

“`
% vagrant ssh
“`

### ブラウザ

ブラウザからのアクセスは、Vagrantfile で設定したアドレス。
[http://192.168.33.10/](http://192.168.33.10/)

WordPress
[http://192.168.33.10/wordpress](http://192.168.33.10/wordpress)

WordPressのID/PWは、admin/root が初期設定。

phpMyAdmin
[http://192.168.33.10/phpmyadmin](http://192.168.33.10/phpmyadmin)

MySQL(phpMyAdmin)のID/PWは、root/rootに設定してあります。

### FTPソフト

vagrant 2013-09-20 21-06-20

* server(ip): 192.168.33.10
* protcol: SFTP
* user: vagrant
* password: vagrant
* documentroot: /var/www/html

> * [Vagrant: LAN 内の他の端末から仮想マシンに SFTP 接続できちゃう | deadwood](https://www.d-wood.com/blog/2014/08/27_6678.html)

### /etc/hosts

さらにホスト名を指定したければ、/etc/hosts を変更しても良いし、[Hoster](http://www.redwinder.com/macapp/hoster/) というアプリを使っても良い。
vagrant-hostsupdater を使いましょう。

> * [Vagrant: vagrant-hostsupdater で /etc/hosts を書き換える | deadwood](https://www.d-wood.com/blog/2014/08/25_6669.html)

## Box化する

ダウンロードを含めると結構時間がかかります。
よく使うようであれば、Box化しておくとはかどりそう。
が、一工夫いるようです。

### エラー

“`
[default] Configuring and enabling network interfaces…
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
ARPCHECK=no /sbin/ifup eth1 2> /dev/null
Stdout from the command:
Device eth1 does not seem to be present, delaying initialization.
Stderr from the command:
“`

ネットワークインターフェースまわりで何か起こっていることは分かるが。。。
と、こちらで詳細が触れられていました。ありがとうございます。

> * [Vagrantのネットワークが起動しないときは – Thinking-megane](http://blog.monochromegane.com/blog/2013/04/06/vagrant-network-error/)
>
> ブリッジ、もしくはホストオンリーネットワーク構成で起動すると、ネットワークインターフェース設定ファイルがVagrantにより作成されるのは前述しましたが、OS側ではネットワークインターフェースが追加された際に、ネットワークインターフェースとMACアドレスをマッピングしています。
> パッケージングしたボックスで新しく仮想マシンを起動すると別のMACアドレスが割り振られるため、OS側は新しいネットワークインターフェースeth2としてマッピングしてしまうようです。 にもかかわらず、ネットワークインターフェース設定ファイルはeth1用しか準備されておらず、eth1はOS側ではすでに存在しないMACアドレスのため、起動に失敗します。

### 対策

rollbackできるように、sandboxモードをonにします。

“`
% vagrant sandbox on
% vagrant ssh
“`

VMに入り、MACアドレスとのマッピングを無効にしておきます。

“`
$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
$ exit
“`

Boxを作成し、不要なファイルを削除、VMをrollbackします。

“`
% vagrant package
% vagrant box add wp_box package.box
% rm package.box
% vagrant sandbox rollback
“`

> * [Vagrant: package, plugin | deadwood](https://www.d-wood.com/blog/2013/09/20_4694.html)

以降は、ディレクトリを作成した後、これだけで使えるようになります。

“`
% vagrant init wp_box
% vagrant up
“`

なお、MACアドレスとのマッピングは、以下の方法でも直せるそうです。

> * [Vagrantのネットワークが起動しないときは – Thinking-megane](http://blog.monochromegane.com/blog/2013/04/06/vagrant-network-error/)
>
> 機能を無効にしたくない場合は、該当ファイルを削除してネットワークを再起動することで再度マッピングされますので、用途に応じて対策を行なってみてください。

## 課題

* 上記の通り、vagrantについても細かいところがいろいろありそう。
* 現在の知識では Python や Rails をキレイに入れる表現ができなかった。
* きちんと設定されたか確認たいへん。
* やっぱりインストールとか時間かかりますね。
* ということで、Chef とか serverspec とか必要になってくるのかな。

[/markdown]