はじめに
VirtualBOXでも同じ環境を複製する場合は、Vagrant+chefが便利ということなので、CentOSサーバの環境を構築してみた。以下の確認環境は Windows10 Home 64bit。
Vagrant / VirtualBoxのインストール
VirtualBoxのインストール
VirturlBOXのダウンロードページ https://www.virtualbox.org/wiki/Downloads から、WIndows 版をダウンロードしインストールを実行。記入時点では Vitualbox-5.1.22。
Vagrant 本体のインストール
Vagrant は https://www.vagrantup.com/downloads.html から vagrant-1.9.5 の Windows版をダウンロードしてイントール実行。実行後、コマンドプロンプトで vagrant -v でバージョンを確認。
Vagrant プラグインのインストール
コマンドプロンプトからomnibusプラグインをインストールします。これは、起動時にChef Client/Chef Soloを確認、無ければ自動でインストールを行うプラグインです。他にも sahara 等便利なプラグインもあります。
> vagrant plugin install vagrant-omnibus
念のためバージョンとインストールされたプラグインを確認
>vagrant -v
Vagrant 1.9.5
>vagrant plugin list
vagrant-omnibus (1.5.0)
vagrant-share (1.1.8, system)
仮想マシンの準備
利用するBOXのダウンロード
centOS-7.2のBOXは、http://www.vagrantbox.es/ から選択。コマンドプロンプトを立ち上げて以下を実行。
> vagrant box add CentOS72 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
最新の CentOS-7.3にするため、Vagrant Cloudから、bento/centOS-7.3
(https://app.vagrantup.com/bento/boxes/centos-7.3) に変更。以下のコマンドでboxに追加。
vagrant box add bento/centos-7.3 --provider virtualbox
ダウンロードにしばらく時間がかかります。
Vagrant の設定
任意のフォルダを作り以下を実行
> mkdir mycentos
> cd mycentos
> vagrant init bento/centos-7.3
実行したディレクトリに設定ファイル Vagrantfile ができる。
Vagrantfileの変更
作成された環境設定ファイル Vagrantfile ファイルを編集します。
以下の部分のコメントを外す
- IPアドレスの設定
config.vm.network "private_network", ip: "192.168.33.10"
- プラグインomnibusの利用
# vagrant-omnibus
# config.omnibus.chef_version = :latest
config.omnibus.chef_version = 3.13
プロプロビジョニング毎に最新をインストールしにいくのでバージョンを指定したが、latestにしておく方が安心かもしれない。
仮想マシンの起動
ここまでの設定で仮想マシンが起動できるか確かめます。
vagrant up
かなり時間がかかります
ログイン
適当なSSHクライアントから、上で設定したIPアドレスにログインできることを確かめます。
ID/PASS : vagrant/vagrant でログインします。
仮想マシンの停止
vagrant halt
VirtualBoxマネージャで見ると「電源オフ」と表示されます。
仮想マシンの設定
外部リポジトリの追加
最新のphpやMySQLをインストールするために、epel及びremiリポジトリを追加し
site-cookbooks/yum_repo/recipes/default.rb
# epel-repository
yum_package "epel-release" do
action :install
end
# remi-repository
execute "yum-repo" do
user 'root'
command 'yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm'
creates "/etc/yum.repos.d/remi.repo"
end
PHP7 + Composer のインストール
site-cookbooks/php/recipes/default.rb
# php7
package 'php' do
flush_cache [:before]
action :install
options "--enablerepo=remi --enablerepo=remi-php71"
end
%w(php-openssl php-common php-mbstring php-xml).each do |pkg|
package pkg do
action :install
options "--enablerepo=remi --enablerepo=remi-php71"
end
end
# composer
bash 'install_composer' do
not_if { File.exists?("/usr/local/bin/composer") }
user 'root'
cwd '/tmp'
code <<-EOH
curl -sS https://getcomposer.org/installer | php -- --install-dir=/tmp
mv /tmp/composer.phar /usr/local/bin/composer
EOH
end
Apacheのインストール&起動
Apacheの設定ファイルを予めテンプレートに用意しておき、CentOSにコピーします。
site-cookbooks/http/recipes/default.rb
yum_package "httpd" do
action :install
end
template "test.conf" do
path "/etc/httpd/conf.d/test.conf"
source "test.conf.erb"
owner "root"
group "root"
mode 0644
end
service "httpd" do
action :start
end
site-cookbooks/http/templates/default/test.conf.erb の例。必要な設定をここに含めておけばOK。
alias /test/ /home/vagrant/public/
<Directory /home/vagrant/public/>
AllowOverride all
Require all granted
</Directory>
MySQLのインストール&起動
site-cookbooks/mysql/recipes/default.rb
remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-11.noarch.rpm" do
source 'https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm'
action :create
end
rpm_package 'mysql57-community-release' do
source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-11.noarch.rpm"
action :install
end
package "mysql-community-server" do
action :install
end
service "mysqld" do
supports :status => true, :restart => true, :reload => true
action [ :enable, :start ]
end
別途データベースの初期設定が必要、MySQL57の初期rootパスワード取得を調べ中
必要なパッケージのyumインストール
nano
emacs は趣味です。
site-cookbooks/yuminstall/recipes/default.rb
%w(git nano emacs).each do |pkg|
package pkg do
action :install
options "--enablerepo=remi --enablerepo=remi-php71"
end
end
(番外)yum update 実行
site-cookbooks/yumupdate/recipes/default.rb
execute "yum-update" do
user "root"
command "yum -y update"
action :run
end
Vagrantfileに実行設定を追加
./Vagrantfile に以下の記述を追加。
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "./site-cookbooks"
chef.add_recipe "yum_repo"
chef.add_recipe "yumupdate"
chef.add_recipe "http"
chef.add_recipe "php"
chef.add_recipe "mysql"
end
仮想サーバに反映
仮想サーバを再起動し、設定を反映します。
>vagrant reload --provision
処理が完了したら、再度sshログインして所定の設定ができていることを確認する
エラーがでたらどこかでタイプミスをしている可能性が高いです。
設定情報の共有
これから以下のを事をして開発環境をそろえる
- 各種設定やテスト用データベースの自動登録レシピを追加。
- git で共有し、git clone / vagrant up で開発環境完成の状態にする。
共有フォルダのマウントエラー対応
yum updete 後に、vagrant コマンドで下のようなエラーが発生しました。
Vagrant was unable to mount VirtualBox shared folders. This is usually
<snip>
Vagrant box. For context, the command attempted was:
mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant
The error output from the command was:
/sbin/mount.vboxsf: mounting failed with the error: No such device
yum updateにより、カーネルが更新されしまい、ディレクトリ共有を行うVirtualboxGuestAdditionのバージョンが, ホストとゲストでずれることによって発生するようです。これを解消するためにプラグインを導入します。
vagrant plugin install vagrant-vbguest
参考
あちこちを参考にさせてもらいましたが、古いものはそのままではダメで、適切に読み変える必要があります。
- http://box406.hatenablog.com/entry/2013/06/01/010715
- http://asobo.hatenablog.jp/entry/2016/01/17/114807
- http://qiita.com/ozawan/items/160728f7c6b10c73b97e
- http://qiita.com/Esfahan/items/8f47382e9e712253feee
- http://www.asnm4.com/2014/09/chef%E3%81%A7yum-update%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%89%8B%E9%A0%86/