Chef-soloでサーバを管理し始めるときに、僕が叩くn個のコマンドたち

こんにちは、ほっかいです。
サーバを渡り歩いていて、うっかり

aptitude install <パッケージ名>

と入力しちゃいそうになること、多いですよね。

"Chef勉強会@Engine Yardさんに行ってきた - 実はhokkai7go" - http://d.hatena.ne.jp/lncr_ct9a/20130223/1361597781

で、すっかりChefにどっぷりハマッてしまった身としては、
うっかり aptitude コマンドで何かをインストールすると、後悔の念にとらわれます。
そこで、次のコマンドたちでChefでのおいしい管理上に乗せてしまいます。
(最近出た id:naoya さんの電子書籍や、他の方の blog を読んでいるともっとさっくりできそうな気もしています...)

chef ではインストールだけじゃなくて、サービスの起動停止についてのレシピも書けます。
chef での管理までの道のりとして、

  • インストールを楽にする
  • サービス管理を楽にする

の2ステップがあると思っています。
いっきにこの2ステップを踏むこともできるんですが、ただでさえchefのコマンド体系とか覚えるの大変なので無理せず…


管理方針です

  • 大規模なサーバ管理はしていないので、今回は chef-solo で。
  • rubyはRVMで入れる
  • chefはgemとして入れる


RVMのインストール

\curl -L https://get.rvm.io | bash


rvm requirements で必要なパッケージ確認

rvm requirements


rvm requirements で出てきたパッケージたちを仕方なく aptitude で入れる(既に rvm 入っているサーバならやらない)

$ aptitude install (コピペしたパッケージたち)


gemset つくる

rvm ruby-1.9.3-pxxx@chef --create


chefとknife-github-cookbooksというgemをインストール

gem i chef knife-github-cookbooks  -V --no-ri --no-rdoc

gem コマンドには、 -V (詳細表示)しないと進んでんだか止まってんだかわからなくて気持ち悪い
サーバ上で ri やら rdoc を参照することは皆無なので、--no-ri --no-rdoc でスキップ
(レシピ先輩Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
ありがとう)


chef-repo ディレクトリを chef で使うリポジトリとして生成する

knife solo init chef-repo
cd chef-repo


chef-repo を コミット対象に ( knife-github-cookbooks で github からの recipe を入れるときに modified や untracked な状態だと 進めない)

git add .


最初のコミット

git commit -m "First commit"

僕は git commit -v でエディタを開いて、コミットメッセージを入れるほうが好きです。
diff やブランチ名を確認できるので。


ここでは例として、apt cookbook を入れる

knife cookbook github install cookbooks/apt -o ./cookbooks/


sshlocalhost に入れるようにする

cat ~/.ssh/<鍵の名前> >> ~/.ssh/authorized_keys
的なコマンドで…
パーミッションに注意...


knife で調理前の下ごしらえを
knife solo コマンドは、見た感じsshコマンドに似ています。この例ではlocalhost に接続してますが、
ローカルマシンから、リモートを指定して(xargsとか使って複数指定も可) prepare や cook をするみたいです。

knife solo prepare <ユーザー名>@localhost


実行したいレシピをnodes/localhost.json に書く

vi nodes/localhost.json


cookbook_path を指定する

vi solo.rb


cook する!!!
よいサーバー管理者のみなさんの扱う ssh のポートはたいてい、22じゃないよね? -p オプションでポート指定

knife solo cook <ユーザー名>@localhost nodes/localhost.json (-p xxxxx)


(^o^)