2014年4月6日日曜日

MacでChef + Vagrant 環境構築メモ

環境だけを手っ取り早く整えたい方用

用語などは別サイトで学んでください。


Chefのインストール
OfsCodeが提供しているChef配布用スクリプト

$ curl -L https://www.opscode.com/chef/install.sh | sudo bash


knifeの設定
色々聞かれるがとりあえず全部Enterで良い

$ knife configure


VirtualBoxのインストール
サイトから入手
[VirtualBox download]


Vagrantのインストール
gemでの配布は更新されていないのでサイトから入手
[Vagrant download]


VagrantでVM初期設定
VagrantloudからOSイメージを探す
[Vagrantcloud]

例:centos-6.5の場合
vmの設定を置きたいディレクトリで下記のコマンドを入力

$ vagrant init chef/centos-6.5


作成されたVagrantfileを編集
コメントアウトを外す
➡ Vagrantを入れた環境からアクセスできるようにし、VMのIPを192.168.33.10に設定

config.vm.network "private_network", ip: "192.168.33.10"


VM起動
Vagrantfileがあるディレクトリで

$ vagrant up


ssh接続
~/.ssh/config に下記を追加編集
sshコマンドでvmへ接続できるように

HOST 192.168.33.*

 IdentityFile ~/.vagrant.d/insecure_private_key

 User vagrant


下記のコマンドでも可
ssh設定を出力して書き出し

vagrant ssh-config --host 192.168.33.* >> ~/.ssh/config


内容は以下

Host 192.168.33.∗

  HostName 127.0.0.1

  User vagrant

  Port 2222

  UserKnownHostsFile /dev/null

  StrictHostKeyChecking no

  PasswordAuthentication no

  IdentityFile /Users/$HOST_NAME/.vagrant.d/insecure_private_key

  IdentitiesOnly yes

  LogLevel FATAL


ssh接続(まだしなくても良い)

$ ssh 192.168.33.10


knife-soloインストール
gemコマンド

$ sudo gem install knife-solo


XCode5.1でClangエラーが出る場合は以下のコマンドを用いる

$ sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install knife-solo


~/.chef/knife.rb に下記を追加編集
tmpディレクトリの設定とCookbookをインポートする際の設定

knife[:solo_path] = '/tmp/chef-solo'

cookbook_path            ['./cookbooks']


knife-soloでChef Solo環境を生成
Chefレポジトリを作成
レポジトリを管理したいディレクトリで実行
下記だと chef-repoレポジトリが作成される

$ knife solo init chef-repo


合わせてgit管理
Chefレポジトリ直下で以下のコマンドを入力
 
$ git init

$ git add .

$ git commit -m "first commit"


Chefレポジトリ直下で以下のコマンドを入力
vmにChefをインストール

$ knife solo prepare vagrant@192.168.33.10


作成されたjsonファイルをコミット

$ git add nodes/

$ git commit -m "add node json file"


Cookbook作成
nginx というCookbook作成
Chefレポジトリ直下で以下のコマンドを入力

$ knife cookbook create nginx -o site-cookbooks


Recipe編集
site-cookbooks/nginx/recipes/default.rb を編集

package "nginx" do

  action :install

end



service "nginx" do

  supports :status => true, :restart => true, :reload => true

  action [ :enable, :start ]

end



template "nginx.conf" do

  path "/etc/nginx/nginx.conf"

  source "nginx.conf.erb"

  owner "root"

  group "root"

  mode 0644

  notifies :reload, 'service[nginx]'

end




上記recipeで使うtemplate(nginx.conf.erb)を作成
site-cookbooks/nginx/templates/default/ に作成

user nginx;

worker_processes 1;

error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;



events {

  worker_connections 1024;

}



http {

  include /etc/nginx/mime.types;

  default_type application/octet-stream;



  server {

    listen <%=node['nginx']['port']%>;

    server_name localhost;

    location /{

      root /usr/share/nginx/html;

      index index.html index.htm;

    }

  }

}


Cookbookをインポートする
centosでnginxを取得するにはyumのEPELというアドオンパッケージのyumレポジトリを有効にする必要がある
yumのCookbookを取得

$ knife cookbook site vendor yum

$ knife cookbook site vendor yum-epel


Nodeの設定
jsonファイルはサーバ(node)の状態を示す
nodes/192.168.33.10.json
下記のように編集

{

  "nginx":{

    "port":80

  },

  "run_list":[

    "yum-epel", "nginx"

  ]

}


vmへChef Soloを実行
実行後、http://192.168.33.10 へアクセスし、nginxが起動しているか確認

$ knife solo cook vagrant@192.168.33.10


以上。お疲れさまでした。

参考
Amazon.co.jp 入門Chef Solo
Qiita 「入門 Chef Solo」 on MacOSX ではまったこと
2noの日記 【Mac】clang によるビルドエラー【Xcode 5.1】

0 件のコメント:

コメントを投稿