入門
13年11月2日土曜日
自己紹介
小川 智和(おがわ ともかず)

•
•

13年11月2日土曜日

Twitter: @ogatomo
好きなもの:Emacs, Ruby, AWS, Railsなど
Chefについて
•

Opscode社が開発した
Configuration Management Tools

•

サーバーの設定に必要なスクリプトや設定ファイル
を一元管理

•

サーバーの初期設定や設定変更の自動化

13年11月2日土曜日
Chefの構成

13年11月2日土曜日
Chefの構成

13年11月2日土曜日
Chefの構成

13年11月2日土曜日
Chefの構成

13年11月2日土曜日
Chefの構成
chef-server

13年11月2日土曜日
Chefの構成
chef-server

chef-client
13年11月2日土曜日
Chefの構成
knife

chef-server

chef-client
13年11月2日土曜日
Chefの役割
Railsアプリのデプロイ

apache
mysql
ruby
nginx

等のインストール
& 設定

サーバー自体(CPU,HDD,メモリ)や
ネットワークの準備

13年11月2日土曜日
Chefの役割
Railsアプリのデプロイ

apache
mysql
ruby
nginx

等のインストール
& 設定

AWS
その他Cloud
サーバー自体(CPU,HDD,メモリ)や
ネットワークの準備

13年11月2日土曜日
Chefの役割
Railsアプリのデプロイ

Chef
apache
mysql
ruby
nginx

等のインストール
& 設定

AWS
その他Cloud
サーバー自体(CPU,HDD,メモリ)や
ネットワークの準備

13年11月2日土曜日
Chefの役割
Capistrano
Railsアプリのデプロイ

Chef
apache
mysql
ruby
nginx

等のインストール
& 設定

AWS
その他Cloud
サーバー自体(CPU,HDD,メモリ)や
ネットワークの準備

13年11月2日土曜日
Chefの役割
Capistrano
Railsアプリのデプロイ

Chef
apache
mysql
ruby
nginx

OS等の
違いを吸収

等のインストール
& 設定

AWS
その他Cloud
サーバー自体(CPU,HDD,メモリ)や
ネットワークの準備

13年11月2日土曜日
構築方法
13年11月2日土曜日
各種サーバー準備

先日の広島OSCで、無料クーポン頂きました!

13年11月2日土曜日
chef-server構築
chef-server

13年11月2日土曜日
chef-server構築
•

Ubuntu 12.04

•

スワップ有り(AWSのmicroだと厳しい)

•

さくらクラウド

13年11月2日土曜日
chef-server構築
http://www.opscode.com/chef/install/

URLコピー

13年11月2日土曜日
chef-server構築
•

/etc/hostsの127.0.0.1の所に、
自サーバーのホスト名を入れておく。

•

DNSにサーバーのIPとドメインも設定しておく
$ curl -O コピペしたdebファイルのURL
$ dpkg -i chef-server_11.0.8-1.ubuntu.
12.04_amd64.deb

13年11月2日土曜日
chef-server構築
DNSに設定したURLを以下の設定ファイルに入れておく
$ vi /etc/chef-server/chef-server.rb
nginx['server_name'] = "chef-demo.ogatomo.com"
nginx['url'] = "https://chef-demo.ogatomo.com"
$ chef-server-ctl reconfigure

13年11月2日土曜日
chef-server構築
/etc/chef-server/chef-validator.pem

•

上記ファイルをサーバーからダウンロード
(秘密 ファイルなので扱い注意!!)
chef-serverにClientを登録する場合などに必要

•

13年11月2日土曜日
knifeの構築
knife

13年11月2日土曜日
knifeの構築
https://chef-serverのURL

Adminにチェック

クリックして管理Client作成
13年11月2日土曜日
knifeの構築
秘密 の文字列を
全部コピー

13年11月2日土曜日
knifeの構築
以下の階層でディレクトリとファイル作成
(場所はどこでも良い)
.chef
├── knife.pem … knifeユーザーの秘密 をコピー
├── knife.rb … 空のファイルで良い
└── validation.pem … chef-serverからDLした
            chef-validator.pem

