- 更新日: 2014年7月7日
- Vagrant & Chef
ChefコミュニティのCookbookでサーバー構成管理
前回 Vagrant と Chef-solo を使って、仮想マシン上の CentOS に Git をインストールしてみました。その続きで、今回は Chef のコミュニティで配布してある Cookbook を利用してサーバー構成管理を行ってみます。
Chef超入門、Chef-soloでVagrant上の仮想マシンのCentOSにGitをインストールするとこまで | EasyRamble
Chef 学習の順序としては、まずこのコミュニティの Cookbook をサーバー構成に適用して Chef に慣れた後に、独自カスタマイズの Recipe, Cookbook を作成していくと良いかな〜と思います。コミュニティのクックブックは、以下で配布されています。
では早速、前回までの作業ディレクトリへ移動。内容を確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ cd ~/Vagrant/CentOS64 $ tree -a -L 2 . ├── .bundle │ └── config ├── .vagrant │ └── machines ├── Berksfile ├── Berksfile.lock ├── Gemfile ├── Gemfile.lock ├── Vagrantfile └── vendor ├── bundle └── cookbooks |
Gemfile に knife-solo を追加
Gemfile に knife-solo を追加します。knife は chef で利用するコマンドツール群です。
1 2 3 4 5 6 7 8 9 |
$ vi Gemfile source "https://rubygems.org" gem "chef" gem "berkshelf" gem "knife-solo" $ bundle install |
knife solo init で Cookbook 導入・作成の準備
knif が入ったら、knife solo コマンドで init。
1 2 3 4 5 6 7 8 |
$ bundle exec knife solo init . WARNING: No knife configuration file found Creating kitchen... Creating knife.rb in kitchen... Creating cupboards... Setting up Berkshelf... |
なんか WARNING 出ましたけど先に進みます。作成されたディレクトリ・ファイルを確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ tree -a -L 1 . ├── .bundle ├── .chef ├── .gitignore ├── .vagrant ├── Berksfile ├── Berksfile.lock ├── Gemfile ├── Gemfile.lock ├── Vagrantfile ├── cookbooks ├── data_bags ├── environments ├── nodes ├── roles ├── site-cookbooks └── vendor |
以下のディレクトリ・ファイルが knife solo init により追加されました。各々簡単な説明とともに。
1 2 3 4 5 6 7 8 9 10 |
├── .chef ├── .gitignore - git管理しないファイル・ディレクトリを指定 ├── cookbooks - コミュニティのクックブックを配置 ├── data_bags - Chefのデータ格納場所 ├── environments - Chefの環境ごとの設定 ├── nodes - Chefの設定先サーバーごとの設定 ├── roles - Chefのレシピを役割毎にまとめる ├── site-cookbooks - 独自カスタマイズのクックバックを配置 |
前回 berks コマンドでコミュニティの Cookbook をインストールした時に、パスを vendor/cookbooks に指定しました。
1 2 3 |
$ bundle exec berks vendor vendor/cookbooks |
しかし knife solo init によると、どうやら ./cookbooks/ のパスにコミュニティの Cookbook を入れるのが流儀らしい。./cookbooks のパスに変更して入れなおしておきます。
1 2 3 4 5 |
$ rm -rf cookbooks $ bundle exec berks vendor cookbooks $ touch cookbooks/.gitkeep |
vendor/cookbooks は削除しておく。
1 2 3 |
$ rm -rf vendor/cookbooks |
Vagrantfile の cookbooks のパスを指定。
Vagrantfile
1 2 3 4 |
config.vm.provision :chef_solo do |chef| chef.cookbooks_path = ["./cookbooks"] chef.add_recipe "git" end |
念のためプロビジョニング。
1 2 3 4 5 6 7 |
$ vagrant reload $ vagrant provision $ vagrant ssh [vagrant@localhost ~]$ git --version git version 1.7.1 |
ここで .gitignore を書いて git 管理下にしておきます。
1 2 3 4 5 6 7 8 9 10 11 |
$ vi .gitignore /.bundle/ /.chef/ /.vagrant/ /cookbooks/ /vendor/ $ git init $ git add . $ git commit -m "Inital commit" |
Berksfile と Vagrantfile にコミュニティのクックブックを設定
Berksfile にコミュニティに既存の Cookbook を追加。
Berksfile
1 2 3 4 5 6 7 8 9 10 11 12 |
source "https://api.berkshelf.com" cookbook 'git' cookbook 'build-essential' cookbook 'memcached' cookbook 'nodejs' cookbook 'database' cookbook 'xml' cookbook 'rbenv', :git => 'git://github.com/fnichol/chef-rbenv.git', :ref => 'v0.7.2' cookbook 'ruby_build' cookbook 'nginx' cookbook 'imagemagick' |
Vagrantfile にレシピ追加の設定を書く。
Vagrantfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| #... config.vm.provision :chef_solo do |chef| chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"] chef.add_recipe 'build-essential' chef.add_recipe 'git' chef.add_recipe 'memcached' chef.add_recipe 'nodejs' chef.add_recipe 'database' chef.add_recipe 'xml' chef.add_recipe 'ruby_build' chef.add_recipe 'rbenv::system' chef.add_recipe 'nginx' chef.add_recipe 'imagemagick' chef.json = { "rbenv" => { "global" => "2.1.2", "rubies" => [ "2.1.2" ], "gems" => { "2.1.2" => [ { 'name' => 'bundler' } ] } } } end #... end |
とりあえず練習用なので、指定した cookbook は、パーフェクト Ruby on Railsの8章を参考にさせて頂きました。
プロビジョニング実行
cookbooks ディレクトリが存在すると berks vendor コマンドが失敗するので、最初に rm しておきます。
1 2 3 4 5 6 7 |
$ rm -rf cookbooks $ bundle exec berks vendor cookbooks $ touch cookbooks/.gitkeep $ vagrant reload $ vagrant provision |
今回は、インストールするパッケージが多いので、プロビジョニングに時間がかかります。終わったら、ssh でログインして色々パッケージがインストールされたかを確認。
1 2 3 4 5 6 7 8 9 10 11 |
$ vagrant ssh [vagrant@localhost ~]$ rbenv versions system * 2.1.2 (set by /usr/local/rbenv/version) [vagrant@localhost ~]$ convert --version Version: ImageMagick 6.5.4-7 2014-02-10 Q16 OpenMP http://www.imagemagick.org Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC [vagrant@localhost ~]$ node --version v0.10.15 |
convert は imagemagick のコマンド。以上で、コミュニティの Cookbook を用いて、簡単に複数のパッケージをインストールすることができました。コミュニティで配布されているクックブックは、抽象化されていて Linux ディストリビューションによる差異を気にする必要がありません。Chef さんほんとすごい、便利。
- – 参考リンク –
- まちクエスト運営ブログ VagrantとChefSoloを使って、まちクエストの開発環境構築を自動化
- サーバー設定ツール「Chef」の概要と基礎的な使い方 – さくらのナレッジ – Part 2
- Chef Soloの正しい始め方 | tsuchikazu blog
- レシピの作成を通してChefの具体的な使用イメージをつかもう | Think IT(シンクイット)
- ChefでCookbookを作成するときのちょっとしたコツ 9選 – インフラエンジニアway – Powered by HEARTBEATS
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- Chef で iptables の設定
- ChefでSSH接続用の公開鍵をサーバーに設置
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
Leave Your Message!