タグ ‘ Docker

Vagrant+Chef+BerkShelfでの環境構築

今回はWindow環境でVagrant+Chef+BerkShelfを使って、Immutable Infrastractureライクな環境作りの為のメモ。

とりあえずiptablesの設定とmysqlとrbenvを入れてみよう

【OS】
Window 7 64bit
Ruby 1.9.3p484
Vagrant 1.3.5
– Plugin
– vagrant-berkshelf 1.3.7
– vagrant-omunibus 1.2.1
Chef 11.10.2
BerkShelf 2.0.14

【これから作るVM環境】
CentOS-6.3 64bit
yum
mysql
rbenv

Windowsの各アプリケーションはインストーラーを使ってインストールしてあるけど、
BerkShelfはGemからのインストールなのでRubyが必要となっている。

まずはVM用の環境設定
berksコマンドでVM用のcookbookを作成する

# /test
berks cookbook chef-repo

 

そして出来たディレクトリ内に移動して、各ファイルを編集する

# /test/chef-repo/Vagrantfile
Vagrant.configure("2") do |config|
  # ここにホスト名を設定する
  config.vm.hostname = "chef-repo"
  # 登録してあるBoxを利用できるので、好きなBoxを設定する
  config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal"

  # Boxが登録されていなければ、WEBからダウンロードしてインストール出来る
  # 例えば、ここから選んでダウンロードもできるよ
  # URL="http://www.vagrantbox.es/"
  config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box"

  # VMにipアドレスを設定したい時に使う
  config.vm.network :public_network, ip: "192.168.0.100"

  config.berkshelf.enabled = true

  # 共有フォルダ設定
  config.vm.synced_folder "../chef-repo", "/var/www/"

  # ネットワークが遅い現象の対策
  # URL="https://github.com/mitchellh/vagrant/issues/1172"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
  end

  # バージョン xx.xx.xx のchefを使いたい場合
  # config.omnibus.chef_version = "xx.xx.xx" 

  # ここからがProvision時の設定内容
  config.vm.provision :chef_solo do |chef|
    # 利用したいcookbookのパラメータをJSONとして設定する
  chef.json = {
      mysql: {
        # データベースのパスワード
        server_root_password: "test",
        server_repl_password: "test",
        server_debian_password: "test",
        bind_address: "127.0.0.1"
      }
    }
    # cookbooksに集約されているので、そこにだけパスを通す
    chef.cookbooks_path = "cookbooks"

    # rolesのパスも通す
    chef.roles_path = "roles"

   # roleを指定
    chef.add_role("local")
  end
end
# /test/chef-repo/Berksfile
site :opscode

metadata
cookbook 'iptables', path: './site-cookbooks/iptables'
cookbook 'mysql', git:'https://github.com/opscode-cookbooks/mysql.git'
cookbook 'rbenv', ">= 1.4.1" , git: 'git://github.com/RiotGames/rbenv-cookbook.git'
# /test/chef-repo/roles/local.rb
name "local"
description "for local development"

run_list(
  "recipe[chef-repo]",
  "recipe[yum::epel]",
  "recipe[yum::remi]",
  "recipe[iptables]",
  "recipe[mysql::client]",
  "recipe[mysql::server]"
)

knifeコマンドでiptablesのcookbookを作成する

# /test/chef-repo
knife cookbook create iptables -o site-cookbooks

レシピファイルと設定ファイルを作成する

# /test/chef-repo/recipes/default.rb
include_recipe 'rbenv::default'
include_recipe 'rbenv::ruby_build'

# Rubyのバージョンが古いとエラーになることがあるので注意
rbenv_ruby "2.0.0-p353" do
  ruby_version "2.0.0-p353"
  global true
end
# /test/chef-repo/site-cookbooks/iptables/recipes/default.rb
service "iptables" do
  supports :status => true, :restart => true, :reload => true
  action [:enable, :start]
end

template "/etc/sysconfig/iptables" do
  source "iptables"
  owner "root"
  group "root"
  mode 0600
  notifies :restart, 'service[iptables]'
end
# /test/chef-repo/site-cookbooks/iptables/templates/default/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

これで一通りの下準備はOK
あとはvagrantコマンドを実行して正常に起動するか確認する

# /test/chef-repo
vagrant up
# /test/chef-repo
vagrant ssl

VM内の設定が狙った通りになっていれば完了

 

はあ、構造がわかるまでは結構苦戦したなー
だけど依存関係をしっかり追えばわかってくる感じ
とにかくVagrantとChefの連携のやり方が様々あるからどれが正しいのかわかりづらい>< どれかしっかりとしたベストプラクティスが出てくるのを期待 次はDockerも使えるようになりたい^^   参照: Vagrantとネットワーク設定 http://0xfffffff7.hatenablog.com/entry/2013/11/29/160912
今っぽい Vagrant + Chef Solo チュートリアル
http://qiita.com/taiki45/items/b46a2f32248720ec2bae
[Chef]入門Chef-Soloを片手にRailsアプリを動作させるところまでやってみた
http://d.hatena.ne.jp/ntaku/20130324/1364132658
VagrantとChef-soloについて初歩の備忘
http://havelog.ayumusato.com/develop/server/e562-vagrant_with_chef.html

 

 


return top