サイト引っ越しと同時に行ったMTのバージョンアップおよびPSGI化に関する個人的なメモ。
公式おすすめはnginx+Starmanと言う構成だったが、(現状使っていないが)ダイナミックパブリッシング対応していない等の制約があるようなので、とりあえず以下のような構成にしてみた。
- apache (フロントエンドサーバ兼リバースプロキシ)
- Starman (MT実行用バックエンドサーバ)
- Supervisor (Starman実行制御)
正直Perl関連には全く疎いので以下のサイトなどを参考にさせていただいた。
- MovableType 5.2β で nginx + PSGIを試す(Starman+Supervisorでデーモン化 - uzuki05のブログ
- MT5.2へのアップグレードとPSGIでの運用開始|Blog|Skyward Design
- Apache+mod_proxy+PSGIでMovable Type 5.2を動かす - The blog of H.Fujimoto
ちなみにnginx+Starman押しの割にまともなドキュメントが用意されていないのはどうかと思わないでもない。もっともFastCGIの時も(mod_perlの時も?)ドキュメントが整備されたのはかなり後になってからなので、今後に期待と言うこと感じか。
前提としてMT5.2が導入済みとなっていること。当たり前だが作業はroot権限で実施する。
Starmanを含むPSGI環境は、cpanmと言うコマンドで導入するらしいのだがそもそもこのコマンド自体入っていないので導入。色々調べたがソースビルドは避けたかったので、確か以下のコマンドで導入したはず。
cpan App::cpanminus
後は以下のようにすれば導入できるのだが、ログファイルにモジュール不足が通知されるため、内容を確認しつつログファイルが出力されなくなるまで不足モジュールを追加していく。
cpanm Task::Plack
cpanm Starman (もしかすると不要かも?)
導入が終わったらStarmanでMTを動かすため以下の設定を行う。
- MT実行用スクリプト作成
- mt-config.cgi修正
- pidファイル格納ディレクトリ作成
MT実行用スクリプト(mtrun.sh(何でもいい))は、MTインストール先やこのスクリプト自身の格納場所にもよるが今回は以下のようにしてみた(他のサイトにある物の切り貼り)。
#!/bin/sh ROOT=/var/www/html
MTDIR=$ROOT/mt PID=$ROOT/psgi/mt.pid PSGI=./mt.psgi cd $MTDIR /usr/local/bin/starman -l 127.0.0.1:5000 --pid $PID $PSGI
mt.pidはプラグインなどの変更を検知したMTがStarmanの停止を試みるためにプロセスIDを受け渡すファイルなので、mt-config.cgiにこのファイルの設定「PIDFilePath」を追加。
PIDFilePath /var/www/html/psgi/mt.pid
指定したpidファイルを格納するためのディレクトリ(この場合は/var/www/html/psgi)を作成。ちなみにWeb経由でこのファイルをのぞかれるのはセキュリティ的に余り好ましくないと思われるので、本当は別のところに作ればいいのだが、今回は面倒なので見えないようパーミッションや.htaccessを仕掛けて逃げた。
なお、後のSuperverの設定も含め、MTの実行ユーザについては意識しておく必要がある。実際、MTの実行ユーザはapacheでなくStarmanを実行するユーザになる事に気づかず、エントリ投稿時にはまった。
Supservisorのインストールは普通にyumで実行。SupervisorはStarmanに対する起動時の実行とStarmanのプロセスが落ちたときの再実行処理をやってくれる。
yum install supervisor
Supervisorの設定ファイル/etc/supervisord.confにStarman実行設定を追加。
[program:mt] user=apache command=/var/www/html/psgi/mtrun.sh autostart=true autorestart=true
stopsignal=QUIT
上にも書いたが、userに設定したユーザがStarmanの実行ユーザになるため、再構築などでMTがファイルを生成したりアップロードしたりするディレクトリに対して、このユーザの書き込み権限が必要となる。
Supervisor実行。
service supervisord start
自動実行設定も行っておく。
chkconfig supervisord on
httpd.confにリバースプロキシ設定を追加。
<IfModule mod_proxy.c> ProxyPass /mt/mt-static/ ! ProxyPass /mt/ http://localhost:5000/mt/ ProxyPassReverse /mt/ http://localhost:5000/mt/ </IfModule>
apacheを再起動して完了。
コメントする