Play Framework 2.0 で Windows サーバー上に本番環境を構築する

Play Framework は手元で簡単に開発環境が構築できるのが魅力です。
自分ひとりであれこれ実験するにはうってつけ。
じゃあ、本番環境を構築するにはどうすればいいのか?それもWindowsサーバーに・・・
この情報が意外と少なかったので、まとめてみました。

ちょっとメモとして書いとくと、Play Framework を利用するにあたっては、
環境や言語などに依存して、ある程度自由度が異なってきます。
Linux > Windows ですし、2.0以降では Scala > Java で自由度が違います。
あえてWindows + Javaを選択してるうちってば・・・

今回参考にした情報はここらへんです。
参考記事では Windows 7 で動作したことを確認されているようですが、
同様の手法で Windows XP、Windows Server 2008 R2 でも動作することを確認しています。

簡単にまとめると、「Distributionパッケージ」を作成し、「NettyServerをYAJSWラッパー」を用いて
サービスとして常駐しちゃうよ、という方法です。
以下、手順としてまとめてみますね。

1. アプリケーションのアプリ名とアプリバージョンを修正しておきましょう
project/Build.scala にある appName と appVersion をそれぞれお好みのものに変更します

2. コマンドプロンプトで 作成した Play! アプリのフォルダへ移動し、以下のコマンドを実行します

play dist

3. Play! アプリのフォルダ内に「dist」フォルダが作成され、以下のファイル名でDistributionパッケージが出来上がります

[appName]-[appVersion]-yyyyMMdd.zip

4. 出来上がったzipを展開します。Windowsのバージョンによっては展開時にフォルダが2重になるので注意が必要です。

5. [appName]-[appVersion]-yyyyMMdd フォルダ内に「start」というファイルがあるはずです。
これは Linux 向けのシェルファイルなので、Windows 用のバッチファイルを同じフォルダに作成します。
以下の1行を記述し、「start.bat」と名前を付けます。

java %1 -cp “./lib/*;” play.core.server.NettyServer .

最後のピリオドも必要です。
また、アプリをデフォルトの9000番ではなく特定ポートを指定して起動したいなーという場合は、以下のようにします。

java %1 -Dhttp.port=80 -cp “./lib/*;” play.core.server.NettyServer .

6. 5.で作成したバッチファイルを実行します。
起動すると、コンソールにサーバーのPIDが表示されるので、これを覚えておきます。

7. YAJSW をダウンロードして、わかりやすい場所に展開しておきます。

8. コマンドプロンプトを開き、7.で展開したYAJSWの中のbatフォルダに移動して、次のコマンドを実行します。

genConfig.bat [6.で起動したPID]

9. サービスラッパーが自動的に構成され、保存されます。サービス名はNettyServerになっていますので、
アプリ名に書き換えたいときは YAJSW/conf/wrapper.conf 内の以下の設定を書き換えます。

wrapper.ntservice.name=アプリ名
wrapper.ntservice.displayname=アプリ名

10. コンソール上でサービスを動作させる場合は yajsw\bat の runConsole.bat を起動します。
起動したサービスを停止させたい場合は、開いているコンソール上で「Ctrl+C」を入力します。

11. 誤って10.のコンソールをそのまま閉じてしまった場合や、開いたままシステムをシャットダウンしてしまった場合、
次回起動時にNettyServerが正常起動しません。
この時は、アプリケーションのフォルダ([appName]-[appVersion]-yyyyMMdd フォルダ)内にある
「RUNNING_PID」というファイルを削除すると、正常に起動することができるようになります。

12. アプリの起動をWindowsのサービスに登録することもできます。
サービスに登録するときは「installService.bat」、サービスの起動は「startService.bat」、
サービスの停止は「stopService.bat」、サービスから削除するときは「uninstallService.bat」を
それぞれ使用します。
サービス名は9.で設定した内容で登録されます。

Windows では、「play start」コマンドも正常に動作しないという話ですし、
いろいろを考慮すると、これが一番安定した本番環境構築の方法なんじゃないかなーと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この記事のトラックバック用URL