nginx + Starman + バーチャルホストなサイトの作成


前回の記事で Amon2 + Starman な Web アプリを公開してみたのでその時のまとめ。

「MovableType 5.2b2 を nginx + PSGI/Plack @ Mountain Lion な環境で動かす」ですでに nginx + Starman な環境を作成しています。今回はコレに新しいアプリを追加してみます。図に書くとこんな感じです。

120826-0001.png

サーバーでの動作確認

Amon2 でのアプリの開発が終わったら、サーバーにソースをダウンロードして動作の確認をしてみます。

$ ssh remora.cx
$ cd /Library/WebServer/Application
$ git clone git@github.com:delphinus35/PushStateTest
$ cd PushStateTest
$ mkdir db && mkdir pid
$ starman -l 127.0.0.1:28520 --pid pid/pushstatetest.pid app.psgi
# 別のターミナルで
$ curl -L http://127.0.0.1:28520
# HTML が表示されたら成功

Starman の起動スクリプト

起動スクリプトを用意します。

#!/bin/sh
DIR=$(cd $(dirname $0);pwd)
PID=$DIR/pids/app.pid
PSGI=$DIR/app.psgi
STARMAN=/Users/delphinus/perl5/perlbrew/perls/perl-5.14.1/bin/starman
cd $DIR
$STARMAN -l 127.0.0.1:18521 --pid $PID $PSGI
# vim:se ft=sh:

Starman のパスとかポート番号とかは適当に変えてください。ファイルに実行権限を付け加えるのも忘れずに。

launchctl の設定

今回は Mac OS X での鯖立てなので launchd を使います。Linux なら supervisord とかですかね。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>delphinus.pushstatetest-run</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Library/WebServer/Applications/PushStateTest/app.run</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

ファイル名とかパスは自由に変えてください。でもファイルの所有権は root じゃないと怒られるようです。

nginx の設定

nginx.conf を編集します。前回と重複は省略しています。ハイライトした部分が今回のアプリに関係ある箇所です。

user _www;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    upstream apache {
        server 127.0.0.1:10080;
    }

    upstream mt {
        server 127.0.0.1:18520;
    }

    upstream pushstatetest {
        server 127.0.0.1:18521;
    }

    (省略)

    server {
        listen       80;
        server_name  pushstatetest.remora.cx;

        access_log /var/log/nginx/pushstatetest-access.log;
        error_log /var/log/nginx/pushstatetest-error.log;

        location / {
            proxy_pass http://pushstatetest;
            break;
        }
    }
}

今回は pushstatetest.remora.cx というサブドメインを作り、コレに新しいアプリを割り当てました。予め、DNS の方でこの名前を CNAME に設定しておいてください。

サーバの起動&再起動

まずは Starman の方を起動します。

$ sudo launchctl load /Library/LaunchDaemons/delphinus.pushstatetest-run.plist
# ちゃんと起動しているか確認
$ ps aux | grep starman

次は nginx を再起動するのですが、なぜか launchctl stoplaunchctl unload で終了してくれません。よくわからんので kill して再起動します。

$ sudo pkill nginx
$ sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
$ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist

コレで完了です。http://pushstatetest.remora.cx にアクセスすると、ちゃんと動いていることが確認できます。

コメントを残す