Movable TypeをPSGIで動かす

Movable TypeはCGIプログラムですが、
CGIだとリクエストのたびにPerlを起動してプログラムの動かすため非常に遅いです。

とうわけでもう少し高速化したいと思います。

perlの高速化というとmod_perlやFastCGIが真っ先に思い浮かびますが、今回はもっとナウでヤングなPSGIで動かしたいと思います。

PSGIとはPerl Web Server Gateway Interfaceの略で、WebサーバーとWebアプリケーションを繋ぐインターフェイスになります。
PythonのWSGI、RubyのRackをインスパイアしたものみたいです。

というわけでPSGIで高速化してみました。

今回はApacheをリバースプロキシとし、PSGIサーバーはStarmanを使用する。



MTの設定

mt-config.cgiにPIDを保存するファイルを設定する
以下を追記(別にパーミッションさえちゃんとしていればパスはどこでも良い)

PIDFilePath /var/run/mt/mt.pid



Starman


インストール

$ cpanm Task::Plack
$ cpanm XMLRPC::Transport::HTTP::Plack

Task::PlackをインストールすればStarman他関連モジュールがインストールされるとのこと。


systemctlの設定

[Unit]
Description=starman for mt
After=syslog.target
After=network.target
After=mysql.service
[Service]
User=apache
Group=apache
Restart=always
SyslogIdentifier=starman
Environment=MT_HOME=/var/www/cgi-bin/mt
Environment=MT_CONFIG=${MT_HOME}/mt-config.cgi
ExecStart=/bin/sh -c "/usr/local/perl5/perls/perl-5.30.0/bin/starman ${MT_HOME}/mt.psgi --access-log /var/log/starman/access_log --error-log /var/log/starman/error_log --pid `perl -ne 'next if /^#/; print $1 if /^\s*PIDFilePath\s+(.*)/i' ${MT_CONFIG}`"
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

Unitセクションには依存の設定等を書く
movable typeはmysqlを使用するのでmysql起動後に起動するようにする

Serviceセクションにはサービスの起動設定等を書く
今回はExecStartにstarmanの起動コマンドを書いた

あとは以下のようにして自動的に起動するようにしておけば安心

$ sudo systemctl enable starman



Apacheの設定

安全にsslでアクセスするようにしたので443のVirtualHostで以下を設定した

<VirtualHost _default_:443>
...
<IfModule proxy_module>
ProxyPass /cgi-bin/mt/ http://localhost:5000/cgi-bin/mt/
ProxyPassReverse /cgi-bin/mt/ http://localhost:5000/cgi-bin/mt/
</IfModule>
...
</VirtualHost>



これで完了!

apacheとstarmanを起動すれば無事CGI版より早くなったMTを味わえるはず。

コメントする