サーバーをchef-soloで一撃管理!

みなさんこんにちはメガーネです。

今回はchef-soloを使って夏バテに効きそうな清涼感あふれるサーバーの構築をご紹介いたします。

chef-soloができると何がうれしい!?

  • インストール作業が楽になる
    yum install httpd とか rpm -ivh mysql でインストールするルーチンワークから逃れられる

  • 設定ファイルもひな形を作成でき動的な値もマッピングできる
    httpd.conf とか php.iniとかvi開いて編集を繰り返えさなくてもよくなる

  • サーバーの技術的なナレッジを蓄積できそうな予感
    「前回設定したあれなんだっけあれ!あれやってくれるやつ!」みたいな会話が減る

  • 本番と同じ構成でローカル開発できる
    サーバーにあげたら何故か動きません!みたいな悲鳴が減る

今回の調理ポイント

  • centos6がうごくサーバー(今回はsakura vps)を使用
  • apacheをインストールします

Chef用語

Recipe(レシピ)

サーバーの設定手順書

Cookbook(クックブック)

Recipeをまとめとくやつ

Repository(レポジトリ)

CookbookとかをまとめたChef全体を管理する場所

難しい用語

Provisioning(プロビジョニング)

サーバー構築の自動化を行う

冪等性(べきとうせい)

引用(コピペ)
ある操作を1回行っても複数回行っても結果が同じであることをいう概念である。

Chefの基本的な動作として冪等性は保証されております。
ですが書き方によっては、1回目に実行した内容と2回目に実行した内容が変わってしまう可能性があるので
テストしっかり!

調理の前の下準備

chefをインストール!

http://chefsoloonwindowstutorial.readthedocs.org/en/latest/install-chef-solo.html

(インストール方法はまさかの割愛)

windowsユーザーは以下必読

chefファイルをサーバー上に送る際にrsyncを使っているですが、
こいつを使えるようにするためwindowsだと少し特殊なことをせねばなりませぬ。

若干面倒ですが以下の手順でrsync, sshを使えるようにする必要があります。
今回はcygwinを使います。

  1. cygwinのインストーラー起動
  2. Select Packageでrsync,opensshをインストール
  3. binフォルダにパスを通す(C:\cygwin\bin or C:\cygwin64\bin)
  4. cygwin ternimalを起動して

rsyncはcygwin経由で実行されるため/cygdriveが絶対パスになってしまうので、パスを通してあげる。

1
2
3
cd / 
ln -s /cygdrive/c c

調理開始!!

STEP1. Repositoryの作成

まずはRepositoryを作成しましょう

1
2
$ knife solo init chef-repo

こいうのができあがります(人´∀`).☆.。.:*・゚

1
2
3
4
5
6
7
chef-repo  ←Repository
├─.chef
├─cookbooks
├─data_bags
├─environments
├─roles
└─site-cookbooks

[cookbooks]

サードパティ製のCookbook
berkshelfというプラグインで管理するので手動ではいじらない

[site-cookbooks]

独自のCookbook
(基本ここにレシピを追加すればよさげ)

他のディレクトリは今回はふれません!

STEP2. Recipeの作成(献立を考える)

続いてRecipeの追加をしましょう

今回はsite-cookbooksにhttpdのRecipeを追加します

1
2
3
$ cd chef-repo
$ knife cookbook create httpd -o site-cookbooks

site-cookbooksにこいうRecipeができあがります(人´∀`).☆.。.:*・゚

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
site-cookbooks
└─httpd
├─attributes
│ └─default.rb
├─definitions
├─files
│ └─default
├─libraries
├─providers
├─recipes
│ └─default.rb
├─resources
└─templates
└─default

[attributes]

デフォルトの設定情報を定義

[files]

アップロードファイル

[templates]

設定ファイルのひな形
httpd.confなどの設定ファイルに値を動的にマッピングして利用する

[recipes]

実行内容を記述

他のディレクトリは今回はふれません!

STEP3. Recipeの編集

Recipeをいじっていきましょう!

file:

site-cookbooks/httpd/attributes/default.rb

1
2
3
4
default['httpd']['port'] = "80"
default['httpd']['documentroot'] = "/var/www/html"
default['httpd']['servername'] = "admin@localhost"

file:

site-cookbooks/httpd/templates/default/httpd-vhosts.conf.erb

attributes で設定した内容がマッピングされる

1
2
3
4
5
<VirtualHost *:<%= node[:httpd][:port] %>>
DocumentRoot <%= node[:httpd][:documentroot] %>
ServerName <%= node[:httpd][:servername] %>
</VirtualHost>

file:

site-cookbooks/httpd/templates/default/httpd-vhosts.conf.erb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 # apacheのインストール
package "httpd" do
action :install
end

service "httpd" do
supports :status => true, :restart => true, :reload => true
action [:start, :enable]
end

#共有のCookbook templatesで設定したhttpd-vhosts.confを適用
template "/etc/httpd/conf.d/httpd-vhosts.conf" do
source "httpd-vhosts.conf.erb"
notifies :restart, 'service[httpd]'
end

STEP4.サーバーにchefをインストール

サーバー上でプロビジョニングを行える環境を整えましょう。

1
$ knife solo prepare {ユーザー名}@{サーバーIP or HOST名}

上記を実行するとRepositoryにnodesというフォルダが作成されいて、その中に{HOST}.jsonというファイルが作成されています。
{HOST}.jsonにどのRecipeを実行するかとか、レシピの中で使いたい設定値(動的にマッピングする値)を書いていきます

1
2
3
4
5
6
{
"run_list": [
"httpd"
]
}

これでプロビジョニングできる環境が整いました!

STEP5. Let’s Cooking!!

1
$ knife solo cook {ユーザー名}@{HOST}

完了したらドキュメントルートにhtmlファイルを設置して確認してみよう!

Please share