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をちゃんと作る。