Edited at

「Chef + VagrantによるPHP5.3 + MySQL + nginxの開発環境」をもとにPHP5.4環境を。

More than 5 years have passed since last update.

「Chef + VagrantによるPHP5.3 + MySQL + nginxの開発環境」

http://www.engineyard.co.jp/blog/2013/chef-and-vagrant-gives-you-next-dev/

を元に、PHP5.4環境が欲しかったのでChefのレシピをちょいいじってみました。

元の

https://github.com/yandod/php5-nginx-vagrant-sample/blob/master/cookbooks/candycane_cookbook/recipes/default.rb

の頭に下記を追加

execute "1st apt-get update" do

command "apt-get update"
end

package "python-software-properties" do
action [:install, :upgrade]
end

execute "add ppa:ondrej/php5-oldstable" do
command "add-apt-repository ppa:ondrej/php5-oldstable"
end

add-apt-repository ppa:ondrej/php5-oldstable としてるのは、ppa:ondrej/php5だと、PHP5.5になっちゃうから。(1ヶ月ぐらい前はまだPHP5.4だったんですが)

どのバージョンのPHPを入れるとかをChefで指定するうまい方法って何かあるんでしょうかね?ながいこと使うとこのあたり問題になるケースもありそうな気がしてきてます…

最終的な default.rb は下記になります。

execute "1st apt-get update" do

command "apt-get update"
end

package "python-software-properties" do
action [:install, :upgrade]
end

execute "add ppa:ondrej/php5-oldstable" do
command "add-apt-repository ppa:ondrej/php5-oldstable"
end

execute "apt-get" do
command "apt-get update"
end

packages = %w{git subversion nginx php5 php5-mysql php5-curl php5-cli php5-fpm php-pear mysql-server curl imagemagick php5-imagick}

packages.each do |pkg|
package pkg do
action [:install, :upgrade]
end
end

execute "phpunit-install" do
command "pear config-set auto_discover 1; pear install pear.phpunit.de/PHPUnit"
not_if { ::File.exists?("/usr/bin/phpunit")}
end

execute "composer-install" do
command "curl -sS https://getcomposer.org/installer | php ;mv composer.phar /usr/local/bin/composer"
not_if { ::File.exists?("/usr/local/bin/composer")}
end

template "/etc/nginx/conf.d/php-fpm.conf" do
mode 0644
source "php-fpm.conf.erb"
end

service 'apache2' do
action :stop
end

%w{mysql php5-fpm nginx}.each do |service_name|
service service_name do
action [:start, :restart]
end
end

かなり悪戦苦闘したけど何とか欲しいモノが手に入ってよかった。

1ヶ月前にチャレンジしたときは、全然ダメダメだったんだが、少し理解がすすんだらしい。


2013/08/23追記

php-fpm 関係のデフォルトがポート指定でなくソケットになったようで、そのままだと502 bad gateway となってしまったので、php-fpm.conf.erbもfastcgi_passだけ変更

        fastcgi_pass unix:/var/run/php5-fpm.sock;

これで動いた。