LoginSignup
19
21

More than 5 years have passed since last update.

Vagrant + ChefでCentOS7 + PHP7の環境を構築する

Last updated at Posted at 2016-06-22

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で実行可能にする。

下記参照
sudo bundle execを実行可能にする

Chefのインストール

Chefをインストールするディレクトリを作成

$ mkdir chef-repo
$ cd chef-repo/

Gemfileを作成して

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に記述する。

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

設定ファイルを作成

各種パスを明記したファイルを作成。

chef.rb
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みたいなもの。

Berksfile
source "https://supermarket.getchef.com"
cookbook 'sudo'

下記コマンドでインストール

$ berks vendor vendor/cookbooks

以上。

[参考]
Chefを読んで実行するための全知識
これからはじめるChefのチュートリアル 基本編
knife create cookbook する時にちょっとした便利なオプション
Chef Solo ではなく Chef Client Local Mode を使おう

19
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
21