あるソフトウェアエンジニアの開発ブログ

ソフトウェアエンジニアリングを中心につらつらと書く

EC2にDockerでElixir-Phoenixをデプロイする

EC2にDockerを使ってデータを表示するPhoenixアプリをデプロイする。

Phoenixのconfig設定

Producrion用のconfigを書き換える。
ポート4000にロードし、nginxでリバースプロシキさせる。
config/prod.exsが以下。

config :stock_scraping, StockScraping.Endpoint,
  http: [port: 4000],
  url: [host: "example.com", port: 4000]

Dockerfile作成

Phoenixを起動するDockerfileを作成する。
さっそく中身。

FROM elixir
MAINTAINER yuki-toida

RUN apt-get update

# hex
RUN mix local.hex --force && \
    mix local.rebar --force && \
    mix hex.info

# phoenix
RUN mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez

# node npm
RUN apt-get install -y nodejs npm
RUN npm cache clean && npm install n -g
RUN n stable && ln -sf /usr/local/bin/node /usr/bin/node
RUN apt-get purge -y nodejs npm

# inotify-tools
RUN apt-get install -y inotify-tools

EXPOSE 4000

# git repository
RUN git clone https://github.com/yuki-toida/stock_scraping.git root/stock_scraping
WORKDIR /root/stock_scraping
RUN chmod +x run.sh
ENTRYPOINT ["./run.sh"]
CMD ["dev"]

Elixirの公式イメージを使って公式サイトの手順でPhoenixをインストール。
node.jsとnpmをインストールし、古いパッケージをパージ。
エントリーポイントをrun.shとする。以下。

#!/bin/bash

git reset --hard HEAD
git pull origin master

mix deps.get

npm install

MIX_ENV=$1 mix compile
MIX_ENV=$1 mix phoenix.server

環境変数にprodを設定すると、mix compileが必須になるのがポイント。

EC2にログインしDockerイメージをプルする

docker pull yukitoida/stock_scraping

Dockerコンテナを起動させる

docker run --net="host" yukitoida/stock_scraping prod

これでlocalhost:4000にPhoenixアプリがロードされてるはず。
前回、nginxの設定は終わってるので、リバースプロシキされるはず。
実際のURLがこちら。株カレンダー
なんというクソUI、気が向いたらUIをちゃんと作る。