PHPer.jpでSymfony2のblogチュートリアルを動かすためにやったこと

http://phper.jp/http://docs.symfony.gr.jp/sf2-blog-tutorial/を動してみたので、雑なまとめですが、やった設定の備忘録。

最終的に下記のような構成に。

/path/to/approot/
 -  .phper/        # phper.jp用設定ファイル群
 -  Symfony/       # blogチュートリアルアプリケーション
 -  phpMyAdmin/    # 管理用phpMyAdmin

1. phper.jpに登録

http://phper.jp/quickstartを見てユーザ登録〜デプロイまで進める。
ドキュメントルートは Symfony/web にしておく。

2. phperコマンドのインストール

Ruby製のphperというCLIツールが用意されているので、http://blog.phper.jp/2011/03/07/94/を参考にRuby環境整えて

$ gem install phper

で、phperコマンドをインストール。

3. blogチュートリアルの作成

ローカルでblogチュートリアルを読み進めながら、/path/to/approot/Symfony下に作成。

4. phper.jp用に設定の修正

Symfony/web/app_dev.phpSymfony/web/config.phpのアクセス制限変更

http://blog.phper.jp/2011/03/05/28/の構成を見るとフロントにproxyが居るので、
$_SERVER['REMOTE_ADDR']だけじゃなくて、$_SERVER['HTTP_X_FORWARDED_FOR']も見てやるようにする。

# /path/to/approot/Symfony/web/app_dev.php
# /path/to/approot/Symfony/web/config.php
<?php
...
$remoteIpAddresses = array_merge(
    (array)@$_SERVER['REMOTE_ADDR'],
    array_map('trim', explode(',', @$_SERVER['HTTP_X_FORWARDED_FOR']))
);
$allowIpAddresses  = array(
    '127.0.0.1',
    '::1',
    'your-global-ip-address', // 自分の接続元グローバルIP
);
if (count(array_intersect($remoteIpAddresses, $allowIpAddresses)) === 0) {
    header('HTTP/1.0 403 Forbidden');
    die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
...
■ .gitignore

下記をgitの管理対象外にする。

# /path/to/approot/Symfony/.gitignore
*/logs/*
*/cache/*
app/config/parameters.ini

parameters.iniはローカル、phper.jp上で異なるのでgit管理対象外として、下記のようにした。

# /path/to/approot/Symfony/app/config/parameters.phper.ini
[parameters]
    database_driver   = pdo_mysql
    database_host     = db.phper.jp
    database_name     = yourname_appname
    database_user     = yourname
    database_password = password

mysqlの接続情報などは、phper infoで確認できる。

$ phper info
yourname-appname
--> gitosis@git.phper.jp:yourname/appname.git
--> mysql://yourname:password@db.phper.jp/yourname_appname

5. phpMyAdminを用意する

MySQLコマンドラインクライアントが使えないのでphpMyAdminを入れる。
http://www.phpmyadmin.net/home_page/downloads.phpからDownloadして/path/to/approot/phpMyAdminに設置する。


また、できればphpMyAdminにはhttpsでアクセスしたい。
http://blog.phper.jp/2011/03/05/28/を見ると、phper.jpではエッジレイヤのNginxがSSLアクセラレーションするようなので、
SSL-Proxy下でphpMyAdminSSLで動かす設定も入れておいた。


config.sample.inc.phpをコピーしてconfig.inc.phpを作成。下記を設定。

# /path/to/approot/phpMyAdmin/config.inc.php
<?php
..
// 書き換え
$cfg['Servers'][$i]['host'] = 'db.phper.jp';
// SSL-Proxy下でSSLで動かす設定。 http://wiki.phpmyadmin.net/pma/Config#PmaAbsoluteUri
$cfg['PmaAbsoluteUri'] = 'https://yourappname.phper.jp/pma/';

6. phper設定

プロジェクト直下の.phper/ディレクトリにいろいろとスクリプトや設定を記述できる。
詳しくはマニュアル参照。http://phper.jp/manual

■ deployの設定: /path/to/approot/.phper/deploy
#!/bin/sh
ROOT_DIR=$(cd $(dirname $0)/..; pwd)
# キャッシュの削除
rm -rf $ROOT_DIR/Symfony/app/cache/*
# parameters.iniのシンボリックリンク作成
ln -sf $ROOT_DIR/Symfony/app/config/parameters.phper.ini $ROOT_DIR/Symfony/app/config/parameters.ini
rsync除外設定: /path/to/approot/.phper/rsync_exclude.txt
Symfony/app/cache/*
Symfony/app/logs/*
アプリケーションサーバApacheの設定: /path/to/approot/.phper/httpd.conf

/pmaでphpMyAdminにアクセス。後、Digest認証も一応かけておく。

Alias /pma "/var/www/sites/yourname-appname/phpMyAdmin"
<Location pma>
    AuthType Digest
    AuthName "Secret Zone"
    AuthDigestDomain pma
    AuthDigestProvider file
    AuthUserFile  "/var/www/sites/yourname-appname/.phper/.htdigest"	
    Require valid-user
</Location>
$ htdigest -c /path/to/approot/.phper/.htdigest "Secret Zone" user
New password: ****
Re-type new password: ****

7. デプロイする

$ git push

8. phper.jp上のデータベースにschema定義を流しこむ

blogチュートリアルのschema定義をdumpして、phpMyAdminから流しこむ。

$ app/console doctrine:schema:create --dump-sql
ATTENTION: This operation should not be executed in an production enviroment.

CREATE TABLE Post (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, body LONGTEXT NOT NULL, createdAt DATETIME NOT NULL, updatedAt DATETIME NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB


後はブラウザから動作確認して動くか確認。


実際はこんなにすんなり行かずに、トライアンドエラーを繰り返しました。PaaS楽しい!!

*1:gitに登録するのも嫌だが他の方法が思いつかなかったので