導入編ではChefを使う準備を実施した。
お試し編ではEpelのレポジトリを指定し、Nginxを適用するようなレシピを記載し、実際にリモートサーバへデプロイを実施する。
その前に
Chefを使うときのおおまかな流れの備忘録
- [Cookbook作成]-[Berksfile記載(必要に応じて)]-[nodeオブジェクト作成]-[レシピ作成]-[Attribute作成]-[template作成]-[デプロイ準備]-[デプロイ]
- 順番の前後とかEnvironment設定などもあるけど、基本のフローはこんな感じ。
前提
- Chefの作業ディレクトリは/var/chef-repoとする
- リモートサーバ名はremote-hogehogeとする(名前解決はできているものとする)
- Chef実行ユーザはusr-fugafugaとする
- remote-hogehoge上には予めusr-fugafugaを作成し、sudores設定(sudoパスワード無し実行許可)を実施しておく
Nginx用にクックブックなどを準備
-
作業ディレクトリ移動
$ pwd /var/chef-repo
-
Berksfileを作成する
NginxはEPELリポジトリからインストールを実施するため、Nginxの依存関係としてEPELを指定する
$ cat Berksfile source "https://supermarket.getchef.com" cookbook "yum-epel" cookbook "nginx" , path: "./site-cookbooks/nginx"
-
berks vendorを実行し、各クックブックなどを作成する
$ berks vendor ./cookbooks Fetching 'nginx' from source at site-cookbooks/nginx Using nginx (0.1.0) from source at site-cookbooks/nginx Using yum (3.4.1) Using yum-epel (0.5.2) Vendoring nginx (0.1.0) to cookbooks/nginx Vendoring yum (3.4.1) to cookbooks/yum Vendoring yum-epel (0.5.2) to cookbooks/yum-epel$ ls berks-cookbooks Berksfile Berksfile.lock site-cookbooks
-
nginxのRecipeを作成
$ cat site-cookbooks/nginx/recipes/default.rb include_recipe "yum-epel" package "nginx" do action :install end service "nginx" do action [ :enable, :start ] supports :status => true, :restart => true, :reload => true end
-
nodeオブジェクトを作成
$ mkdir nodes $ cat nodes/AP-Test.json { "run_list": [ "recipe[yum-epel]", "recipe[nginx]" ] }
-
.chef/knife.rb編集
knife-soloが利用するテンポラリディレクトリのパスを設定
$ cat .chef/knife.rb cookbook_path ["cookbooks", "site-cookbooks"] node_path "nodes" role_path "roles" environment_path "environments" data_bag_path "data_bags" #encrypted_data_bag_secret "data_bag_key" knife[:berkshelf_path] = "cookbooks"
リモートサーバへデプロイ実施
-
リモートサーバへChef-clientインストール
$ knife solo bootstrap -i ~/.ssh/usr-fugafuga.pem usr-fugafuga@remote-hogehoge
-
デプロイ実施
$ knife solo cook -i ~/.ssh/usr-fugafuga.pem usr-fugafuga@remote-hogehoge Starting Chef Client, version 11.16.4 Compiling Cookbooks... Converging 3 resources Recipe: yum-epel::default * yum_repository[epel] action create * template[/etc/yum.repos.d/epel.repo] action create - create new file /etc/yum.repos.d/epel.repo - update content in file /etc/yum.repos.d/epel.repo from none to 39e29f --- /etc/yum.repos.d/epel.repo 2014-11-25 07:06:47.378441508 +0000 +++ /tmp/chef-rendered-template20141125-3626-rf9pee 2014-11-25 07:06:47.383441510 +0000 @@ -1 +1,12 @@ +# This file was generated by Chef +# Do NOT modify this file by hand. + +[epel] +name=Extra Packages for Enterprise Linux 6 - $basearch +enabled=1 +failovermethod=priority +gpgcheck=1 +gpgkey=https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 +mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch +sslverify=true - change mode from '' to '0644' * execute[yum-makecache-epel] action run - execute yum -q makecache --disablerepo=* --enablerepo=epel * ruby_block[yum-cache-reload-epel] action create - execute the ruby block yum-cache-reload-epel * execute[yum-makecache-epel] action nothing (skipped due to action :nothing) * ruby_block[yum-cache-reload-epel] action nothing (skipped due to action :nothing) Recipe: nginx::default * package[nginx] action install - install version 1.0.15-10.el6 of package nginx * service[nginx] action enable - enable service service[nginx] * service[nginx] action start - start service service[nginx] Running handlers: Running handlers complete Chef Client finished, 7/7 resources updated in 14.866675586 seconds