Vagrant + ChefでCentOS7 + PHP7の環境を構築する
Vagrantの設定は下記を参照。
Vagrantのインストール、設定手順
Version
- CentOS7.1
- PHP7
- ruby 2.3.1
- Chef: 12.11.18
CentOS7のbox追加
$ vagrant box add centos71 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
Rubyのインストール
Chefを動かすにはRubyが必要です。
インストールは下記のrbenv, rubyのインストール
の項を参照。
Ruby on Rails環境構築メモ
rbenv-sudoのインストール
bundleコマンドをsudoで実行可能にする。
Chefのインストール
Chefをインストールするディレクトリを作成
$ mkdir chef-repo
$ cd chef-repo/
Gemfileを作成して
source "https://rubygems.org"
gem 'chef'
gem 'knife-solo'
bundle installする。
$ bundle install --path vendor/bundle
recipeの雛形を作成。
$ bundle exec knife solo init .
cookbookの作成
下記コマンドで、自作のcookbookのひな型を、sample_cookbookという名でsite-cookbooksの下に生成。
$ bundle exec knife cookbook create sample_cookbook -o site-cookbooks
ちなみに、
--copyright "Foo company" --email "Bar <bar@gmail.com>"
というオプションで、metadata.rbのmaintainerやレシピ(default.rb)のCopyrightを置換することも可能。
recipeの作成
下記は、CentOS7に、git、php7、composerをインストールするレシピ。
site-cookbooks/sample_cookbook/recipes/default.rb
に記述する。
# # # # #
# install git
# # # # #
package 'git' do
action :install
end
# # # # #
# php
# # # # #
# epel
package 'epel-release.noarch' do
action :install
end
# remi
remote_file "#{Chef::Config[:file_cache_path]}/remi-release-7.rpm" do
source "http://rpms.famillecollet.com/enterprise/remi-release-7.rpm"
not_if "rpm -qa | grep -q '^remi-release'"
action :create
notifies :install, "rpm_package[remi-release]", :immediately
end
rpm_package "remi-release" do
source "#{Chef::Config[:file_cache_path]}/remi-release-7.rpm"
action :nothing
end
# php
package 'php' do
flush_cache [:before]
action :install
options "--enablerepo=remi --enablerepo=remi-php70"
end
%w(php-openssl php-common php-mbstring php-xml).each do |pkg|
package pkg do
action :install
options "--enablerepo=remi --enablerepo=remi-php70"
end
end
# # # # #
# install composer
# # # # #
bash 'install_composer' do
not_if { File.exists?("/usr/local/bin/composer") }
user 'root'
cwd '/tmp'
code <<-EOH
curl -sS https://getcomposer.org/installer | php -- --install-dir=/tmp
mv /tmp/composer.phar /usr/local/bin/composer
EOH
end
# # # # #
# others
# # # # #
packages = %w(unzip fontconfig-devel)
packages.each do |pkg|
package pkg do
action :install
end
end
設定ファイルを作成
各種パスを明記したファイルを作成。
file_cache_path "/ディレクトリパス/chef-repo"
cookbook_path %w(/ディレクトリパス/chef-repo/site-cookbooks)
role_path "/ディレクトリパス/chef-repo/roles"
jsonファイルを作成
$ vi chef-repo/nodes/chef.json
{
"run_list": [
"recipe[sample_cookbook]"
]
}
Chef実行
chef-clientのローカルモードで実行する。
$ rbenv sudo bundle exec chef-client --local-mode -j nodes/chef.json -c chef.rb
Berkshelfを使う場合
BerkshelfはChefのcookbook管理ツールで、サードパーティ製のCookbookをダウンロードして利用することができます。gemとbundlerみたいなものです。
Berksfileを作成。bundlerでいうGemfileみたいなもの。
source "https://supermarket.getchef.com"
cookbook 'sudo'
下記コマンドでインストール
$ berks vendor vendor/cookbooks
以上。
[参考]
Chefを読んで実行するための全知識
これからはじめるChefのチュートリアル 基本編
knife create cookbook する時にちょっとした便利なオプション
Chef Solo ではなく Chef Client Local Mode を使おう