まっしろけっけ

めもてきなやーつ

knife solo cookで環境を構築してみる

今までの内容を踏まえknife solo cookで環境を構築してみるてきな

レシピ作成

今回の構成

  • base (gcc, make等の最低限必要なpackageを管理するcookbook)
  • ruby (rubyのversion管理用にはrbenvを使用)
  • mysql
  • redis
  • nginx
$ knife solo init chef-repo #初期化
$ cd chef-repo
$ knife cookbook create base -o site-cookbooks
$ knife cookbook create ruby -o site-cookbooks
$ knife cookbook create mysql -o site-cookbooks
$ knife cookbook create redis -o site-cookbooks
$ knife cookbook create nginx -o site-cookbooks

recipe fileをごにょごにょ
こちらに今回作成したchef-repoを置いていますので
詳細なrecipeに関してはそちらをご覧ください。

下記で簡単な説明を行います。

base
  • attributes/default.rbでinstallするpackageを管理
  • recipe/default.rbでinstall or upgradeを行う
ruby
  • attributes/default.rbでruby, bundlerのversionを管理

recipe/default.rbでは下記の順で記述

  • rbenvのレポジトリをcheckout
  • pluginsディレクトリを作成(エラーが出たので)
  • .bashrcに環境変数設定用の記述を追加
  • ruby-buildのレポジトリをcheckout
  • rbenvコマンドを使用してrubyのinstall
  • gemのbundlerをinstall
mysql
  • recipe/default.rb 現状packageでversion指定でmysqlをinstallしているだけ

後ほどattributesでのversion管理やtemplateでのmy.cnfを管理する予定

redis
  • recipe/default.rb 現状packageでredisをinstallしているだけ

後ほどtemplateでのmy.cnfを管理する予定

nginx
  • recipe/default.rb 現状packageでnginxをinstallしているだけ

後ほどtemplateでのmy.cnfを管理する予定

jsonの作成

$ vi roles/localhost_server.json
{
  "name"                : "localhost",
  "json_class"          : "Chef::Role",
  "description"         : "localhost kitchen",         
  "chef_type"           : "role",
  "run_list"            : [   
    "recipe[base]",
    "recipe[nginx]",
    "recipe[ruby]",
    "recipe[mysql]",
    "recipe[redis]"
  ]
}
$ vi nodes/192.168.50.12.json
{
  "run_list" : [              
    "role[localhost_server]"  
  ]
}

レシピ反映

chef soloをリモートホストに入れる
$ knife solo prepare 192.168.50.12
レシピの反映
$ knife solo cook 192.168.50.12
Running Chef on 192.168.50.12...
Checking Chef version...
Uploading the kitchen...
.......
.......
Chef Client finished, 14 resources updated

特にエラーも出ずにうまく行った

動作確認してみる

version確認等の簡単な確認

$ nginx -v
nginx version: nginx/1.0.15
$ sudo /etc/init.d/redis start
$ redis-cli
redis 127.0.0.1:6379>
$ ruby -v
ruby 2.0.0p451 (2014-02-24 revision 45167) [x86_64-linux]
$ bundle -v
Bundler version 1.5.3
$ mysql -u root
mysql> 

とりあえず一通り動いたみたいです。
recipeを更新したタイミングでこの記事も編集していく予定です。