Amazon EC2 + nginx + PSGI で、MTを起動する

Amazon Web Serviceで、Movable Type + nginx + PSGI で、環境構築した時のメモ書きをシェアします。インストールに当たっては、MTのwikiを参考にしています。なお、事前にCPANの必須モジュールがインストールされており、Apache+CGIでMovable Typeが動作している前提としました。

ディストリビューションはAmazon Linuxを利用してみました。

前提環境

  • サーバー Amazon EC2 マイクロインスタンス
  • ディストリビューション Amazon Linux
  • 公開パス /var/www/html

手順

  1. 開発ツール + nginxインストール
  2. cpanmインストール + 関連モジュールインストール
  3. 常駐プロセスの整理
  4. nginxの設定ファイル修正
  5. Starmanによるmt.psgiの起動設定

1. 開発ツール + nginxインストール

nginxのインストール。cpanモジュールのインストールのため、makeとgccも同時にインストール。

sudo yum install make gcc nginx

nginxがインストールできたら、Apacheを停止、nginxを起動してみる。Amazon Linuxのnginxスタートページが出ていたら、正常に動作している。

sudo /etc/init.d/httpd stop
sudo /etc/init.d/nginx start

nginx_amazon.png


2. cpanmインストール + 関連モジュールインストール

cpnaminusをインストール。その後、cpanmでPlackとStarman関連モジュールをインストール

sudo cpan App:cpanminus
sudo cpanm Task::Plack

XMLRPCを利用するため、XML::Parserをインストール。XML::Parserを利用するためには、expatというものが必要らしい。合わせてインストール

sudo yum install expat
sudo cpan XML::Parser XMLRPC::Transport::HTTP::Plack


3 常駐プロセスの整理

freeコマンドで見たところ、意外にメモリが使用されていることを発見。

# free
total used free shared buffers cached
609600 366264 243336 0 22460 269452

今回は、さくらインターネットの社長の田中さんのブログを参考に、プロセスを整理してみました。
http://tanaka.sakura.ad.jp/archives/001065.html

rebootして再度メモリを調べてみたところ

# free
total used free shared buffers cached
609600 173924 435676 0 7644 128648

だいぶメモリ利用量が減りました。


4. nginxの設定ファイル修正

Amazon Linuxのnginxは、デフォルトで/usr/share/nginx/html/
になっているため、これを/var/www/htmlへ変更。

nginxの設定ファイルであるnginx.confは、

/etc/nginx/nginx.conf

ですが、細かい設定は一つ下のディレクトリ

/etc/nginx/conf.d/default.conf

に書かれていたため、こちらを修正しました。
(ディストリビューションによって、このへんは細かい差異があると思います)

location / {
root /var/www/html;
index index.html index.html;

また、*.cgiファイルからのリクエストをリバースプロクシで受けて処理するために、以下の設定をしました。ブラウザからcgiファイルのリクエストがあった際には、5000番ポートを経由してmt.psgiで処理し、出力結果をnginxに返します。

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

5. Starmanによるmt.psgiの起動設定

MTのwikiを元に、mt.psgiをStarmanで起動、常駐させるためのスクリプトを作成。
MTのディレクトリ配下にpids/testpidというファイルを作成し、アクセス権限を与えることにしました。
ここでは、スクリプト名を「starman-mt」としました。

vim /path/to/script/starman-mt
#!/bin/sh

MT=/var/www/html/mt
PID=$MT/pids/test.pid
PSGI=$MT/mt.psgi

cd $MT
/usr/local/bin/starman --pid $PID $PSGI

starman-mtを保存したら、chmodして実行権限を付与します。

initデーモンとして処理できるように、/etc/init.d/以下に、starmna-mtという名称の起動スクリプトを作成しました。

vim /etc/init.d/starman-mt 
#!/bin/sh
# chkconfig: 345 99 1
# description: starman-mt
# processname: starman-mt
start(){
echo -n "starting starman-mt:"
/path/to/script/starman-mt
return 0
}
stop(){
killall starman-mt
return 0
}
case $1 in
start)
start
;;
stop)
stop
;;
esac

最後に、chkconfigして、スタートレベルを設定します。

chkconfig --level 345 starman-mt on


これで、サーバーが再起動するごとに、mt.psgiが常駐プロセスとして立ち上がります。

nginx、Apacheなどもchkconfigでスタートレベルを調整して、設定終了です。

以上です。