Chefで作る開発環境

36
Chefで作る開発環境 FUNTERACTIVE OPEN MEETING VOL.05

Transcript of Chefで作る開発環境

Page 1: Chefで作る開発環境

Chefで作る開発環境FUNTERACTIVE OPEN MEETING VOL.05

Page 2: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Yuji Tsukaguchiファンタラクティブ株式会社COO, Web Designer

無料写真素材サイト ぱくたそEnginner

@regret_raym

Page 3: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Page 4: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Chefとは?

・Rubyでコードを記述するサーバ構成管理ツール

!

・サーバ / クライアント形式とスタンドアロン形式の2つ

がある

Page 5: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Chef Server / Chef Client ( クライアント / サーバ形式 )

Chefの動作形式

Chef Server UIChef Server API

Rabbit MQ

PostgreSQL

Chef Client

Chef Client

Chef Client

Chef Client

管理対象サーバChef Server

Chefサーバを1台用意、対象サーバにはChef Clientをインストール

Page 6: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Chef Solo(スタンドアロン形式)

Chefの動作形式

対象サーバローカル端末

Chef Soloを実行サーバにインストール、設定内容のクックブック

を配置して実行する

クックブック Chef SoloUpload

Page 7: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Chefの用語

■ レシピ

  Rubyコードで書いたサーバ設定の手順

■ クックブック

  レシピに必要なデータやファイルをまとめる入れ物

■ リポジトリ、キッチン

  クックブックを含むChefの実行に必要なファイルの入れ物

■ ナイフ( knife )

  リポジトリを操作するツール、クックブックはこれで作る

■ ノード

  Chefで管理するサーバのこと

Page 8: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Chef Soloの基本

Page 9: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Chef Soloの使い方

対象サーバローカル端末

クックブック Chef Solo

Upload

レシピ

クックブックを作ってレシピを書く コマンド実行

Page 10: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Vagrant

# 任意のディレクトリ $ vagrant init BOX !# 起動 $ vagrant up !# ssh-config設定 $ vagrant ssh-config —host webdb >> ~/.ssh/config !# ログイン $ ssh webdb

Page 11: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Install

# インストール $ curl -L https://www.opscode.com.chef/install.sh | sudo bash !# Chef Soloの実行確認 $ chef-solo -v

※Vagrantを使ってインストール

Page 12: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

クックブックを作ってレシピを実行

# /var/chef/cookbooksディレクトリ内に作成 $ sudo knife cookbook create hello /var/chef/cookbooks !# レシピの編集 $ sudo vi /var/chef/cookbokks/hello/recipes.default.rb log “Hellow World!” !# Chef Solo実行 $ sudo chef-solo -o hello

Page 13: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

knife-soloを使う

対象サーバローカル端末

クックブック Chef Solo

Upload

レシピ

クックブックを作ってレシピを書く コマンド実行

knife-solo

Page 14: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

knife-soloのインストール

# インストール $ sudo gem install knife-solo $ sudo gem install berkshelf !# カレントディレクトリにリポジトリを準備 $ knife solo init .

Page 15: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

ディレクトリ構成

.

├── Berksfile

├── Vagrantfile

├── cookbooks/

├── data_bags/

├── environments/

├── nodes/

├── roles/

└── site-cookbooks/

Page 16: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

knife soloでChef Soloインストール

# knife soloでChef Soloインストール $ knife solo bootstrap webdb !# クックブック作成 $ knife cookbook create hello -o site-cookbooks !# レシピ編集 $ vi site-cookbooks/hello/recipes/default.rb log “Hello World!”

Page 17: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Nodeオブジェクトの設定

# Nodeオブジェクト設定ファイルの編集 $ vi nodes/webdb.json !{ “run_list” : [ “recipe[hello]” ] }

webdbというホストノードにhelloというレシピが適用される

Page 18: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

knife-soloでChef Soloを実行

# プロビジョニング $ knife solo cook webdb !# サーバに直接実行する場合 $ knife solo cook [email protected] -i ~/.ssh/id_rsa

