Chef Howto with Vagrant + Berkshelf

3,298 views

Published on

Chef Howto with Vagrant + Berkshelf

2013-04-26
Xtone Ltd. ピザ会
Aki / @nekoruri

Published in: Technology

Chef Howto with Vagrant + Berkshelf

  1. 1. Chef Howtowith Vagrant + Berkshelf2013-04-26Xtone Ltd. ピザ会Aki / @nekoruri
  2. 2. おさらい• Chef– 設定ファイルに書いたとおりにサーバ内を整備– 新規環境でも既存環境でも結果は同じ– これで設定ファイルを差分管理できるね!• 原則– もうサーバ上で直接作業をしない• パッケージの追加・更新• 設定ファイルの変更
  3. 3. 今日のゴール• 誰でもChefで環境整備ができる– 新規の案件で、Capistrano走らせるところまで– Unicornは触らない(Capistranoから操作)
  4. 4. Chefに欠かせない便利ツール• Vagrant– VirtualBox等を良い感じに操作してくれるツール– Chefを統合して操作できる– http://www.vagrantup.com/ からダウンロード• Berkshelf– BundlerのChef版– Berksfileに書いたcookbookをGitHubから取得
  5. 5. おおまかな流れ1. Chefレポジトリの新規構築2. CookbookをBerkshelfで取得3. 共通の設定を記述4. 個別の設定を記述5. Vagrantで作成したサーバに適用6. 本番サーバに適用
  6. 6. 1. Chefレポジトリの新規構築空のChefレポジトリを作成Gitレポジトリとして初期化chefとberkshelfを導入% knife solo init myrepo% cd myrepo% cat <<EOF > .gitignore/vendor/bundle//vendor/cookbooks//.bundle//bin//.vagrant/EOF% git init% git add .% git commit -m initialized chef repository% bundle init% cat <<EOF > Gemfilesource https://rubygems.orggem knife-sologem berkshelfEOF% bundle install --path vendor/bundle --binstubs% git add Gemfile Gemfile.lock% git commit -m installed knife-solo, berkshelf
  7. 7. 2. CookbookをBerkshelfで取得利用するcookbookを取得chef-soloの設定ファイルにvendor/cookbooksを追加% cat <<EOF > Berksfilesite :opscodecookbook aptcookbook chef-solo-search, git: git://github.com/edelight/chef-solo-search.gitcookbook userscookbook sudocookbook nginxcookbook logrotate, git: git://github.com/drewrothstein/logrotate.gitcookbook nginx_vhost, git: git://github.com/nekoruri/cookbook-nginx_vhost.gitEOF% bin/berks install --path vendor/cookbooks% git add Berksfile Berksfile.lock% git commit -m Import apt/users/sudo cookbooks% cat <<EOF > solo.rbfile_cache_path "/tmp/chef-solo"data_bag_path "/tmp/chef-solo/data_bags"encrypted_data_bag_secret "/tmp/chef-solo/data_bag_key"cookbook_path [ "/tmp/chef-solo/site-cookbooks","/tmp/chef-solo/vendor/cookbooks" ]role_path "/tmp/chef-solo/roles"EOF
  8. 8. 3. 共通の設定を記述base cookbookを作成管理者ユーザ情報を追加% bin/knife cookbook create base -o site-cookbooks% cat <<EOF >> site-cookbooks/base/metadata.rbdepends aptdepends usersdepends sudoEOF% cat <<EOF >> site-cookbooks/base/recipes/default.rbinclude_recipe aptinclude_recipe users::sysadminsnode.override[authorization][sudo][passwordless] = trueinclude_recipe sudoEOF% mkdir data_bags/users% cat <<EOF > data_bags/users/miku.json{"id": "miku","uid": "10000","comment": "HATSUNE Miku","ssh_keys": ["ssh-rsa AAAA(省略)= miku@client.example.local"],"groups": [ "sysadmin" ],"shell": "/usr/bin/zsh"}EOF監視設定等を含む社内共通のbaseを準備中
  9. 9. 4. 個別の設定を記述ウェブサイトの設定をmysite cookbookとして作成デプロイ用ユーザの情報を設定% bin/knife cookbook create mysite -o site-cookbooks% cat <<EOF >> site-cookbooks/mysite/recipes/default.rbusers_manage app dogroup_id 10001action :createendinclude_recipe nginxnginx_vhost static.example.jpnginx_vhost rails.example.jp dounicorn trueendEOF% cat <<EOF > data_bags/users/app.json{"id": "app","ssh_keys": ["ssh-rsa AAAA(省略) = usera@a.example.jp","ssh-rsa AAAA(省略) = userb@b.example.jp"],"groups": [ "app" ],"shell": "/usr/bin/zsh"}EOF
  10. 10. 4. 個別の設定を記述baseとmysiteを呼ぶRoleを作成ここまでの設定をcommitnginxの設定ファイルを作成% vim site-cookbooks/mysite/templates/default/static.example.jp.erb% vim site-cookbooks/mysite/templates/default/rails.example.jp.erb% cat <<EOF > roles/web.rbname "web"description "Web Server"run_list("recipe[base]","recipe[mysite]")EOF% git add .% git commit -m mysite configuration
  11. 11. 5. Vagrantで作成したサーバに適用サーバ準備Vagrantの設定(Vagrant.configure block)Role "Web"を適用vagrantユーザにsudo許可サーバを起動してChefの設定を適用サーバ起動後にChefの設定を再適用% vagrant init precise32 http://files.vagrantup.com/precise32.box% vi Vagrantfileconfig.vm.provision :chef_solo do |chef|chef.cookbooks_path = ["vendor/cookbooks", "site-cookbooks"]chef.roles_path = roleschef.data_bags_path = data_bagschef.add_role(web)chef.json = {"authorization" => {"sudo" => {"users" => [ "vagrant" ]}}}end% git add Vagrantfile% git commit Initialized vagrant% vagrant up% vagrant provision
  12. 12. 6. 本番サーバに適用• 前回紹介した手順と同じ% knife solo prepare root@192.0.2.100% vi nodes/192.0.2.100.json% knife solo cook root@192.0.2.100

×