[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ソフト
* 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]