[Zend Framework] Vagrant 環境に Zend Framework 1 と Zend Framework 2 をインストールする
以前に作った Zend アプリケーションを Vagrant 環境で動かせるようにしておくと良いかなと思いたち、ひとまずスケルトンプロジェクト作成をしました。
Contents
System requirements
必要要件を確認します。
Zend Framework 1.12dev … PHP 5.2.11 or later.
Zend Framework 2.3.4dev … PHP 5.3.23 or later.
(CentOS 6.5 標準でインストールされるのは PHP 5.3.3 で、ZF2 のスケルトンアプリが表示されずにはまりました。)
ファイルレイアウト
- /vagrant/www ディレクトリを作成し、そのなかにプロジェクトを作成します。
- composer でインストールします。
- PHP, ZF1, ZF2 のプロジェクトを動かせるようにします。
- それぞれのプロジェクトの /public を Virtual host のドキュメントルートに設定します。
.
├── Gemfile
├── Gemfile.lock
├── Vagrantfile
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
├── site-cookbooks
│ └── zend
└── www
├── composer.json
├── composer.lock
├── php
├── vendor
├── zf1
└── zf2
このディレクトリを synced_folder で /vagrant として読み込みます。
バーチャルホストの設定をする
httpd.conf にバーチャルホストの設定を加えておきます。
:
<virtualHost *:<%= node['httpd']['port'] %>>
DocumentRoot <%= node['httpd']['php'] %>
ServerName php.local
</virtualHost>
<virtualHost *:<%= node['httpd']['port'] %>>
DocumentRoot <%= node['httpd']['zf1'] %>
ServerName zf1.local
SetEnv APPLICATION_ENV "development"
<directory <%= node['httpd']['zf1'] %>>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</directory>
</virtualHost>
<virtualHost *:<%= node['httpd']['port'] %>>
DocumentRoot <%= node['httpd']['zf2'] %>
ServerName zf2.local
SetEnv APPLICATION_ENV "development"
<directory <%= node['httpd']['zf2'] %>>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</directory>
</virtualHost>
:
composer でインストールする
composer install
を実行し、ライブラリをインストールします。
{
"repositories": [
{
"type": "composer",
"url": "https://packages.zendframework.com/"
}
],
"require": {
"zendframework/zendframework": "2.3.*@dev",
"zendframework/zftool": "dev-master",
"zendframework/zendframework1": "1.12.*@dev"
}
}
ZF2 では zf コマンドがなくなったので、Zend Framework 2 Tool をあわせてインストールします。
PHP のプロジェクトを作成する
ドキュメントルートに phpinfo を表示するファイルを置いておきます。
<?php
phpinfo();
Zend Framework 1 のプロジェクトを作成する
zf コマンドを探して、プロジェクトを作成します。
% vendor/zendframework/zendframework1/bin/zf.sh create project zf1
composer のオートローダーを呼ぶように /public/index.php に以下を追記します。
require_once realpath('/vagrant/www/vendor/autoload.php');
Zend Framework 2 のプロジェクトを作成する
Zend Framework 2 Tool でプロジェクトを作成します。
プロジェクトディレクトリ内で composer を実行するよう指示されますが、すでに ZF2 はインストール済なので飛ばします。
% vendor/bin/zf.php create project zf2
ZF2 skeleton application installed in zf2.
In order to execute the skeleton application you need to install the ZF2 library.
Execute: "composer.phar install" in zf2
For more info in zf2/README.md
index.php を読むと、init_autoloader.php が呼ばれており、ZF2 のライブラリの場所を伝えてあげる必要があることが分かりました。
ZF2_PATH に composer でインストールしたパスを渡してあげるよう、下記を追記します。
:
chdir(dirname(__DIR__));
$path = realpath(dirname(__DIR__) . '/../vendor/zendframework/zendframework/library/');
putenv("ZF2_PATH=" . $path);
:
vagrant up
あとは vagrant up
です。
http://php.local/
http://zf1.local/
http://zf2.local/
一式をまとめました。
補遺
remi, epel repo の追加
前述の通り PHP のバージョンを上げる必要があり、yum repo 追加をシェルスクリプトで間に合わせました。
:
bash "add_yum_repo" do
user "root"
cwd "/vagrant/www"
code <<-EOH
sudo rpm -Uvh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/i386/epel-release-6-8.noarch.rpm
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo yum install -y --enablerepo=remi-php55 php php-mbstring httpd mysql-server
EOH
end
:
こちらを参考にさせて頂きました。