akadama

そこらへんにいるプログラマが適当にやってます

Chef を使ってみる その1

先日のVagrantのエントリー内でちょっと触れたChefを試してみます Chefとは — [Chef](http://wiki.opscode.com/display/chef/Home) [Chef でサーバ管理を楽チンにしよう!|るびま](http://jp.rubyist.net/magazine/?0035-ChefInDECOLOG) Rubyで作られたサーバの構成管理ツールです いろんなサーバにapacheとか入れたり設定ファイルも配置しちゃったりできるようです これで下記みたいな時に幸せになれるのかもしれません * 特定のサーバだけ設定がもれてて動かなかった! * あのサーバだけライブラリのバージョン違うじゃねぇか!! * 100台サーバあるけど、apacheのバージョン更新しといて ただ、ChefにはServerやらClientやらNodeやらRoleやらいろんな考えがあって、 最初から完璧にやろうと思うと必ず失敗します。 自分もすでに数回目(笑) 今回はVagrantで使うことを目的としていますので、chef-soloだけで試そうと思います 最終的には開発用のVirtualBoxと公開用サーバでアプリとか設定とかを統一していきたいです インストール — Rubyは入っているという想定です “` gem install chef “` これだけでOk Chefに関する設定ファイルを作成 — 下記のコマンドを実行して設定ファイルを作成します “` $ knife configure “` 設定ファイルの置き場所とかが聞かれると思うので $HOME/.chef/ にしてみましょう ファイルの設定が終わったら、~/.chef/knife.rbにcookbookの保管場所を設定します “` ruby cookbook_path ‘~/.chef/cookbooks/’ “` レシピ作成 — …ここではレシピと言うべきなのかクックブックと言うべきなのか インストールするもの毎に作るのが慣習ぽいです apacheならapacheだけ。PHPとかでライブラリを入れる場合は一緒でもいいのかな? 今回は単に静的ファイルを1つ置くだけのレシピを書いてみましょう “` $ knife cookbook create static_file “` cookbook_path以下にstatic_fileというディレクトリが出来ているはずです ここがstatic_fileレシピに関する情報をまとめるディレクトリになります ### レシピディレクトリの中身 * attributes * definitions * files * libraries * providers * recipes * resources * templates 8つのディレクトリと * metadata.rb * README.md 2つのファイルがあります 今回は静的ファイルを置くだけなので、recipesとfilesディレクトリ以外は消しておきます ### ファイルを置いてみる ファイルの扱いに関しては[ここ](http://wiki.opscode.com/display/chef/Resources#Resources-CookbookFile)を参考にしています ファイルを置くのは簡単で 1. files以下に置きたいファイルを置く 2. recipes/default.rbに cookbook_file メソッドでファイルを指定 といった感じです。 実際にやってみます files 以下にsample.txtを作る recipes/default.rb に以下のようにファイルを配置したいパスを指定 “` ruby cookbook_file ‘/tmp/sample.txt’ do mode ‘0644’ end “` これでレシピの作成は完了 ではこのレシピをVagrantで利用してみましょう Vagrantfileの途中にchef-soloの記述があるのでその部分を以下のように変更します “` ruby Vagrant::Config.run do |config| # 中略 config.vm.provision :chef_solo do |chef| chef.cookbooks_path = “~/.chef/cookbooks” chef.add_recipe “static_file” end end “` あとはVagrantから仮想マシンを立ちげれば反映されてるはずです “` $ vagrant up # すでに起動済みの場合はvagrant reload “` その後以下のコマンドでファイルがあるかを確認してみましょう “` $ vagrant ssh $ ls /tmp/sample.txt “` ファイルはちゃんと配置されたでしょうか? まだここだと嬉しさわからないと思うので次回はテンプレートを使って値の書き換え等を行うのを確認したいと思います