Chef Soloローカル開発環境の自動構築 ~knife-solo Apache,MySQL設定編~
実用的な例として、Apache&MySQLのインストールとサービスの立ち上げを
クックブックを作成しながら、Chef Soloで行う。
1. Apache&MySQLのクックブックを作成
* Apacheのクックブックを作成
knife cookbook create apache -o site-cookbooks
* MySQLのクックブックを作成
knife cookbook create mysql -o site-cookbooks
2. Nodeオブジェクトを設定
nodes/192.168.33.11.jsonを編集してランリストに2つのレシピを追加し、
それぞれが適用されるようにする。
ーーーーーーーーーーーーーーーーーーーーーーーーー
{
"run_list":[
"recipe[dstat]",
"recipe[apache]",
"recipe[mysql]"
]
}
ーーーーーーーーーーーーーーーーーーーーーーーーー
3. Apacheのレシピを作成
site-cookbooks/apache/recipes/default.rbに以下を追記。
ーーーーーーーーーーーーーーーーーーーーーーーーー
package "httpd" do
action :install
end
service "httpd" do
action [ :enable, :start ]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
※ :enableはOS起動時のサービスの有効化(/sbin/chkconfig httpd onに相当)
:start はサービス起動(/sbin/service httpd startに相当)
※ packageやserviceといったキーワードを「リソース」と呼ぶ。
4. MySQLのレシピを作成
site-cookbooks/mysql/recipes/default.rbに以下を追記。
ーーーーーーーーーーーーーーーーーーーーーーーーー
remote_file "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm" do
source 'http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm'
action :create
end
rpm_package 'mysql-community-release' do
source "#{Chef::Config[:file_cache_path]}/mysql-community-release-el7-5.noarch.rpm"
action :install
end
package "mysql-server" do
action :install
end
service "mysqld" do
action [ :enable, :start ]
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
5. knife-soloでChef Soloを実行
knife-soloを使ってリモートのノード(192.168.33.11)にプロビジョニングを実施。
knife solo cook 192.168.33.11
6. ブラウザで動作確認
http://192.168.33.11/ にアクセスしApacheのデフォルト画面が表示されることを確認。
7. Apacheの設定ファイルをChefで管理
* Apacheの設定、httpd.confもChefで管理できるようにしていく。
* VagrantにはホストOS(作業用マシン側)とゲストOS(仮想サーバ側)の間でディレクトを共有する機能があり、初期状態で有効になっている。試しに、ゲストOS側の /vagrantディレクトでlsを実行すると、ホストOS側で作ったVagrantfileそのほかのファイルが見えるはず。Vagrantfileを置いたディレクトリがゲストOSの /vagrantディレクトリとしてマウントされているので、このディレクトを使ってホストOSとゲストOSでのファイルのやり取りが可能。この機能を使って、ゲストOS側の /etc/httpd/conf/httpd.confをホストOS側のクックブック内のtemplate/defaultディレクトにコピーする。
* httpd.confのコピーを実行
cp /etc/httpd/conf/httpd.conf /vagrant/site-cookbooks/apache/templates/default/httpd.conf.erb
※ .erbはRubyの標準ライブラリのテンプレートエンジンであるERBの拡張子。
ERBを使うと任意のテキストファイルにRubyスクリプトを埋め込み実行できる。
8. httpd.confを編集
ゲストOS側にApacheの変更を適用するため、
試しにhttpd.conf.erbに以下一文を追記する。
ServerName knife-solo.local.co.jp:80
9. レシピにtemplateリソースを記述
site-cookbooks/apache/recipes/default.rbに以下を追記。
内容としては、httpd.conf.erb編集内容を/etc/httpd/conf/httpd.confに配置させ、
その際、ownerとgroupをrootでパーミッションを0644に設定せよという意味。
ーーーーーーーーーーーーーーーーーーーーーーーーー
template "httpd.conf" do
path "/etc/httpd/conf/httpd.conf"
owner "root"
group "root"
mode 0644
notifies :reload, 'service[httpd]'
end
ーーーーーーーーーーーーーーーーーーーーーーーーー
10. ゲストOS側に変更内容を適用させる
以下コマンドを実行し、templateリソースの適用とApacheの設定が反映されたことを確認する。
knife solo cook 192.168.33.11