Vagrantを使ってFuelPHPの開発用のCentOS 6.4を構築する

vagrant-fuelphpがUbuntuだったので、CentOSでのFuelPHP用の開発環境をVagrantで作成することにします。

(2013/11/18追記) この記事の内容よりもう少し改良したものを、GitHubに公開しました。詳しくは、vagrant-fuelphp-centos6を使ってFuelPHPの開発用のCentOS 6.4を30分で構築するを参照してください。

CentOS Boxファイルの取得

まず、http://www.vagrantbox.es/にあるCentOS 6.4(64bit)のboxファイルをダウンロードします。かなり時間がかかります。

$ vagrant box add centos6.4_64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box

仮想マシンの作成

FuelPHPのプロジェクトのトップディレクトリに移動して、CentOS 6.4(64bit)の仮想マシンを作成します。

$ cd path/to/fuelphp
$ mkdir vagrant
$ cd vagrant
$ vagrant init centos6.4_64

作成されたVagrantfileに以下を設定します。

  config.vm.box_url = "http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box"
  config.vm.network :forwarded_port, guest: 80, host: 8000
  config.vm.network :private_network, ip: "192.168.33.33"
  config.vm.synced_folder "../", "/mnt/fuelphp"

PHP 5.4をインストールするために、yumリポジトリを追加するレシピを取得します。

$ mkdir cookbooks
$ cd cookbooks/
$ git clone https://github.com/opscode-cookbooks/yum

Vagrantfileを編集し、iusリポジトリを追加するレシピを実行するように設定します。

  config.vm.provision :chef_solo do |chef|
     chef.cookbooks_path = "./cookbooks"
     chef.add_recipe "yum::ius"

  #   # You may also specify custom JSON attributes:
  #   chef.json = { :mysql_password => "foo" }
  end

仮想マシンの起動

仮想マシンを起動します。

$ vagrant up

仮想マシンにsshでログインします。

$ vagrant ssh

iusリポジトリが追加されていることを確認します。

[vagrant@localhost ~]$ ls -l /etc/yum.repos.d/
合計 44
-rw-r--r--. 1 root root 1926  2月 25 08:57 2013 CentOS-Base.repo
-rw-r--r--. 1 root root  638  2月 25 08:57 2013 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630  2月 25 08:57 2013 CentOS-Media.repo
-rw-r--r--. 1 root root 3664  2月 25 08:57 2013 CentOS-Vault.repo
-rw-r--r--  1 root root 1056 11月  5 03:52 2012 epel-testing.repo
-rw-r--r--  1 root root  278 11月 15 03:25 2013 epel.repo
-rw-r--r--  1 root root  957 11月  5 03:52 2012 epel.repo.rpmnew
-rw-r--r--  1 root root 1090  3月 25 19:08 2013 ius-archive.repo
-rw-r--r--  1 root root 1072  3月 25 19:08 2013 ius-dev.repo
-rw-r--r--  1 root root 1090  3月 25 19:08 2013 ius-testing.repo
-rw-r--r--  1 root root 1013  3月 25 19:08 2013 ius.repo

PHP 5.4のレシピ作成

PHP 5.4をインストールするためのレシピを作成します。この作業は、chefがインストールされている仮想マシンで行います。

$ cd /vagrant/
$ knife cookbook create php54 -o cookbooks

cookbooks/php54/recipes/default.rbに以下を記載します。

%w(php54 php54-mbstring php54-gd php54-mcrypt php54-mysqlnd php54-pear php54-pecl-xdebug).each do |package|
  yum_package package do
    action :install
  end
end

MySQLのレシピ作成

MySQLサーバをインストールするためのレシピを取得します。ホスト側で作業します。

$ cd cookbooks/
$ git clone git@github.com:opscode-cookbooks/mysql.git
$ git clone git@github.com:opscode-cookbooks/build-essential.git
$ git clone git@github.com:opscode-cookbooks/openssl.git

FuelPHPのレシピ作成

FuelPHPの開発環境用の設定のためのレシピを作成します。この作業は、chefがインストールされている仮想マシンで行います。

$ cd /vagrant/
$ knife cookbook create fuelphp -o cookbooks

cookbooks/fuelphp/recipes/default.rbに以下を記載します。

service "iptables" do
  action [:stop, :disable]
end

service "httpd" do
  supports :status => true, :restart => true, :reload => true
  action [:enable, :start]
end

template "/etc/httpd/conf.d/fuelphp.conf" do
  source "web_app.conf.erb"
  mode "0644"
  notifies :restart, "service[httpd]"
end

template "/etc/php.ini" do
  source "php.ini.erb"
  mode "0644"
  notifies :restart, "service[httpd]"
end

# create the databases
node[:db].each do |name|
    execute "create database #{name}" do
        command "mysql -uroot -p#{node[:mysql][:server_root_password]} -e 'create database if not exists #{name}'"
        user "vagrant"
    end
end

# add a quick symlink
link "/home/vagrant/fuelphp" do
    to "/mnt/fuelphp"
end

Vagrantfileに今までに追加したレシピを追加します。

  config.vm.provision :chef_solo do |chef|
     chef.cookbooks_path = "./cookbooks"
     chef.add_recipe "yum::ius"
     chef.add_recipe "php54"
     chef.add_recipe "mysql::server"
     chef.add_recipe "fuelphp"

  #   # You may also specify custom JSON attributes:
     chef.json = {
        "mysql" => {
           "server_root_password"   => "root",
           'server_debian_password' => "root",
           'server_repl_password'   => "root",
           "allow_remote_root"      => true, # allows us to connect from the host
           "bind_address"           => "0.0.0.0", 
         },
         # which databases should we make?
         "db" => [
           "fuel_test",
           "fuel_dev"
         ],
      }
  end

/etc/php.iniをコピーしてcookbooks/fuelphp/templates/default/php.ini.erbを作成します。

--- cookbooks/fuelphp/templates/default/php.ini.orig    2013-11-06 17:44:12.000000000 +0000
+++ cookbooks/fuelphp/templates/default/php.ini.erb 2013-11-15 05:58:46.414040821 +0000
@@ -875,7 +875,7 @@
 [Date]
 ; Defines the default timezone used by the date functions
 ; http://php.net/date.timezone
-;date.timezone =
+date.timezone = Asia/Tokyo

 ; http://php.net/date.default-latitude
 ;date.default_latitude = 31.7667

cookbooks/fuelphp/templates/default/web_app.conf.erbを作成します。

<VirtualHost *:80>
  DocumentRoot /mnt/fuelphp/public
  <Directory /mnt/fuelphp>
    Options FollowSymLinks Indexes
    AllowOverride all
    EnableMMAP Off 
    EnableSendfile Off
  </Directory>
</VirtualHost>

インストール

chef-soloを実行します。

$ vagrant provision

確認

http://localhost:8000/でFuelPHPのWelcomeページが表示されました。

かなり手抜きですが、とりあえず、FuelPHPが動くようになりました。

参考

Date: 2013/11/15

Tags: fuelphp, vagrant, centos