Skip to content

サーバーへのデプロイ

ohr486 edited this page Jul 18, 2016 · 14 revisions

prod環境用の設定

config/prod.exs

の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: "."

をコメントインして、設定を有効にしてください。

exrmの組み込み

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 releaseexrmによって追加されるコマンドです。

デプロイの流れ

Phoenixアプリのデプロイは次の手順で行います。

  1. brunchでアセットをコンパイル

  2. mix phoenix.digestでアセットのマニフェスト(manifest.json)を作成

  3. exrmでリリースファイルを作成

  4. リリースファイルをサーバーに配置

  5. リリースファイルを展開して、デーモンとして起動

(注意) 3.exrmでリリースファイル作成に関してですが、異なるアーキでコンパイルしたファイルは動作しない (例えば、windowsで作成したリリースファイルは、linux上で動作しない等)場合があるので、 同アーキのデプロイサーバーでリリースファイルを作成して下さい。

1. brunchでアセットをコンパイル

Phoenixではアセットファイルをbrunchでコンパイルします。 本番(prod)用のアセットのコンパイルは以下の手順で行ってください。

$ npm install -g brunch # brunchのインストール
$ brunch build --production # prodのアセットをコンパイル

2.マニフェストを作成

アセットファイルのキャッシングの為に、priv/static以下にマニフェスト(アセットファイルのMap)と、digest化したファイルを配置します。

$ MIX_ENV=prod mix phoenix.digest

3.exrmでリリースファイルを作成

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 で指定した値です) 。

4.リリースファイルをサーバーに配置

scp等で、上記のgzファイルをサーバーに配置してください。

5.リリースファイルを展開して、デーモンとして起動

サーバーに配置した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