Quantcast
Viewing latest article 8
Browse Latest Browse All 25

PhoenixをGCPにデプロイする方法

ようやくQiitaに初投稿です!

今回はElixirのフレームワークであるPhoenixで
GCP環境にデプロイする手順を解説します。
アプリは参照先に記載されてるnano_plannnerを使用します。

環境は以下の通り

  • Ubuntu 18.04 Server LTS
  • リージョン: asia-northeast1(東京)
  • ゾーン: asia-northeast1-b
  • n1-standard-1(vCPU x 1、メモリ 3.75 GB)
  • HTTP、HTTPSトラフィックを許可する。

今回はお試しで作るだけなので、インスタンスは1個のみで行います。

以下のユーザー名を追加します。
  • mocamocaland
  • phoenix
ユーザーの追加方法

作成したインスタンスにsshでアクセスしてから以下の手順でユーザーを追加していきます。

$ sudo adduser mocamocaland

そうすると以下の内容が出て来ます。

Adding user `mocamocaland' ...
Adding new group `mocamocaland' (1003) ...
Adding new user `mocamocaland' (1002) with group `mocamocaland' ...
Creating home directory `/home/mocamocaland' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: mocamocaland # 今回はお試しで作っているため
Retype new UNIX password: mocamocaland
passwd: password updated successfully
Changing the user information for mocamocaland
Enter the new value, or press ENTER for the default
# 以下5項目は何も入れずにenterを入力
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] # Yを入力してenterを入力
$ gpasswd -a mocamocaland sudo

上記を作業をphoenixユーザーでも行なって下さい。

まずmocamocalandユーザーでログインします。

$ sudo login mocamocaland

Erlang と Elixir のインストール

以下の順番で環境構築とインストールをします。
途中聞かれるようなことがあればYを入力して進めて下さい。

$ 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が入ってることを確認します。

$ elixir --version
Erlang/OTP 21 [erts-10.1.3] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]
Elixir 1.7.4 (compiled with Erlang/OTP 20)

Node.jsのインストール

$ sudo apt install nodejs npm

PostgreSQLのインストールとセットアップ

$ sudo apt-get -y install postgresql
$ sudo -u postgres createuser -d phoenix -P

パスワード入力を求められたらphoenixで入力します。
更に以下を実行します。

$ sudo -u postgres createdb --owner phoenix nano_planner_prod

Nginxのインストールと設定

Nginxをインストールをします。

$ sudo apt-get -y install nginx

インストールが終わりましたら
/etc/nginx/sites-available ディレクトリに移動します。

$ cd ~/etc/nginx/sites-available

移動したら新規ファイル でnano_planner を作成します。
ファイルには以下の内容を記載します。
GCPの外部IPは作成したGCPのインスタンスで自動で生成されてる外部IPを入力して下さい。

upstream phoenix {
  server 127.0.0.1:4000;
}

server {
  listen 80;
  server_name `GCPの外部IP`;

  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;
  }
}

最後に以下を実行します。

$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/nano_planner .
$ sudo systemctl reload nginx

phoenixユーザーに変更

$ sudo login
sampler login: phoenix
Password: phoenix

ソースコードの取得、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

上記でprivate/staticのディレクトリがなくて以下のエラーが出る場合は
mkdir priv/staticで作成して下さい。

# エラー内容
$ MIX_ENV=prod mix phx.digest
The input path "priv/static" does not exist

リリースの配備をします。

$ 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.drop # 中身を一旦削除します。
$ MIX_ENV=prod mix ecto.create
$ MIX_ENV=prod mix ecto.migrate
$ MIX_ENV=prod mix run priv/repo/seeds.exs

アプリを起動します。

$ cd ~/app
$ bin/nano_planner start

最後に4000番ポートでプロセスの存在を確認します。

$ lsof -i:4000

以下の結果が出ればGCPの外部IPより表示を確認できます。
http://'外部IP'で表示確認ができます。

COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
beam.smp 2080 phoenix   15u  IPv6  25000      0t0  TCP *:4000 (LISTEN)

参考先URL
Elixir/Phoenix: Distillery を利用した tarball 作成と配備

Ubuntu 端末 その18 - 他のユーザーでログインする : login、logoutコマンド

ubuntu ユーザを追加して sudo 権限をつける


Viewing latest article 8
Browse Latest Browse All 25

Trending Articles