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

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

Vagrantfile

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

provisioning

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

echo "Installing Apache etc..."
apt-get update >/dev/null 2>&1

利用方法

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/
WordPress
http://192.168.33.10/wordpress
WordPressのID/PWは、admin/root が初期設定。
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

/etc/hosts

さらにホスト名を指定したければ、/etc/hosts を変更しても良いし、Hoster というアプリを使っても良い。
vagrant-hostsupdater を使いましょう。

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により作成されるのは前述しましたが、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 init wp_box
% vagrant up

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

機能を無効にしたくない場合は、該当ファイルを削除してネットワークを再起動することで再度マッピングされますので、用途に応じて対策を行なってみてください。

課題

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