サーバーへのデプロイ
のprod環境の設定を、
config :tokyoex_handson_demo, TokyoexHandsonDemo.Endpoint,
http: [port: 4000],
url: [host: "example.com", port: 4000],
cache_static_manifest: "priv/static/manifest.json"
の様に本番環境で使用するポート番号で指定してください(この例だと4000番ポートを使う場合)
また、コメントアウトされている
config :phoenix, :serve_endpoints, true
config :tokyoex_handson_demo, TokyoexHandsonDemo.Endpoint, server: true
config :tokyoex_handson_demo, TokyoexHandsonDemo.Endpoint, root: "."
をコメントインして、設定を有効にしてください。
Phoenixのデプロイは、exrmを使って行います。
以下の手順で、Phoenixアプリにexrm
を組み込んでください。
mix.exsのdepsに、exrm
を追加
defp deps do
[
〜
{:exrm, "~> 1.0.6"} # Release Generator
]
end
次に、mix deps.get
で関連ファイルを取得してください。
$ mix deps.get
$ mix deps.compile
$ mix help | grep release
mix release # Build a release for the current mix application
mix release.clean # Clean up any release-related files
mix release.plugins # View information about active release plugins
$
mix release
がexrm
によって追加されるコマンドです。
Phoenixアプリのデプロイは次の手順で行います。
-
brunchでアセットをコンパイル
-
mix phoenix.digest
でアセットのマニフェスト(manifest.json
)を作成 -
exrmでリリースファイルを作成
-
リリースファイルをサーバーに配置
-
リリースファイルを展開して、デーモンとして起動
(注意) 3.exrmでリリースファイル作成に関してですが、異なるアーキでコンパイルしたファイルは動作しない (例えば、windowsで作成したリリースファイルは、linux上で動作しない等)場合があるので、 同アーキのデプロイサーバーでリリースファイルを作成して下さい。
Phoenixではアセットファイルをbrunchでコンパイルします。 本番(prod)用のアセットのコンパイルは以下の手順で行ってください。
$ npm install -g brunch # brunchのインストール
$ brunch build --production # prodのアセットをコンパイル
アセットファイルのキャッシングの為に、priv/static
以下にマニフェスト(アセットファイルのMap)と、digest化したファイルを配置します。
$ MIX_ENV=prod mix phoenix.digest
mix release
でリリースファイルを作成してください。
$ MIX_ENV=prod mix compile
$ MIX_ENV=prod mix release
mix release
を実行すると、rel
ディレクトリが作成されます。
relディレクトリには、
rel/<アプリ名>/releases/<バージョン>/<アプリ名>.tar.gz
が含まれているので、この、<アプリ名>.tar.gz
をリリース対象のサーバーに配置してください(バージョンは mix.exs にある project 関数の :version で指定した値です) 。
scp
等で、上記のgzファイルをサーバーに配置してください。
サーバーに配置したgzファイルを展開すると、bin
ディレクトリが作成されます。
$ tar <アプリ名>.tar.gz
$ ls
bin erts-8.0 lib releases running-config tmp <アプリ名>.tar.gz
$
bin/<アプリ名>
を実行する事でアプリを起動できます。
$ ./bin/<アプリ名>
Usage: <アプリ名> {start|start_boot <file>|foreground|stop|restart|reboot|ping|rpc <m> <f> [<a>]|console|console_clean|console_boot <file>|attach|remote_console|upgrade|escript|command <m> <f> <args>}
$
-
アプリの起動:
./bin/<アプリ名> start
-
アプリの停止:
./bin/<アプリ名> stop
-
アプリの起動(コンソールで):
./bin/<アプリ名> console
-
起動しているアプリに対してアタッチ:
./bin/<アプリ名> remote_console
-
ping:
./bin/<アプリ名> ping