『Elixir/Phoenix 初級④: バリデーション』のサンプルアプリ NanoPlanner を本番環境(Ubuntu 18.04 Server LTS)にセットアップして、公開する手順を紹介します。
デプロイメントツールとしてDistilleryを使用します。
前提条件
- Ubuntu 18.04 Server LTS
kuroda
ユーザー (sudo
権限あり)phoenix
ユーザー (sudo
権限あり)
Erlang と Elixir のインストール
kuroda
ユーザーで Ubuntu Server にログインして、次のコマンド群を順に実行。
$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb $ sudo dpkg -i erlang-solutions_1.0_all.deb $ sudo apt-get update $ sudo apt-get -y install esl-erlang $ sudo apt-get -y install elixir $ elixir --version
次のような結果が出ることを確認する(バージョン番号は異なるかもしれません)。
Erlang/OTP 22 [erts-10.4.1] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe] Elixir 1.8.2 (compiled with Erlang/OTP 20)
Node.js のインストール
引き続き、kuroda
ユーザーとして次のコマンド群を順に実行。
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - $ sudo apt-get install nodejs
PostgreSQL のインストールとセットアップ
引き続き、kuroda
ユーザーとして次のコマンド群を順に実行。
$ sudo apt-get -y install postgresql $ sudo -u postgres createuser -d phoenix -P
パスワードの入力を求められるので、phoenix
と2回入力。
さらに次のコマンドを実行。
$ sudo -u postgres createdb --owner phoenix nano_planner_prod
Nginx のインストールと設定
kuroda
ユーザーとして次のコマンドを実行。
$ sudo apt-get -y install nginx
テキストエディタで /etc/nginx/sites-available
ディレクトリに新規ファイル nano_planner
を作成
upstream phoenix { server 127.0.0.1:4000; } server { listen 80; server_name example.com; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Cluster-Client-Ip $remote_addr; location / { proxy_pass http://phoenix; allow all; } }
ただし、example.com
の部分は、Ubuntu Server に割り当てられた実際のホスト名で置き換える。
kuroda
ユーザーとして次のコマンド群を順に実行。
$ cd /etc/nginx/sites-enabled $ sudo ln -s ../sites-available/nano_planner . $ sudo systemctl reload nginx
NanoPlanner のセットアップ
ここから先は、phoenix
ユーザーで Ubuntu Server にログインして、次のコマンド群を順に実行。
ソースコードの取得から npm run deploy
まで
$ git clone -b master4-deploy https://github.com/oiax/nano_planner.git $ cd nano_planner $ cp config/skel/prod.secret.exs config/ $ cd assets $ npm install $ npm run deploy $ cd ..
tarballの作成
$ mix deps.get --only prod $ MIX_ENV=prod mix compile $ MIX_ENV=prod mix phx.digest $ MIX_ENV=prod mix release
リリースの配備
$ mkdir -p ~/app/releases/0.1.0 $ cd _build/prod/rel/nano_planner/releases/0.1.0 $ cp nano_planner.tar.gz ~/app/releases/0.1.0 $ cd ~/app/releases/0.1.0 $ tar -xf nano_planner.tar.gz -C ~/app
データベースの初期化
$ cd ~/nano_planner $ MIX_ENV=prod mix ecto.migrate $ MIX_ENV=prod mix run priv/repo/seeds.exs
NanoPlanner の起動
$ cd ~/app $ bin/nano_planner start
4000番ポートで待ち受けるプロセスの存在を確認。
$ lsof -i:4000
次のような結果が出ることを確認する。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME beam.smp 16931 phoenix 15u IPv6 52028 0t0 TCP *:4000 (LISTEN)
以上で作業完了です。ブラウザで http://example.com
にアクセスすれば、NanoPlanner の画面が出てくるはずです。ただし、example.com
の部分は、Ubuntu Server に割り当てられた実際のホスト名で読み替えてください。