Chef 使ってみた
Chef も使ってさっくり環境を手に入れたいのでやってみた
当たり前のように git git-flow
Chef
鯖蔵方式でクライアント側のマシンを自動でセットアップするツール。
当たり前だけどUI前提のインストーラしかない場合はやりようがない(窓ソフトでやろうとして現状諦めぎみ)
install
sudo gem install chef knife configure
vagrant は Vagrant 使ってみる - 謎言語使いの徒然 この辺に入ってる筈なので飛ばし。
sudo gem install knife-solo sudo gem install berkshelf
knife-solo は簡易操作IF群。berkshelf は chef のインストール設定(cookbook)を管理するソフト。 あと、適当に便利そうな vagrant プラグインを この辺 から選ぶ
sudo vagrant plugin install vagrant-berkshelf sudo vagrant plugin install vagrant-omnibus sudo vagrant plugin install sahara
上記は上から順に
予備知識
- resource : インストール操作のコマンド単位
- recipe : 複数の resource を記載する論理単位(cf: サービスユーザの作成等)
- cookbook : 複数の recipe を入れておく単位プロダクト単位に作るといい感じ
- node : chef で管理されるサーバのこと
- role : web/db とかの役割を定義。使う recipe や変数を設定する
使ってみよう
knife solo init java
まぁJava環境欲しかったから。実行すると java ディレクトリが掘られて、Chef の kitchen(repository ともいう) が設定される。 各ディレクトリ
- cookbooks : サードパーティ製の cookbook を入れておく場所
- data_bags : ユーザ等データ管理機能使用時に使う
- nodes : 各サーバ向け JSON ファイル(適用 cookbook 指定JSON)置き場
- roles : Role を使う際のディレクトリ
- site-cookbooks : 自作cookbook置き場
cd java
したら knife cookbook create user -o site-bookmarks
する。
すると、site-bookmarks に user という cookbook が作成される。
そしたら site-packages/user/recipes/user.rb
開いて
# # Cookbook Name:: user # Recipe:: user # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # user "program" do # openssl passwd -1 'program' password '$1$2y4//tUR$sX0KWu52nSbgznsgIGBnl0' home '/home/program' shell '/bin/bash' system true action :create end
として、site-packages/user/recipes/defaults.rb
# # Cookbook Name:: user # Recipe:: default # # Copyright 2013, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # include_recipe "user::user"
したら kitchen ルートの Berksfile を開いて編集
site :opscode cookbook 'apt' cookbook 'java' cookbook 'scala-sbt', git: 'https://github.com/garrettux/scala-sbt-cookbook.git' cookbook "user", path: "site-cookbooks/user"
1 行目はデフォルトで opscode リポジトリから coookbook を探すという設定。 なので、得にリポジトリが指定されない場合、上記だと apt/java が該当。
https://github.com/opscode-cookbooks
opscode のリポジトリはこれ。ここの中のものはかなり優秀。
scala-sbt
は https://github.com/garrettux/scala-sbt-cookbook のもの。
そしたら
ここまで来たらカレントディレクトリを kitchen のルートに戻る。
vagrant init "debian" "https://dl.dropboxusercontent.com/u/197673519/debian-7.2.0.box"
Vagrantfile 開いて下記を編集
config.berkshelf.enabled = true config.omnibus.chef_version = :latest # Enable provisioning with chef solo, specifying a cookbooks path, roles # path, and data_bags path (all relative to this Vagrantfile), and adding # some recipes and/or roles. # config.vm.provision :chef_solo do |chef| chef.cookbooks_path = ["cookbooks", "site-cookbooks"] chef.add_recipe("apt") chef.add_recipe("java") chef.add_recipe("scala-sbt") chef.add_recipe("defuser") end
起動とログイン
そしたら Vagrantfile up
すると、debian イメージが落ちてきて Berksfile の cookbook をデプロイして Vagrantfile の provision chef_solo 定義に従って cookbook を適用してくれると。
vagrant ssh
叩くと入れるし、vagrant ssh-config --host debian >> ~/.ssh/config
しておくと楽。
あと java と sbt と program ユーザの存在確認しておくといい。
これで毎度コマンド一発で java セットアップ済みの VM が拾ってこれる。