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