実際にサーバー上でSymfony2を利用するための、開発環境構築について手順をメモ書き。それぞれ作業環境が異なるが現在サーバー上に何がインストールされているのか等、結構面倒な作業も多い。
大きくざっくりと手順を説明すると3つほどある。ただしPHPのバージョンについては、バージョンが5.4以上であれば作業の必要なし。mb_stringやTimeZoneなどは最低限設定は必要。
PHPのバージョンは5.4以上
Symfony2のインストーラーを使って環境構築する場合はPHPのバージョンが5.4以上である必要がある。仮にバージョンが古い場合は、この手順を実行してバージョンアップすべし!!
/**
* バージョン確認
*/
php -v
/**
* インストール済みのパッケージを確認
*/
rpm -qa | grep php
/**
* 必要なyumを取得
*/
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/ius-release-1.0-11.ius.el6.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
/**
* 古いPHPを削除
*/
yum erase php php-devel php-common php-cli php-pear php-xml
/**
* 新しいバージョン(ver5.4以上)をインストール
*/
yum install php54 php54-devel php54-common php54-cli php54-pear php54-xml php54-pdo
ちなみに私は上記手順で5.4にアップしたが5.5にしてもらってもOK。私の環境ではエラーが出たので5.4にした。
Symfony2インストーラを実行
特にエラー等が発生しなければ、コマンドで指定したディレクトリが作成されるはず。
コンポーザーでビルド実行
Symfony2ではweb配下に、app.phpとapp_dev.phpのフロントコントローラが用意されている。app_dev.phpで動作させる場合は、デバック情報など開発に役立つ細かい情報が出力される。本番環境の場合はapp.phpを利用。
/**
* 環境変数の設定
* 開発環境:dev
* 本番環境:prod
*/
export SYMFONY_ENV=dev
export SYMFONY_ENV=prod
/**
* ビルド
*/
php composer.phar run-script post-update-cmd
/**
* ディレクトリの共通化
*/
APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\ -f1`
setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
コンポーザーが存在しない場合はコンポーザーをインストール。上記コマンドで開発・本番それぞれビルドが可能。
Welcomeページにアクセスしてみる
bin配下にapp.shというファイルを作成し以下内容を記載。
#!/bin/bash
NLS_LANG=Japanese_Japan.JA16EUC
export NLS_LANG
LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib
export LD_LIBRARY_PATH
TNS_ADMIN=/usr/lib/oracle/12.1/client64
export TNS_ADMIN
SYMFONY_ENV=prod
export SYMFONY_ENV
cd "`dirname "$0"`"
cd "../"
execCount=0
requestExec=1
case "$@" in
retry)
requestExec=`expr $requestExec + 1`
;;
esac
while [ $execCount -lt $requestExec ]
do
/usr/local/bin/php app/console $@ --no-debug 2>&1 | logger -i -p local1.info
if [ $? -eq 1 ]
then
break;
fi
execCount=`expr $execCount + 1`;
done
適当なバンドルを作成して、アクセスできるか確認してみる。
今後開発を行う上で、phpファイルの改修であればビルドを実行する必要はありません。ただしymlやtwigファイルを改修した場合は、ビルドを行う必要があるのでコンポーポーザを実行する必要があり。ディレクトリの共通化は最初の1回だけでOK。
Apacheのmod_rewriteを有効化
フロントコントローラ(app.php)をURLで省略するために、Apacheのmod_rewriteを利用する。まずはhttpd.confファイルでhtaccessを有効化。
<Directory "/home/htdocs/Symfony2/web">
・
・
・
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
AllowOverride All
・
・
・
</Directory>
上の場合ドキュメントルートのSymfony2配下に.htaccessファイルを作成し、以下のように記述。Apacheを再起動すれば動きます。
/**
* .htaccessファイル
*/
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php
</IfModule>