Vagrantで複数仮想マシンを起動できるようにする
iPhone 6 Plus を予約して発売2日後に手に入れたtanakaです。それまでケースは付けないで使う派でしたが、落としてガラスを割りそうだったので、早々にケースを購入しました。
今日は、Vagrantで複数の仮想マシンを起動してmysqlコンソールログインできるまでを試してみましたので紹介します。
やってみたこと
web と db の 2台の Linuxサーバーを起動して、webからdb上のMySQLサーバーにMySQLコンソールログインできるようにする
動作環境
- Vagrant 1.6.5
- VirtualBox 4.3.16
- boxファイルはopscode-ubuntu-14.04を使います
Vagrantfile
適当なフォルダを作成(multivmtestなど)し、以下のテキストをVagrantfile
というファイル名で保存します。
コマンドプロンプトで、作成したフォルダに移動(またはエクスプローラのアドレスバーでcmd[Enter]
)し、vagrant upします。
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "opscode-ubuntu-14.04"
config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box"
config.vm.define :web do |web|
web.vm.hostname = "web"
web.vm.network :private_network, ip: "192.168.33.10"
provision_script = <<EOL
apt-get update -y
apt-get install -y mysql-client
EOL
web.vm.provision :shell, :inline => provision_script
end
config.vm.define :db do |db|
db.vm.hostname = "db"
db.vm.network :private_network, ip: "192.168.33.11"
provision_script = <<EOL
MYSQL_ROOT_PASSWORD='vagrant'
echo mysql-server mysql-server/root_password select "${MYSQL_ROOT_PASSWORD}" | debconf-set-selections
echo mysql-server mysql-server/root_password_again select "${MYSQL_ROOT_PASSWORD}" | debconf-set-selections
apt-get install -y mysql-server
mysql -u root -p"${MYSQL_ROOT_PASSWORD}" -e ";CREATE DATABASE IF NOT EXISTS cakeapp;GRANT ALL ON cakeapp.* TO cakeappuser@localhost IDENTIFIED BY 'cake_pass';GRANT ALL ON cakeapp.* TO cakeappuser@'%' IDENTIFIED BY 'cake_pass';FLUSH PRIVILEGES;"
EOL
db.vm.provision :shell, :inline => provision_script
end
end
(10分後くらいに)仮想マシンの起動とプロビジョニングが完了したら、MySQLサーバの設定を1点修正します。
vagrant ssh db
でデータベースサーバにsshログインし、
sudo vi /etc/mysql/my.cnf
して、"bind-address = 127.0.0.1" の行をコメントアウトします。保存して、sudo service mysql restart
で再起動してください。(本当はここもプロビジョニングに含めたかったですが…)
以上で、サーバの立ち上げは完了です。 vagrant ssh web
でSSHログインし mysql -h 192.168.33.11 -ucakeappuser -p
とコマンドを実行するとMySQLサーバにログインできると思います。
まとめ:複数VM環境を作るときのTips
config.vm.define
のブロックを並べて、複数の仮想マシンを定義できます- 仮想マシンごとに、
vm.box
,vm.box_url
を設定して別々のboxから生成することもできますし、config.vm.box
,config.vm.box_url
を設定すればすべての仮想マシンで同じboxを利用できます
- オライリー・ジャパンの実践 Vagrant および CakePHPで学ぶ継続的インテグレーション を参考にしました。