Page 19: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

クックブックを作る

Page 20: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

クックブック作成

$ bundle exec knife cookbook create apache -o site-cookbooks

タスクごとにクックブックを作成

Apache MySQL

yum

PHP

iptables…etc

Page 21: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

bundler?

# Bundlerでgemの依存関係を解決 $ sudo gem install bundler !$ vi Gemfile !source ‘https://rubygems.org’ !gem ‘chef’ gem ‘knife-solo’ gem ‘berkshelf’ !$ bundle install !$ vagrant init !$ bundle exec knife solo init .

Page 22: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

レシピの作り方

■ 初期値を設定する(Attribute) !■ 設定ファイル(template)を配置する !■ レシピを書く

Page 23: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Attribute

default['apache'][:packages] = %w[ httpd httpd-devel ]

テンプレートやレシピの中から参照できるもの

site-cookbooks/apache/attributes/default.rb

.

├── site-cookbooks/

├── attributes

├── default.rb

Page 24: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Template

.

├── site-cookbooks/

├── templates

├── default

• クックブックのtemplateディレクトリ内に設定ファイルを置く • Templateリソースで設定ファイルをChef実行時に配置する

http.conf.erbvhost.conf.erb

Page 25: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

レシピの例

node['apache']['packages'].each do |pkg| package "#{pkg}" do action :install notifies :restart, 'service[httpd]', :delayed end end !service 'httpd' do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end !template '/etc/httpd/conf/httpd.conf' do source 'httpd.conf.erb' notifies :restart, 'service[httpd]' end

site-cookbooks/apache/recipes/default.rb

Attributeで設定した パッケージインストール

templateフォルダに配置した設定ファイルを配置

サービスの設定

Page 26: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

コミュニティクックブック

Page 27: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

_

http://cookbooks.opscode.com/cookbooks

Page 28: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

コミュニティクックブック

Chefのクックブックが集積されている

# クックブックを検索 $ knife cookbook site search apache2 !# クックブックの詳細 $ knife cookbook site show apache2 | head -20 !# クックブックのリスト一覧 $ knife cookbook site list !# クックブックのダウンロード $ knife cookbook site install apache2

Page 29: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Berkshelf

■ クックブックの依存管理ツール !■ bundlerと似たようなもの !■ 定義しておけば、リポジトリから 依存関係解消して落としてきてくれる

Page 30: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Berksfile

$ vi Berksfile !source “https://supermarket.getchef.com" #もしくは site :opscode !metadata !cookbook “yum" cookbook "git" cookbook "vim" cookbook "apache2" cookbook "php" cookbook “mysql" !$ bundle exec berks install —path ./cookbooks !$ bundle exec knife solo cook webdb

Page 31: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

WordPress環境

Page 32: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

http://vccw.cc/

Page 33: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

VCCW

$ vagrant plugin install vagrant-hostsupdater !$ git clone [email protected]:miya0001/vccw.git !$ cd vccw !$ cp Vagrantfile.sample Vagrantfile !$ vagrant up !Visit http://192.168.33.10/

Page 34: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

補足

Chef Soloは2014年6月に引退アナウンス 今後はChef Zeroに移行

Page 35: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

Chef Zero

Chef Zeroは開発のために、完全で、インメモリで、高速起動

するChef Serverです。データをディスクに残したり、認証や

認可を行うこともありません。

!

ローカルモードは実行中に、ローカルChef Zeroサーバを

localhostに起動し、すべてのローカルCookbookとRecipe

をそちらにアップロードし、Chef Clientを実行し、そして

Chef Zeroサーバを終了するという一連の動作を除けば、

Chef Soloのように動作します。

https://www.chef.io/blog/2014/06/24/from-solo-to-zero-migrating-to-chef-client-local-mode/

Page 36: Chefで作る開発環境

FUNTERACTIVE OPEN MEETING VOL.05 

ご清聴ありがとうございました