13年11月2日土曜日
knifeの構築

$ gem install chef

13年11月2日土曜日
knifeの構築
.chefと同じ階層までcdで移動後、
初期設定用コマンド実行
$ cd /path/to/.chef/../
$ knife configure
設定内容を色々聞かれます。
Overwrite /path/to/.chef/knife.rb? (Y/N) Y
Please enter the chef server URL: [http://MacMini.local:4000] https://chef-serverのURL
Please enter an existing username or clientname for the API: [togawa] knife
Please enter the validation client name: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem] /path/to/.chef/
validation.pem
Please enter the path to a chef repository (or leave blank):

13年11月2日土曜日
knifeの構築
動作確認の為、登録済みClient一覧取得
$ knife client list
実行結果:
chef-validator
chef-webui
knife

13年11月2日土曜日
chef-client構築

chef-client
13年11月2日土曜日
chef-client構築
# apt-get install ruby1.9.1 ruby1.9.1-dev
build-essential
# gem install chef --no-ri ̶no-rdoc
# mkdir /etc/chef

13年11月2日土曜日
chef-client構築
以下の階層でディレクトリとファイル作成
/etc/chef
├── client.rb … chef-client用設定ファイル
└── validation.pem … chef-serverからDLした
            chef-validator.pem

13年11月2日土曜日
chef-client構築
/etc/chef/client.rb の内容
chef_server_url "https://chef-serverのURL"
node_name "Clientの名称"

13年11月2日土曜日
chef-clientの構築
$ knife client list
実行結果:
chef-validator
chef-webui
knife
Clientの名称

13年11月2日土曜日
chef-clientの構築
$ knife node list
実行結果:
Clientの名称

