17
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-08

ようやく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 作成と配備]
(http://tkrd.hatenablog.com/entry/2018/12/01/034256?_ga=2.165002358.897563690.1544193303-1964647493.1527406712)

[Ubuntu 端末 その18 - 他のユーザーでログインする : login、logoutコマンド]
(https://kledgeb.blogspot.com/2012/08/ubuntu-18-loginlogout.html)

[ubuntu ユーザを追加して sudo 権限をつける]
(https://qiita.com/white_aspara25/items/c1b9d02310b4731bfbaa)

17
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?