chef-solo で環境構築を自動化する練習メモ

はじめに

さくら VPSRails アプリをデプロイするために、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。

まとめ

今回は Vim 止まりだったけど、MySQL や Nginx などをインストールするレシピを作成しておけば、数コマンドでWebサーバーの環境を構築できるようになる。作成したレシピはもちろん git で管理しておこう。

そうそう、Github には cookbook が大量に公開されていた。

この中から拝借するのもいい。ただ、最初のうちは使い方を覚えるために、自分でレシピを書いた方がいいと思う。