13年11月2日土曜日
chef-clientの構築
$ knife node edit Clientの名称 -e vi
実行結果(JSON):
{
"name": "chef-client01",
"chef_environment": "_default",
"normal": {
"tags": [
]
},
"run_list": [
],
"default": {
},
"override": {
},
………
……
…
13年11月2日土曜日

chef-clientが収集した
環境の情報
(IPアドレスや、OSの種類など)
chef-client構築
Clientをchef-serverに登録
# chef-client
/etc/chef
├── client.rb
├── client.pem … 秘密
└── validation.pem

13年11月2日土曜日

ファイルが生成
Chefの構成完了!
knife

chef-server

chef-client
13年11月2日土曜日
Cookbook
13年11月2日土曜日
Cookbookについて
サーバーの設定に必要な
スクリプト・ファイルテンプレート類

13年11月2日土曜日
Cookbookについて
サーバーの設定に必要な
スクリプト・ファイルテンプレート類

Rubyの設定スクリプト

13年11月2日土曜日
Cookbookについて
サーバーの設定に必要な
スクリプト・ファイルテンプレート類

Rubyの設定スクリプト

Recipeに渡すパラメータ

13年11月2日土曜日
Cookbookについて
サーバーの設定に必要な
スクリプト・ファイルテンプレート類

Rubyの設定スクリプト

Recipeに渡すパラメータ
Providersに渡す
パラメータの定義

13年11月2日土曜日
Cookbookについて
サーバーの設定に必要な
スクリプト・ファイルテンプレート類

Rubyの設定スクリプト

Recipeに渡すパラメータ
Providersに渡す
パラメータの定義
設定ファイルテンプレート
ファイルなど。

13年11月2日土曜日
Cookbookについて
ディレクトリ構成
my_cookbook
├── CHANGELOG.md
├── README.md
├── attributes
├── files
├── metadata.rb
├── providers
├── resources
├── recipes
└── templates

13年11月2日土曜日

Rubyの設定スクリプト

Recipeに渡すパラメータ
Providersに渡す
パラメータの定義
設定ファイルテンプレート
ファイルなど。
Cookbook(apache2)
インストール&設定するCookbook

13年11月2日土曜日
Cookbook(mysql)
インストール&設定するCookbook

13年11月2日土曜日
Cookbook(htpasswd)
Recipeに設定内容を書きやすくする為のCookbook

13年11月2日土曜日
Cookbook(htpasswd)
Basic認証用パスワードファイルを簡単に定義できる
htpasswd "/etc/nginx/htpassword" do
user "foo"
password "bar"
end

13年11月2日土曜日
Cookbook(htpasswd)
Basic認証用パスワードファイルを簡単に定義できる
htpasswd "/etc/nginx/htpassword" do
user "foo"
password "bar"
end
⇡はProvidersに定義されてます

13年11月2日土曜日
Cookbook(sudo)
Recipeに設定内容を書きやすくする為のCookbook

13年11月2日土曜日
Cookbook(sudo)
sudoの設定が簡単に!
sudo 'tomcat' do
user
"%tomcat"
runas
'app_user'
commands ['/etc/init.d/tomcat restart']
end

13年11月2日土曜日
Cookbook(sudo)
sudoの設定が簡単に!
sudo 'tomcat' do
user
"%tomcat"
runas
'app_user'
commands ['/etc/init.d/tomcat restart']
end

※設定ミスると/etc/sudoersから大事な設定が消えて、
永遠にrootになれなくなるので気をつけましょう。
13年11月2日土曜日
Cookbook(sudo)
sudoの設定が簡単に!
sudo 'tomcat' do
user
"%tomcat"
runas
'app_user'
commands ['/etc/init.d/tomcat restart']
end

※設定ミスると/etc/sudoersから大事な設定が消えて、
永遠にrootになれなくなるので気をつけましょう。
13年11月2日土曜日
その他の標準Provider
ディレクトリを作ります
directory "/tmp/folder" do
owner "root"
group "root"
mode 0755
action :create
end

13年11月2日土曜日
その他の標準Provider
ユーザーを作ります
user "admin" do
supports :manage_home => true
comment "Admin User"
uid 1234
gid "users"
home "/home/admin"
shell "/bin/bash"
password "$1$JJsvHslV$szsCjVEroftprNn4JHtDi."
end

13年11月2日土曜日
chef-client
13年11月2日土曜日
chef-clientについて
chef-server

必要なCookbookを
取得して実行

chef-client
13年11月2日土曜日
chef-clientについて
$ knife node edit Clientの名称 -e vi
実行結果(JSON):
{
"name": "chef-client01",
"chef_environment": "_default",
"normal": {
"tags": [
]
},
"run_list": [
],
"default": {
},
"override": {
},
………
……
…

Clientは自分のnodeのrun_listを
もとにcookbookを実行

13年11月2日土曜日
cookbookの準備
.chefがある場所に、
cookbook置き場を作り、cookbookをアップロード
$ mkdir cookbooks
$ cd cookbooks
$ git clone https://github.com/opscodecookbooks/apache2.git
$ knife cookbook upload apache2 -o ./

13年11月2日土曜日
run-listの編集
$ knife node edit Clientの名称 -e vi
実行結果(JSON):
{
"name": "chef-client01",
"chef_environment": "_default",
"normal": {
"tags": [
]
},
"run_list": [
recipe[apache2] ,
recipe[apache2::mod_rewrite]
],
"default": {
},
"override": {
},
………
……
13年11月2日土曜日

run_listを編集し、
apache2をインストールして
mod_rewriteを有効にする
run-listの編集
$ knife node edit Clientの名称 -e vi
実行結果(JSON):
{
"name": "chef-client01",
"chef_environment": "_default",
"normal": {
"tags": [
]
},
"run_list": [
recipe[apache2] ,
recipe[apache2::mod_rewrite]
],
"default": {
},
"override": {
},
………
……
13年11月2日土曜日

recipe[cookbook名]
or
recipe[cookbook名::recipe名]
run-listの編集
$ knife node edit Clientの名称 -e vi
実行結果(JSON):
{
"name": "chef-client01",
"chef_environment": "_default",
"normal": {
"tags": [
]
},
"run_list": [
recipe[apache2] ,
recipe[apache2::mod_rewrite]
],
"default": {
},
"override": {
},
………
……
13年11月2日土曜日

recipe[cookbook名]
… recipes/default.rbを実行
recipe[cookbook名::recipe名]
… recipes/mod_rewrite.rb
を実行
chef-client実行
Clientにsshログインし、
# chef-client
もしくはPCからknife sshコマンド実行
# knife ssh name:nodeの名称" -x Linuxユ
ーザ名 "sudo chef-client" -i SSH ファイル
-a ipaddress

13年11月2日土曜日
chef-client実行
Clientにsshログインし、
# chef-client
もしくはPCからknife sshコマンド実行
# knife ssh name:nodeの名称" -x Linuxユ
ーザ名 "sudo chef-client" -i SSH ファイル
-a ipaddress

node内のipaddressという値を使って接続
13年11月2日土曜日
DEMO
13年11月2日土曜日
nodeの用途
13年11月2日土曜日
nodeの用途
•

run_listに実行するcookbookとレシピを定義

•

cookbookに渡すパラメータを変更

•

cookbookの処理結果を保存

13年11月2日土曜日
パラメータを変更
↓こんな場合に行います
•

attributes/default.rbの設定値じゃ満足できない

•

そもそもデフォルト値だと動かない

13年11月2日土曜日
apache2の例
{
"name": "chef-client01",
"chef_environment": "_default",
"normal": {
"tags": [
],
"apache": {
"prefork": {
"startservers" : "10",
"minspareservers":"10",
"maxspareservers":"10",
"serverlimit":"512",
"maxclients":"512"
}
}
},
"run_list": [
recipe[apache2] ,
recipe[apache2::mod_rewrite]
],
……
……
13年11月2日土曜日

confに設定したい値を入れる
cookbook内では
node[:apache][:prefork][:startservers]
等の変数が使われてるので
その値をnodeで上書きする
処理結果の保存
•

cookbookの実行が途中で失敗しても、再実行が行
えるようにする。(冪等性ていうらしい)

•

自動作成したユーザーのパスワードなどを保存す
る。

13年11月2日土曜日
mysqlの例
{
"name": "chef-client01",
"chef_environment": "_default",
"normal": {
"tags": [
],
"mysql": {
"server_debian_password": ********************* ,
"server_root_password": "*********************",
"server_repl_password": "*********************"
}
},
"run_list": [
recipe[apache2] ,
recipe[apache2::mod_rewrite]
],
……
……

13年11月2日土曜日

結構な機密情報が
nodeには保存されます。。
nodeのバックアップ方法
knifeを使ってnodeをバックアップ
# knife node show node名称 ̶format
json > backup.json

nodeのリストア
# knife node from file backup.json

13年11月2日土曜日
Tips
13年11月2日土曜日
run_listが肥大化した
"run_list": [
"recipe[php]",
"recipe[apache2]",
"recipe[apache2::mod_php5]",
"recipe[apache2::mod_ssl]",
"recipe[apache2::mod_rewrite]",
"recipe[php::module_gd]",
"recipe[php::module_mysql]",
"recipe[php::module_pgsql]",
"recipe[php::module_mbstring]",
"recipe[php::module_xml]",
"recipe[php::module_mcrypt]"
]

13年11月2日土曜日
run_listが肥大化した
"run_list": [
"recipe[php]",
"recipe[apache2]",
"recipe[apache2::mod_php5]",
"recipe[apache2::mod_ssl]",
"recipe[apache2::mod_rewrite]",
"recipe[php::module_gd]",
"recipe[php::module_mysql]",
"recipe[php::module_pgsql]",
"recipe[php::module_mbstring]",
"recipe[php::module_xml]",
"recipe[php::module_mcrypt]"
]

13年11月2日土曜日

同じrun_listは
roleを定義しよう
roleを定義
# knife role create wordpress -e vim
{
"name": "wordpress",
"description": "",
"json_class": "Chef::Role",

roleのrun_listに設定
"recipe[php]",

"default_attributes": {

"recipe[apache2]",

},

"recipe[apache2::mod_php5]",

"override_attributes": {

"recipe[apache2::mod_ssl]",

},

"recipe[apache2::mod_rewrite]",

"chef_type": "role",

"recipe[php::module_gd]",

"run_list": [

"recipe[php::module_mysql]",

],

"recipe[php::module_pgsql]",

"env_run_lists": {
}
}

13年11月2日土曜日

"recipe[php::module_mbstring]",
"recipe[php::module_xml]",
"recipe[php::module_mcrypt]"
role設定後
nodeのrun_listがスッキリします
"run_list": [
"role[wordpress]"
]

13年11月2日土曜日
御清聴
ありがとうございました

13年11月2日土曜日

More Related Content

PDF
Puppet on AWS
PDF
Chef study
KEY
Itcamp長崎2012 capistrano
PPTX
Sakura no-yuube-20140327
PDF
Sqale の Puppet と Chef (と テスト)
PDF
GUI何処行ったんDocker
PDF
Deep Dive into Modules
PPTX
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更
Puppet on AWS
Chef study
Itcamp長崎2012 capistrano
Sakura no-yuube-20140327
Sqale の Puppet と Chef (と テスト)
GUI何処行ったんDocker
Deep Dive into Modules
Awsで構築したのだよ 04 ec2インスタンス起動時にホスト名を変更

What's hot (6)

PDF
Chef solo 入門の入門
PDF
As rock deskminia300
PDF
Mina 20130417
PDF
ChefとPuppetの比較
PDF
JSで対戦できるゲーム作った
PDF
3分でわかる(気になれる) AWS OpsWorks
Chef solo 入門の入門
As rock deskminia300
Mina 20130417
ChefとPuppetの比較
JSで対戦できるゲーム作った
3分でわかる(気になれる) AWS OpsWorks
Ad

Viewers also liked (15)

PDF
人間に与えられた時間は無限ではない
PPTX
スタートアップ勉強会
PDF
Renovate Your Retrospective - Adam England - KCDC 2015
PDF
NS Prefix - そこから見渡す Swift 3 の景色 #startup_mobile
PDF
Globo.com - migração do player flash para html5
PDF
What is Enterprise Agile
PPTX
Alexa Skills Kitを使って自作のSkillを作る
PDF
Immutable Deployments with AWS CloudFormation and AWS Lambda
PDF
マルチパブリッシング プラットフォームとしてのWordPress
PDF
Sakura IoT Platform
PDF
INSPIRE FUTURE GENERATIONS
PPT
Webディレクター用ポートフォリオテンプレート
PDF
minne の API 改善
PDF
AWS Black Belt Online Seminar 2016 AWS CloudFormation
PPTX
使った気になれるFirebase
人間に与えられた時間は無限ではない
スタートアップ勉強会
Renovate Your Retrospective - Adam England - KCDC 2015
NS Prefix - そこから見渡す Swift 3 の景色 #startup_mobile
Globo.com - migração do player flash para html5
What is Enterprise Agile
Alexa Skills Kitを使って自作のSkillを作る
Immutable Deployments with AWS CloudFormation and AWS Lambda
マルチパブリッシング プラットフォームとしてのWordPress
Sakura IoT Platform
INSPIRE FUTURE GENERATIONS
Webディレクター用ポートフォリオテンプレート
minne の API 改善
AWS Black Belt Online Seminar 2016 AWS CloudFormation
使った気になれるFirebase
Ad

Similar to 広島Ruby勉強会#35 - Chef入門 (20)

PDF
Openstack chef-repo
PDF
Djangoとweb2pyをapacheに組込む
PPTX
実は怖くないDevOps
PDF
スマートWordPress on JAWS-UG Tokyo#17
PDF
Sacss sp5
PDF
httpd.conf line 1 to 7, 24
PDF
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
PDF
サーバ構築実践入門
PDF
S3 を単純ストレージとして 利用する手段の比較
PDF
そろそろRStudioの話
PDF
ブログる
PDF
Task Spooler を試した
PDF
第1回 一撃サーバー構築シェルスクリプト勉強会
PDF
NVIDIA GPUで作るHeadless X11 Linux
PDF
Casual convergence
PDF
Nseg20120825
PDF
Mtddc kyusyu-lightningtalks
PDF
20140612_Docker上でCloudStackを動かしてみる!!
PDF
20101106 ramaze発表
PPTX
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
Openstack chef-repo
Djangoとweb2pyをapacheに組込む
実は怖くないDevOps
スマートWordPress on JAWS-UG Tokyo#17
Sacss sp5
httpd.conf line 1 to 7, 24
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
サーバ構築実践入門
S3 を単純ストレージとして 利用する手段の比較
そろそろRStudioの話
ブログる
Task Spooler を試した
第1回 一撃サーバー構築シェルスクリプト勉強会
NVIDIA GPUで作るHeadless X11 Linux
Casual convergence
Nseg20120825
Mtddc kyusyu-lightningtalks
20140612_Docker上でCloudStackを動かしてみる!!
20101106 ramaze発表
WebAppDev勉強会 #2 at cafe? IKAGAWA DO

Recently uploaded (12)

PDF
東京商工会議所荒川支部で中小企業講演「今日から使える!省力化・効率化に向けた生成AI活用入門」
PDF
[アジャイルジャパン2024]組織をアジャイルにしていくのに プロジェクトファシリテーションが必要ないわけがない
PDF
2508slide_townobuse_nagano_chohoobuse.pdf
PDF
202508株式会社なぞるマーケティング組織開発・学習支援サービス_概要資料
PDF
RailsエンジニアのためのActive Recordの基礎から学ぶ実践的DB連携
PPTX
Setting KPI of Estimation Department Division
PDF
【VISIONARY JAPAN】エンジニアチーム 採用ピッチ資料(ver2.1)
PDF
AIゲートウェイ、グローバルトップ12企業のランキングと市場シェア2025.pdf
PDF
[スクフェス大阪2024]組織は人でできている~組織をマルチレイヤーアジャイルでコネクトしよう~
PDF
GN Business Consulting会社概要 (FREE CASH MAKER)_saleshub.pdf
PDF
神奈川県の伊勢原市商工会で中小企業講演「人手不足を解消するためのAI活用セミナー」
PPTX
だれでもサクッと使える!採用ピッチ資料テンプレート(解説付き)_20230529_ver1.pptx
東京商工会議所荒川支部で中小企業講演「今日から使える!省力化・効率化に向けた生成AI活用入門」
[アジャイルジャパン2024]組織をアジャイルにしていくのに プロジェクトファシリテーションが必要ないわけがない
2508slide_townobuse_nagano_chohoobuse.pdf
202508株式会社なぞるマーケティング組織開発・学習支援サービス_概要資料
RailsエンジニアのためのActive Recordの基礎から学ぶ実践的DB連携
Setting KPI of Estimation Department Division
【VISIONARY JAPAN】エンジニアチーム 採用ピッチ資料(ver2.1)
AIゲートウェイ、グローバルトップ12企業のランキングと市場シェア2025.pdf
[スクフェス大阪2024]組織は人でできている~組織をマルチレイヤーアジャイルでコネクトしよう~
GN Business Consulting会社概要 (FREE CASH MAKER)_saleshub.pdf
神奈川県の伊勢原市商工会で中小企業講演「人手不足を解消するためのAI活用セミナー」
だれでもサクッと使える!採用ピッチ資料テンプレート(解説付き)_20230529_ver1.pptx

広島Ruby勉強会#35 - Chef入門