render is 何
renderはGitHub、GitLabのリポジトリからデプロイできるPaaSです。
今回はPhoenixアプリをデプロイしたいのでWeb Serviceを作成しますが、
他にStatic Site(Reactなど)、Background Workers(Celery、Sidekiqなど)、Cron Jobs、
DBはPostgreSQL、Redisが作成できます。
Freeプランがあるので、今回はそちらを使っていきます。
Phoenixアプリを作成する
今回は公式ドキュメントに合わせてDB無しのPhoenixアプリを作成します。
ドキュメントがPhoenix1.6に対応していないようなので、少しアレンジしていきます。
Phoenixアプリの作成
$ mix phx.new phoenix_hello --no-ecto
configファイルを編集する
config :phoenix_hello, PhoenixHelloWeb.Endpoint,
url: [host: System.get_env("RENDER_EXTERNAL_HOSTNAME") || "localhost", port: 80], # <- 追記
cache_static_manifest: "priv/static/cache_manifest.json"
# if をコメントアウト
# if System.get_env("PHX_SERVER") do
config :phoenix_hello, PhoenixHelloWeb.Endpoint, server: true
# end
〜 略 〜
# host = System.get_env("PHX_HOST") || "example.com"
# 今回はrender側で発行されるドメインを使うので、こちらの環境変数を使う
host = System.get_env("RENDER_EXTERNAL_HOSTNAME") || "exsample.com"
※Phoenix v1.6で、config/prod.secret.exs
や config/release.exs
は、 config/runtime.exs
に変わりました。
build.shスクリプトを追加
renderはインスタンス起動時にビルドコマンドが指定できます。
そのため、build.shスクリプトをルートディレクトリに新規作成します。
#!/usr/bin/env bash
# exit on error
set -o errexit
# Initial setup
mix deps.get --only prod
MIX_ENV=prod mix compile
# Compile assets
MIX_ENV=prod mix assets.deploy
# Build the release and overwrite the existing release directory
MIX_ENV=prod mix release --overwrite
configファイルの更新とbuild.shの追加ができたら、GitHubにリポジトリを作成し、git pushしましょう。
renderにデプロイ
アカウント作成
GET STARTEDボタンからサインアップしましょう。
Webサービスの作成
ダッシュボードに移動したら、今回はPhoenixを使うためWebサービスを作成しましょう。
GitHubと接続する
GitHubのデプロイしたいリポジトリを選択しましょう。
Webサービスの設定(新規作成)
作成するWebサービスの設定をしていきます。
Environment、Build Command、Start Commandを指定する
Name : 任意の名前
Environment : Elixir
Region : 任意
Branch : 任意
Build Command : ./build.sh
Start Command : _build/prod/rel/phoenix_hello/bin/phoenix_hello start
プランの指定
プランは今回はFreeプランを使用します。
環境変数の指定
環境変数を追加します。Advancedをクリックすると入力フォームが表示されます。
ELIXIR_VERSION : 1.13.4
SECRET_KEY_BASE : ローカルでmix phx.gen.secret
を実行した結果を指定する
Elixirのバージョン指定が無い場合は古いバージョンで実行されるので、バージョン指定は必ず行いましょう。
Create Web Service
Create Web Serviceボタンをクリック。
デプロイが実行されます。5〜10分くらいかかります。
デプロイが終わったら
デプロイが終わったら、ステータスが「Live」に変わります。
ウェブサービス名の下にリンクにアクセスし、反映されたか確認してみましょう。
やったね!デプロイされました
最後に
mix compile
やmix release
を使ったビルドスクリプトをユーザーに用意させるPaaSは初めて見たので面白かったです。
renderは、PRレビュー環境などHerokuにあるような便利な機能があるので、今度も調べていきたいです