Symfoware

Symfowareについての考察blog

elixir + cowboyでwebアプリ その5 デプロイ

elixir + cowboyでapiサーバーを作ってみました。
elixir + cowboyでwebアプリ その4 住所検索APIサンプル

これ、実運用するときどうするんだろう。
まさかiex -S mixって起動するわけじゃ・・・

ということで、デプロイの方法について調べてみます。


exrm



デプロイはこちらを参考にしました。
Application Deployment

Elixir Release Manager (exrm)を使えとのこと。
https://github.com/bitwalker/exrm


FreeBSD 10.1には、pkgが用意されているようです。


# pkg search exrm
elixir-exrm-0.18.5



これをインストールして使用することにしました。


# pkg install elixir-exrm
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 11 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
    elixir-exrm: 0.18.5
    relx: 3.4.0
    rebar3: 20150630_1
    erlang-ssl_verify_hostname: 1.0.5
    erlang-rebar3_hex: 0.1.0
    erlang-providers: 1.4.1
    erlang-getopt: 0.8.2
    erlang-erlware_commons: 0.15.0
    erlang-bbmustache: 1.0.3
    elixir-conform: 0.15.0
    erlang-neotoma: 1.7.2_1




結構、色んな物に依存してますね。

インストールが終わったら、「mix help」を実行してみます。
「mix release」が追加されているはずです。


# mix help
mix                 # Run the default task (current: mix run)
mix app.start         # Start all registered apps
mix archive         # List all archives
...
mix new             # Create a new Elixir project
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.exsのapplicationsに依存しているライブラリを列挙しておきます。

・mix.exs


  1. defmodule Cowjson.Mixfile do
  2. use Mix.Project
  3. def project do
  4.     [app: :cowjson,
  5.      version: "0.0.1",
  6.      elixir: "~> 1.0",
  7.      build_embedded: Mix.env == :prod,
  8.      start_permanent: Mix.env == :prod,
  9.      deps: deps]
  10. end
  11. def application do
  12.     [
  13.         mod: {Cowjson, []},
  14.         applications: [:logger, :cowboy, :mariaex, :exjsx]
  15.     ]
  16. end
  17. defp deps do
  18.     []
  19. end
  20. end




mix releaseを実行。


# mix release
==> Building release with MIX_ENV=dev.
==> Generating relx configuration...
==> Generating sys.config...
==> Generating boot script...
==> Generating release...
==> Generating nodetool...
==> Packaging release...
==> The release for cowjson-0.0.1 is ready!
==> You can boot a console running your release with `$ rel/cowjson/bin/cowjson console`





relディレクトリが作成され、必要なライブラリがまとめられました。

631_01.png


コンソールモードで起動してみます。

rel/[アプリケーション名]/bin/[アプリケーション名]
例えば「rel/my_app/bin/my_app」に実行可能なバイナリが配置されています。

consoleオプション付きで起動してみます。


# rel/cowjson/bin/cowjson console
/var/dev/elixir/cowjson/rel/cowjson/running-config
Exec: /var/dev/elixir/cowjson/rel/cowjson/erts-7.0.2/bin/erlexec -boot /var/dev/elixir/cowjson/rel/cowjson/releases/0.0.1/cowjson -boot_var ERTS_LIB_DIR /var/dev/elixir/cowjson/rel/cowjson/erts-7.0.2/../lib -env ERL_LIBS /var/dev/elixir/cowjson/rel/cowjson/lib -config /var/dev/elixir/cowjson/rel/cowjson/running-config/sys.config -pa /var/dev/elixir/cowjson/rel/cowjson/lib/consolidated -args_file /var/dev/elixir/cowjson/rel/cowjson/running-config/vm.args -user Elixir.IEx.CLI -extra --no-halt +iex -- console
Root: /var/dev/elixir/cowjson/rel/cowjson
/var/dev/elixir/cowjson/rel/cowjson
Erlang/OTP 18 [erts-7.0.2] [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (1.0.5) - press Ctrl+C to exit (type h() ENTER for help)
iex(cowjson@127.0.0.1)1>




起動してくれました。
通常のiexと同様、Ctrl + cからabortでシュル用できます。


コンソール無しで起動するにはstartオプションを指定。


# rel/cowjson/bin/cowjson start



これでバックグラウンドで実行してくれます。


停止は、stopオプションを付けて実行。


# rel/cowjson/bin/cowjson stop






適用



実際にサーバーへ適用するときは、releasesの中に
全資産のアーカイブが作成されています。

rel/my_app/releases/0.0.1/my_app-0.0.1.tar.gz

631_02.png


これをサーバーにコピーして解凍することで、
適用を行うことになるようです。


起動スクリプトやnginxとの連携はまた後日。
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/07/28(火) 23:49:09|
  2. Erlang
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