View
1.781
Download
7
Category
Preview:
DESCRIPTION
広島Ruby勉強会#35でChefのプレゼンしたときの資料
Citation preview
入門13年11月2日土曜日
自己紹介
• Twitter: @ogatomo• 好きなもの:Emacs, Ruby, AWS, Railsなど
小川 智和(おがわ ともかず)
13年11月2日土曜日
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-client13年11月2日土曜日
Chefの構成chef-server
chef-client
knife
13年11月2日土曜日
Chefの役割
apachemysqlrubynginx
等のインストール& 設定
Railsアプリのデプロイ
サーバー自体(CPU,HDD,メモリ)やネットワークの準備
13年11月2日土曜日
Chefの役割
AWSその他Cloud
apachemysqlrubynginx
等のインストール& 設定
Railsアプリのデプロイ
サーバー自体(CPU,HDD,メモリ)やネットワークの準備
13年11月2日土曜日
Chefの役割
AWSその他Cloud
Chefapachemysqlrubynginx
等のインストール& 設定
Railsアプリのデプロイ
サーバー自体(CPU,HDD,メモリ)やネットワークの準備
13年11月2日土曜日
Chefの役割
AWSその他Cloud
Chefapachemysqlrubynginx
等のインストール& 設定
CapistranoRailsアプリのデプロイ
サーバー自体(CPU,HDD,メモリ)やネットワークの準備
13年11月2日土曜日
Chefの役割
AWSその他Cloud
Chefapachemysqlrubynginx
等のインストール& 設定
CapistranoRailsアプリのデプロイ
サーバー自体(CPU,HDD,メモリ)やネットワークの準備
OS等の違いを吸収
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構築
$ 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 ⏎
DNSに設定したURLを以下の設定ファイルに入れておく
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の構築
$ knife client list ⏎
chef-validator chef-webui knife
動作確認の為、登録済みClient一覧取得
実行結果:
13年11月2日土曜日
chef-client構築
chef-client13年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構築
chef_server_url "https://chef-serverのURL"node_name "Clientの名称"
/etc/chef/client.rb の内容
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": { },………………
chef-clientが収集した環境の情報
(IPアドレスや、OSの種類など)
13年11月2日土曜日
chef-client構築# chef-client ⏎Clientをchef-serverに登録
/etc/chef├── client.rb├── client.pem … 秘密鍵ファイルが生成└── validation.pem
13年11月2日土曜日
Chefの構成完了!chef-server
chef-client
knife
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
Rubyの設定スクリプトRecipeに渡すパラメータProvidersに渡すパラメータの定義設定ファイルテンプレートファイルなど。
ディレクトリ構成
13年11月2日土曜日
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 :createend
ディレクトリを作ります
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
chef-client
必要なCookbookを取得して実行
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の準備
$ mkdir cookbooks ⏎$ cd cookbooks ⏎$ git clone https://github.com/opscode-cookbooks/apache2.git ⏎
$ knife cookbook upload apache2 -o ./ ⏎
.chefがある場所に、cookbook置き場を作り、cookbookをアップロード
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": { },……………
run_listを編集し、apache2をインストールしてmod_rewriteを有効にする
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": { },……………
recipe[cookbook名]orrecipe[cookbook名::recipe名]
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": { },……………
recipe[cookbook名] … recipes/default.rbを実行
recipe[cookbook名::recipe名] … recipes/mod_rewrite.rb を実行
13年11月2日土曜日
chef-client実行# chef-client ⏎ Clientにsshログインし、
もしくはPCからknife sshコマンド実行
# knife ssh “name:nodeの名称" -x Linuxユーザ名 "sudo chef-client" -i SSH鍵ファイル -a ipaddress
13年11月2日土曜日
chef-client実行# chef-client ⏎ Clientにsshログインし、
もしくは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]” ], …………
confに設定したい値を入れるcookbook内ではnode[:apache][:prefork][:startservers]等の変数が使われてるのでその値をnodeで上書きする
13年11月2日土曜日
処理結果の保存
• 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]” ], …………
結構な機密情報がnodeには保存されます。。
13年11月2日土曜日
nodeのバックアップ方法
# knife node show node名称 ̶format json > backup.json
# knife node from file backup.json
knifeを使ってnodeをバックアップ
nodeのリストア
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]" ]
同じrun_listはroleを定義しよう
13年11月2日土曜日
roleを定義# knife role create wordpress -e vim ⏎
{ "name": "wordpress", "description": "", "json_class": "Chef::Role", "default_attributes": { }, "override_attributes": { }, "chef_type": "role", "run_list": [], "env_run_lists": { }}
"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]"
roleのrun_listに設定
13年11月2日土曜日
role設定後
"run_list": [ "role[wordpress]" ]
nodeのrun_listがスッキリします
13年11月2日土曜日
御清聴ありがとうございました
13年11月2日土曜日
Recommended