Node製のサービスを常駐化させる

電脳麻将で天鳳の牌譜を検討する - koba::blog で作成した天鳳牌譜変換サーバを外部からアクセス可能な常駐サービスとして起動するよう設定します。手順は、

  1. mod_proxy によりApacheをリバースプロキシにする
  2. systemd によりサーバ起動時に自動起動するようにする

となります。

mod_proxy によりApacheをリバースプロキシにする

たいていのサーバでは、すでにWebサーバ*1がポート80で起動しているものと思います。このためNode製のWebサービスは個々に任意のポートで立上げることとし、リバースプロキシの機能でメインのWebサーバと結びつけるのがよいでしょう。この方法なら80番のポートを奪い合わず、複数のNode製のサービスを共存させることができます。

電脳麻将 はWebサーバにApacheを使用しているので、Apacheをmod_proxyでリバースプロキシ化し、天鳳牌譜変換サーバにアクセスできるように設定します。天鳳牌譜変換サーバはデフォルトでは http://127.0.0.1:8001/tenhou-log/ で牌譜を配信するので、http.conf などに以下のような設定をすればOKです。*2

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>
ProxyPass /majiang/tenhou-log http://127.0.0.1:8001/tenhou-log
ProxyPassReverse /majiang/tenhou-log http://127.0.0.1:8001/tenhou-log

systemd によりサーバ起動時に自動起動するようにする

CentOS 7ではデーモンの管理は systemd で行うようになっています。天鳳牌譜変換サーバをサービスとして登録するために、/etc/systemd/system/tenhou-log-server.service を作成し、以下に設定します。

[Unit]
Description=Tenhou-log conversion server
After=network.target remote-fs.target nss-lookup.target

[Service]
ExecStart=/usr/local/bin/node /usr/local/bin/tenhou-log-server
Restart=always

[Install]
WantedBy=multi-user.target

各設定の意味は以下の通りです。

Description
サービスの説明です。
After
サービスの起動順序を指定します。Apacheと同じ記述にしました。
ExecStart
サービスを起動するコマンド列です。フルパスで記述しましょう。
Restart
サービスが落ちた場合の再起動方法です。always は無条件再起動です。*3
WantedBy
サービスを起動する run level の指定です。Apacheと同じ記述にしました。*4

設定ができたら systemctl コマンドでサービスを有効化し起動します。

$ sudo systemctl enable tenhou-log-server
$ sudo systemctl start tenhou-log-server

サーバを再起動してみましたが、問題なくサービスも起動されました。

*1:ApacheとかNginxとか

*2:yumでApacheをインストールするとデフォルトでmod_proxyは有効になっているようです

*3:試しにプロセスを kill してみたら、即座に再起動されていました

*4:おそらく run level 3 相当