LAMP環境のCookbookをとりあえず作成してみる
Vagrantを試してみる
の続き
かつ、Macにchefとknife-soloがインストールされた状態。
LAMP環境のCookbookをとりあえず作成してみる。
ChefのリポジトリとCookbookの作成
適当な場所にChefのリポジトリを作成する。
$ cd 適当なディレクトリ $ knife solo init chef-repo $ cd chef-repo
Cookbookを作成する。
$ knife cookbook create lamp -o site-cookbooks
テンプレートの作成
テンプレートをいくつか作成する。
VitualHostの設定のテンプレート。
$ vi site-cookbooks/lamp/templates/default/vhost.conf.erb
ServerName localhost NameVirtualHost *:80 <VirtualHost *:80> ServerName localhost DocumentRoot /vagrant <Directory /vagrant> AllowOverride all </Directory> </VirtualHost>
MySQLにユーザーを作成するためのテンプレート。
$ vi site-cookbooks/lamp/templates/default/grants.sql.erb
GRANT ALL ON *.* TO '<%= @user %>'@'localhost' IDENTIFIED BY '<%= @password %>'; GRANT ALL ON *.* TO '<%= @user %>'@'%' IDENTIFIED BY '<%= @password %>'; FLUSH PRIVILEGES;
$ vi site-cookbooks/lamp/templates/default/timezone.ini.erb
date.timezone = "Asia/Tokyo"
レシピの作成
とりあえずのLAMP環境を作成するためのレシピを作成する。
$ vi site-cookbooks/lamp/recipes/default.rb
#-------------------------------------- # package #-------------------------------------- # Apacheをインストールする # sudo yum install -y httpd package "httpd" do action :install end # MySQLをインストールする # sudo yum install -y mysql-server package "mysql-server" do action :install end # PHPと関連するモジュールをインストールする # sudo yum install -y php # sudo yum install -y php-mbstring # sudo yum install -y php-mysql package "php" do action :install end package "php-mbstring" do action :install end package "php-mysql" do action :install end #-------------------------------------- # service #-------------------------------------- # Apacheの起動と自動起動の設定を行う # sudo service httpd start # sudo chkconfig on service "httpd" do action [:start, :enable] end # MySQLの起動と自動起動の設定を行う # sudo service mysqld start # sudo chkconfig mysqld on service 'mysqld' do action [:start, :enable] end #-------------------------------------- # execute #-------------------------------------- # MySQLにユーザー作成のSQLを実行するコマンドを用意する # /usr/bin/mysql -u root --password="パスワード" < /tmp/grants.sql execute "mysql-create-user" do command "/usr/bin/mysql -u root --password=\"#{node['db']['rootpass']}\" < /tmp/grants.sql" action :nothing end #-------------------------------------- # template #-------------------------------------- # vhost.confを設置する # sudo vi /etc/httpd/conf.d/vhost.conf template "vhost.conf" do path "/etc/httpd/conf.d/vhost.conf" source "vhost.conf.erb" mode 0644 notifies :restart, 'service[httpd]' end # MySQLのユーザーを作成するためのSQLを設置し、SQLを実行する # sudo vi /tmp/grants.sql template "/tmp/grants.sql" do owner "root" group "root" mode "0600" variables( :user => node['db']['user'], :password => node['db']['pass'], :database => node['db']['database'] ) notifies :run, "execute[mysql-create-user]", :immediately end # timezoneを設定するためのiniを設置する # sudo vi /etc/php.d/timezone.ini template "timezone.ini" do path "/etc/php.d/timezone.ini" source "timezone.ini.erb" mode 0644 notifies :restart, 'service[httpd]' end
nodesのjsonの作成例
nodesのjsonは、下記のような感じで書けばOK。
$ vi nodes/接続先.json
{ "db": { "rootpass": "ルートのパスワード", "user": "ユーザー名", "pass": "パスワード" }, "run_list": [ "recipe[lamp]" ] }
【参考】 DBが存在しないときにDBを作成するChefレシピを作ったときの試行錯誤メモ | misty-magic.h http://mistymagich.wordpress.com/2013/10/08/db%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%E3%81%ABdb%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8Bchef%E3%83%AC%E3%82%B7%E3%83%94%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F/