備忘録として使ったコマンドやハマったことなどメモしていきます。
本の方ではVagrantでCentOS 6.5をインストールしていますが、自分の環境では6.4をインストールしているので多少違いがあるかもしれません。
手元のマシンはMacOSです。
ChefSoloについて
ChefSoloはオープンソースて提供されているChefのスタンドアロン版。
ChefServerを使用しない場合はこちらを使う。
2.4 Chefを動かしてみる
- インストーラでChefをインストールする
curl -L https://www.opscode.com/chef/install.sh | sudo bash
- cookbookを作成する
sudo knife cookbook create hello -o /var/chef/cookbooks
cd /var/chef/cookbooks
sudo vim /hello/recipes/default.rb
- "Hello chef!"と出力するレシピを書く
vim recipes/default.rb
ruby"var/chef/cookbooks/hello/recipes/default.rb"
#
# Cookbook Name:: hello
# Recipe:: default
#
# Copyright 2014, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#
#
log "Hello Chef!!"
- レシピを実行
- -o オプションで実行するレシピを指定
chef-solo -o hello
2.5 パッケージをインストールする
"dstat"というモニタリングツールをインストールします。
先ほどと同じく、
sudo knife cookbook create dstat -o /var/chef/cookbooks
ruby"var/chef/cookbooks/dstat/recipes/default.rb"
package "dstat" do
action :install
end
sudo chef-solo -o hello,dstat
- rpmでインストール確認
rpm -q dstat
> dstat-0.7.0-1.el6.noarch
2.6 knife-soloでchef-soloをリモート実行する
Vmをログアウトして手元の環境に戻ります。
knife-soloはChefをChefSolo環境で利用するためのツール。
手元で作ったクックブックをリモートのサーバーに転送してchef-soloを実行するといったことができるようになる。
berkshelfはクックブックの依存関係を管理するツール。
gem install knife-solo
gem install berkshelf
- knife-soloでリポジトリを作る
Vagrantファイルの置いてあるディレクトリにて実行します。
pwd
> /Users/yuto/Work/vagrant/centos
knife solo init.
$ tree
.
├── Berksfile
├── Vagrantfile
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks
- knifeを使ってリモートでVMにChefSoloをインストールする
knife solo bootstrap centos
- 先ほどと同じようにdstatのクックブックを作る
knife cookbook create dstat -o site-cookbooks
vim site-cookbooks/dstat/recipes/default.rb
Nodeオブジェクト
ノード(Chefで管理するサーバ)の状態を記述する設定ファイル。
- dstatレシピを追記しておく
json"nodes/centos.json"
{
"run_list": [
"recipe[dstat]"
],
"automatic": {
"ipaddress": "centos"
}
}
Nodeオブジェクトに追記することで、2.5のときは実行するレシピを指定していたのが不要になりました。
- プロビジョニング
knife solo cook centos
2.7 ChefSoloでApache,MySQLをセットアップする
knife cookbook create apache -o site-cookbooks
knife cookbook create mysql -o site-cookbooks
tree
└── site-cookbooks
├── apache
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── attributes
│ ├── definitions
│ ├── files
│ │ └── default
│ ├── libraries
│ ├── metadata.rb
│ ├── providers
│ ├── recipes
│ │ └── default.rb
│ ├── resources
│ └── templates
│ └── default
├── dstat
│ ├─ (省略)
│
└── mysql
├── CHANGELOG.md
├── README.md
├── attributes
├── definitions
├── files
│ └── default
├── libraries
├── metadata.rb
├── providers
├── recipes
│ └── default.rb
├── resources
└── templates
└── default
- Nodeオブジェクトを編集する
json"nodes/centos.json"
{
"run_list": [
"recipe[dstat]",
"recipe[apache]",
"recipe[mysql]"
],
"automatic": {
"ipaddress": "centos"
}
}
- レシピを書く
ruby"site-cookbooks/apache/recipes/default.rb"
package "httpd" do
action :install
end
service "httpd" do
action [:enable, :start]
end
ruby"site-cookbooks/mysql/recipes/default.rb"
package "mysql-server" do
action :install
end
service "mysqld" do
action [:enable, :start]
end
- レシピを適用
knife solo cook centos
Apacheの設定ファイルをChefで扱う
- httpd.confの設定ファイルをVMからコピーしてくる
# VM側で実行
cp /etc/httpd/conf/httpd.conf /vagrant/site-cookbooks/apache/templates/default/httpd.conf.erb
- ServerNameを変えてみる
erb"site-cookbooks/apache/templates/default/httpd.conf.erb"
ServerName centos-chef:80
- apacheのレシピにて、templates以下のhttpd.conf.erbを読むように以下を追記
- テンプレートを/etc/httpd/conf/httpd.conf 以下に配置
- owner,groupはrootで、パーミッションは644で
- notifiesはテンプレートの配置が終わったらhttpdのサービスをリロードしろ、という設定
ruby"site-cookbooks/apache/recipes/default.rb"
template "httpd.conf" do
path "/etc/httpd/conf/httpd.conf"
owner "root"
group "root"
mode 0644
notifies :reload, "service[httpd]"
end
- 実行する
knife solo cook centos
- VMを一度削除する
vagrant destroy -f
2.8 Chefリポジトリの扱い
*これまで作成したレシピをGitで管理します
git init
git add .
git commit -m "first commit"