こんにちは、Yuuです。12月26日は第89回ぱくたそ大忘年会でした。なぜ第89回なのかは大川さんが知っていると思われる。 そんな26日ですが、実は前日25日〜26日にかけて、サーバ移行を行っておりました。

1年位前にやったPSGI周りの設定をすっかり忘れていたのと、検索してもあまり情報ないので備忘録代わりにまとめておきます。## 構成と使用ツール - CentOS7 - nginx - git - cpanm - Supervisor

PSGIとは?

PSGI とは、Perl Web Server Gateway Interface の略で、Perl で書かれたウェブアプリケーションのサーバーレイヤーを抽象化する為の仕様です。Python の WSGI や Ruby の Rack に相当します。PSGI に対応したアプリケーションは、PSGI サーバーと呼ばれる PSGI に準拠したウェブアプリケーションサーバー上で動作します。 Movable Type では、Starman を PSGI サーバーとして利用する事を想定しています。もちろん、Starman 以外の PreFork 型の PSGI サーバーや、PSGI を利用せず、CGI として Apache などの Web サーバーで運用することも引き続きできます。 http://www.movabletype.jp/documentation/mt6/reference/psgi-plack-movable-type.html

と公式に書いてある。 公式に書いてあるので、そういうことなんだと思います。

cpanmをインストールする

Perlお馴染みパッケージ管理ツールをインストールします。

gitの場合

$ git clone git://github.com/miyagawa/cpanminus.git
$ cd cpanminus
$ perl Makefile.PL
$ make install

cpanの場合

$ cpan App::cpanminus

buildに必要なモジュールをインストールする

Plackをインストールする際に、下記のモジュールがないと失敗するので、予め入れておきます。

$ yum install -y gcc expat-devel

PSGIをインストールする

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

Movable Typeの設定を行う

PIDFilePathの設定

$ vi /var/www/html/movabletype/mt-config.cgi
PIDFilePath /var/www/html/movabletype/psgi/mt.pid
$ vi /var/www/html/movabletype/psgi/mt.run
#!/bin/sh
MT=/var/www/html/movabletype
PID=$MT/psgi/mt.pid
PSGI=$MT/mt.psgi
cd $MT
/usr/local/bin/starman -l 127.0.0.1:5000  --pid $PID $PSGI

動くか確認する

Movable Typeをインストールしたフォルダに移動して、下記コマンドで確認する。

$ plackup mt.psgi

インストールが問題なければサーバが立ち上がるはず。 一旦起動が確認できたので、終了させて、confの設定に移ります。

リバースプロキシ

動かすサーバが起動しただけなので、Mobable TypeのCGIファイル実行した際に、 サーバで実行させるようにしてあげます。

nginxのconfに追記

location ~ \.cgi$ {
proxy_pass          http://127.0.0.1:5000;
}

これで拡張子がcgiのアプリケーションはPlackサーバで動作します。

Supervisorで常時起動させる

このままだとセッション落とすと、Plackサーバも落ちてしまうので、Supervisorでタスク登録・継続実行させます。 http://supervisord.org/

yum にパッケージがあるようですが、pythonで入れてみる。

$ yum install -y python-setuptools
$ easy_install supervisor

起動スクリプトがないので作る

$ vi /etc/init.d/supervisord

コードは下記にて。 https://gist.github.com/regret/da56a239cb581089c813

configの設定を行う

$ echo_supervisord_conf > /etc/supervisord.conf
$ echo "[include]" >> /etc/supervisord.conf
$ echo "files = supervisord/conf/*.conf" >> /etc/supervisord.conf
$ mkdir -p /etc/supervisord/conf/
$ vi /etc/supervisord/conf/service.conf
[program:mt]
user=root
command=/var/www/html/movabletype/psgi/mt.run
autostart=true
autorestart=true
stopsignal=QUIT
log_stdout=true
log_stderr=true
logfile=/var/www/html/movabletype/psgi/psgi.log

起動する

$ /etc/init.d/supervisord start
$ chkconfig supervisord on

もしくは

$ systemctl start supervisord.service
$ systemctl enable supervisord.service

とか。

問題なく起動していれば、Movable Typeの管理画面のシステム情報にて、下の画像のように表示されます。

psgi.png

移動先のスペックはこちら

  • CentOS7
  • CPU 12コア
  • メモリ 64G
  • SSD 800G
  • 回線 1Gbps

http://www.cpi.ad.jp/archives/htmlmail/mc/154/index.html

この状態で全記事の再構築が、「28時間」→「5時間」になりました。 サーバのスペックって偉大・・。