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が動くようになりました。

参考

Tags: fuelphp, vagrant, centos

vagrant-fuelphpを使ってFuelPHPの開発環境を構築する

GitHubにVagrant Setup for FuelPHPというのがありましたので、それを使ってみます。

(2013-11-18 追記) CentOSの方がよい方は、vagrant-fuelphp-centos6を使ってFuelPHPの開発用のCentOS 6.4を30分で構築するをご覧ください。

準備

あらかじめ、VirutalBoxとVagrantをインストールしておきます(手許の環境はOSがUbuntu 12.04 Desktop、VirtualBox 4.2.18、Vagrant 1.3.5)。

また、仮想マシンとのフォルダの共有のために、nfsdをインストールします。

$ sudo apt-get install nfs-kernel-server

なお、vagrant-fuelphpは共有フォルダのパフォーマンス向上のためにnfsを使っているため、フォルダを共有するためには、ホスト側にnfsdが必要です。Windowsホストではフォルダを共有できませんので、ご注意ください。

インストール

まず、FuelPHP(執筆時のバージョンは1.7)を普通にインストールします。プロジェクト名はfuelphpとしています。

$ oil create fuelphp

fuelphpプロジェクト内にvagrant-fuelphpをインストールします。

$ cd fuelphp
$ git submodule add git@github.com:iturgeon/vagrant-fuelphp.git vagrant
$ git submodule update --init --recursive

仮想マシンの作成と起動

仮想マシンを起動します。初回はBoxファイルをダウンロードするため時間がかなりかかります。

$ cd vagrant
$ vagrant up

これで、仮想マシンが作成され起動して、http://localhost:8080/にアクセスすれば、FuelPHPのWelcomeページが表示されるはずなんですが、何故か最初にやったときは、404ページが表示されました。

調べたら、chef-soloが実行されてなくてFuelPHP用のApacheのVirtualHostの設定がされていない状態でした。しかし、何故、実行されなかったのかは不明です。以下のように仮想マシンを削除して、

$ vagrant halt
$ vagrant destroy

もう一度、vagrant upしたら、今度はうまく実行され、FuelPHPのWelcomeページが表示されました。

フォルダ構成

フォルダ構成は以下のようになります。

fuelphp(FuelPHPプロジェクトのトップ)
├── docs
├── fuel
├── public
└── vagrant

サーバ環境

vagrant-fuelphpで作成される仮想マシンのサーバ環境は以下のようになっていました。

  • メモリ 384MB
  • HDD 80GB
  • OS Ubuntu 12.04 (precise64)
  • Apache 2.2.22-1ubuntu1.4
  • MySQL 5.5.34-0ubuntu0.12.04.1
  • PHP 5.4.21-1+debphp.org~precise+1

ホスト側のポート8080が仮想マシンのポート80に転送されるようになっています。仮想マシンに直接アクセスする場合は、http://192.168.33.33/にアクセスします。

ホストのFuelPHPのプロジェクトのフォルダが仮想マシンの/mnt/fuelphpにマウントされるようになっています。なので、ホスト側でソースファイルを変更すればそのまま仮想マシンにも反映されます。

MySQLデータベースは、fuel_devとfuel_testが作成されており、rootのパスワードはrootです。

また、仮想マシンには、FuelPHPのログファイルをtailする、fuellogコマンドがインストールされています。

関連

Tags: fuelphp, vagrant

電子書籍『FuelPHP Advent Calendar 2012』の累計部数がまもなく1000部に

昨年末、IT系の電子書籍の出版社として定評のある「達人出版会」より出版された『FuelPHP Advent Calendar 2012』の累計部数がまもなく1000部に達します。

FuelPHP Advent Calendar 2012
FuelPHP Advent Calendar 2012参加有志
達人出版会
発行日: 2012-12-26
対応フォーマット: EPUB, PDF

昨日現在の部数は971部となりました。出版より1年で1000部突破はほぼ確実となりました。

無料で入手できますので、まだ入手されていない方は是非Getしてください。

販売の推移

せっかくなので、販売の推移をグラフにしてみました。

FuelPHP Advent Calendar 2013

なお、今年も「FuelPHP Advent Calendar」が開催されます。

興味のある方は、上記の記事をご覧ください。参加はまだ間に合います。

Tags: fuelphp, ebook