無意義なつぶやき

渋谷ではたらくエンジニアブログ。

CakePHP3の開発環境をChefで構築する

CakePHP3がリリースされてからだいぶ経ちましたが、
ついに私もCakePHP3を触り始めたので、
開発環境を構築してみました。
Vagrant+Chefで構築してみたのでご参考ください。

CakePHP2との大きな違いはやはり、Composerを利用するようになったということでしょうか。

公式によると必要な環境は下記の通り。
http://book.cakephp.org/3.0/ja/installation.html

・HTTPサーバー。例: Apachemod_rewriteが推奨されますが、必須ではありません。
PHP 5.4.16以上。
PHP mbstring 拡張
PHP intl 拡張

PHP5.4.16以上という点も注意が必要で、
yumの標準が5.3となっているので何も考えずに、
yum install php とかやると動かなくてしばらく悩むことになります。

・Chefを使わずvagrantで直接入れる場合

1.remiレポジトリの使用

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo yum install php --enablerepo=remi
sudo yum install php-mbstring --enablerepo=remi
sudo yum install php-mcrypt --enablerepo=remi
sudo yum install php-pdo --enablerepo=remi
sudo yum install php-intl --enablerepo=remi

2.composerでcake3ディレクトリの作成

sudo curl -s https://getcomposer.org/installer | sudo php
php composer.phar create-project --prefer-dist -s dev cakephp/app

3.apacheのdocumentrootを変更
インストールしたcake3ディレクトリのwebrootを指定する。

・Chefレシピの記述

chefディレクトリの構成はsite-cookbooks以下にapache,bash,remi,phpというcookbookを作成しています。

 --site-cookbooks/
    --bash/
       --recipe/
          --default.rb
    --apache
       --recipe/
          --default.rb
       --template/
          --httpd.conf.erb
    --php
       --recipe/
          --default.rb
    --remi
       --recipe/
          --default.rb
1.Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "centos"
  config.vm.network :private_network, ip: "192.168.33.10"
  config.vm.synced_folder "app", "/home/vagrant/app", owner: "root", group: "root"
end
2.chef recipe

apacheのインストール
site-cookbooks/apache/recipe/default.rb

package "httpd" do
    action :install
end

service "httpd" do
    action [:enable, :start]
end

template "httpd.conf" do
    path "/etc/httpd/conf/httpd.conf"
    owner "root"
    group "root"
    mode 0644
    notifies :reload, 'service[httpd]'
end

site-cookbooks/apache/template/httpd.conf.erb

 DocumentRoot "/home/vagrant/app/webroot"

site-cookbooks/bash/recipe/default.rb

bash "chmod_vagrant" do
    code "chmod -R 755 home/vagrant"
end

bash "chmod_tmp" do
    code "chmod -R 777 home/vagrant/app/tmp"
end

bash "chmod_cache" do
    code "chmod -R 777 home/vagrant/app/tmp/cache"
end

remiレポジトリの追加
site-cookbooks/remi/recipe/default.rb

bash 'add_epel' do
  user 'root'
  code <<-EOC
    rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
    sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/epel.repo
  EOC
  creates "/etc/yum.repos.d/epel.repo"
end

bash 'add_rpmforge' do
  user 'root'
  code <<-EOC
    rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
    sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/rpmforge.repo
  EOC
  creates "/etc/yum.repos.d/rpmforge.repo"
end

bash 'add_remi' do
  user 'root'
  code <<-EOC
    rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
    sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/remi.repo
  EOC
  creates "/etc/yum.repos.d/remi.repo"
end

phpと必要なextensionのインストール
site-cookbooks/php/recipe/default.rb

%w{php php-mcrypt php-mbstring php-intl php-pdo php-mysql}.each do |pkg|
    package pkg do
        action :install
        options "--enablerepo=remi"
    end
end
3.[node名].jsonにcookbookを追加する
{
  "run_list": [
      "recipe[remi]",
      "recipe[apache]",
      "recipe[php]",
      "recipe[bash]"

  ],
  "automatic": {
    "ipaddress": [ここはnode名]
  }
}

あとはknife solo cook [node名]でOKなはずです。
それではよいcake3ライフを!