Mojoliciousアプリを UpStart + Sarver::Starter + Starlet で運用してみる

Mojoliciousアプリを UpStart + Sarver::Starter + Starlet で運用してみる

Server::Starter + Starlet

以前はdaemontools+Starmanで起動していたのだけれど、
最近のPlack/Starletのパフォーマンス改善まとめ。最大2倍の性能向上を読んでたらStarletが使ってみたくなったのでServer::Starter+Starletを試してみることに。

コマンドラインから起動してみる。

start_server --port=3000 -- plackup -s Starlet --max-workers=5 my app.pl

start_server (pid:31803) starting now...
starting new worker 31804
Plack::Handler::Starlet: Accepting connections at http://0:3000/

これでポート3000でサーバが待ち受けています。

UpStart

CentOS6に乗り換えたし、折角なのでデーモンの管理はUpStartに乗り換えてみる。CentOS6は標準でインストールされている(というかSysVinitが置き換わった?)なので以下のコマンドが最初から使えるみたい。daemontoolsとかsupervisorとか要らなくなりそう。

  • start SEVICE_NAME
  • stop SEVICE_NAME
  • reload SEVICE_NAME
  • restart SEVICE_NAME

perlの起動方法がよく分からなかったけどStack Overflowでそれっぽい記事を発見したので参考に書いてみた。

vi /etc/init/MyApp.conf

description "MyApp"
author "clicktx<clicktx@mail.tld>"

start on runlevel [2345]
stop on runlevel [016]

chdir /home/clicktx/MyApp/Web
script
  export PATH="/home/clicktx/perl5/perlbrew/bin:/home/clicktx/perl5/perlbrew/perls/perl-5.16/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/clicktx/bin:${PATH}"

  exec su -c "start_server --pid-file=/tmp/myapp.pid --status-file=/tmp/myapp.status --port=3000 -- plackup -s Starlet --max-workers=5 myapp.pl" clicktx
end script

respawn

※ exportするPATHは各自 echo $PATHで確認

サービスの起動
$ sudo start MyApp
MyApp start/running, process 32114

start は initctl start というコマンドのエイリアスのようだ。全てのジョブリストの確認は

$ sudo initctl list

とかで出来る。

余談

start_serverで起動するMojoliciousアプリケーションは他のperlスクリプトから再起動を受け付けたいので、--pid-fileと --status-file オプションを付けている(start_server --restartの場合は必須なので)

他のスクリクトから、

#!/usr/bin/env perl
system "start_server --restart --pid-file=/tmp/myapp.pid --status-file=/tmp/myapp.status";

なんて出来る。もちろんコマンドラインでも出来るけど。

あと、

start_server --port=127.0.0.1:3000 -- plackup -s Starlet myapp.pl

なんてしておくと、http://xxxx:3000 でアクセスされても表示されないみたい。

参考エントリー