はじめに
さくら VPS に Rails アプリをデプロイするために、Nginx や MySQL やらインストールしてみたけど、同じ作業を VMware Player+CentOS でテストするときにやるかもしれない。さらには、将来 Amazon EC2 を使うときにも。今から環境構築は自動化しておいた方がよさそうだ。
chef を使ってみる
chef といっても、chef-solo だけど。chef-client/chef-server は導入が超面倒なので。その点、chef-solo はスタンドアロンで動くから導入が手軽。
パッケージのインストールだけなら rake や capistrano でもできるけど、設定ファイルを配置したいし、chef でいく。
chef をインストール
CentOS では既に rbenv + ruby-build を使って Ruby1.9.3 をインストールしてあるので、chef のインストルは gem で一発。
# chef をインストール gem install chef --no-rdoc --no-ri # rbenv を使っていたら必要 rbenv rehash
レシピの雛型を入手
chef で使うレシピの雛型が Github で公開されている。
これを基に、レシピを作成していく。
ホームディレクトリで
git clone https://github.com/opscode/chef-repo.git
を実行してダウンロード。
Vim をインストールするレシピを作成してみる
今回は練習として、Vim をインストールするレシピを書いてみる。作業は che-repo 内で行う。
cookbook 作成
rake new_cookbook COOKBOOK=vim
で cookbook を作成。cookbook はインストールするパッケージごとに作成するのがいいみたいだ。
本当は knife コマンドを使った方がいいんだけど、上手く動かなかったので、ひとまず new_cookbook で回避した。後で調べないとな。
レシピを記述
yum リポジトリから Vim をインストールし、設定ファイルを配置するレシピを書いてみる。
chef-repo/cookbooks/vim/recipes/default.rb に次を記述。
package "vim" do action :install end rcfile = File.join(node[:vim][:dir], ".vimrc") template rcfile do source "vimrc.erb" end file rcfile do owner node[:vim][:user] end
設定ファイルのテンプレートを記述
chef-repo/cookbooks/vim/templates/default/vimrc.erb に次を記述。
syntax on filetype on filetype indent on filetype plugin on set autoindent set expandtab set number set nobackup set backspace=indent,eol,start set tabstop=2 set softtabstop=2 set shiftwidth=2
Attributes を記述
レシピやテンプレートで使う値を chef-repo/cookbooks/vim/attributes/default.rb に記述する。
default[:vim][:dir] = "/home/test" default[:vim][:user] = "test"
インストール先やユーザー名など、環境によって変わる値は、レシピに直接書かずに Attributes に書くのがよさそうだな。
chef-solo を実行してみる
その前に設定ファイルを作成
chef-repo/.chef/solo.rb を作成。
file_cache_path "/tmp/chef-solo" cookbook_path "/home/test/chef-repo/cookbooks"
cookbooks のディレクトリを指定している。
実行するレシピを指定するファイル chef-repo/.chef/chef.json も作成。
{ "run_list": [ "recipe[vim]" ] }
今回は Vim だけ。
chef-solo 実行
sudo chef-solo -c .chef/solo.rb -j .chef/chef.json
を実行。
Vim がインストールされて、設定ファイルが配置されたら OK。