個人開発で作っているRails APIをRender.comにデプロイしているのだが、Renderでの設定をコード化したのでその時のメモ。
RenderではBlueprintと呼ばれるIaCするための機能を無料で使うことができる。
どのようにやるかというと、render.yamlというファイルに設定を記述して、それをデプロイするだけ。
ではさっそくIaC化していく。
*TerraformでのIaCもできないことはないが、オフィシャルなプロバイダーが2023年3月時点ではないようなので、素直にBlueprintを使ってIaCした方が良さそうです
Dockerで構築したRails APIをIaCする
まずはDockerを使っている場合のIaCについて。(Dockerを使っていない場合はこの項目は飛ばしてください)
1:render.yamlファイルをapp直下に作成する
まずapp直下にrender.yamlファイルを作る。
ここで注意したいのが、render.ymlではなく、『render.yaml』というファイル名にする必要があるということだ。
僕はrender.ymlだと設定が反映されないことにめちゃくちゃ時間がかかったので気をつけて。
render.yamlファイルを作成したら、↓みたいな感じで設定を記述する。
databases: - name: xxxxxx_db databaseName: xxxxxx_postgresql user: xxxxxx_service region: singapore plan: free services: - type: web name: xxxxxx_service env: docker region: singapore branch: develop plan: free dockerfilePath: ./docker/deploy/staging/Dockerfile domains: # 独自ドメインを使う場合は設定する - xxxx.com envVars: - key: DATABASE_URL fromDatabase: name: xxxxxx_db property: connectionString - key: CORS_ORIGINS # フロントエンドバックエンドでオリジンが異なる場合は設定する
pushする
git add git commit -m "create render.yaml" git push origin develop
これでデプロイできていればOK。
正常に動かない場合は、
- Dockerfile
- Dockerfileのpath
あたりがおかしい可能性が高いので、そこらへんを重点的にチェックすると良いかも。
僕が書いたDockerfileは↓の記事に貼ってあるので、もしよければ参考にしてください。
Dockerを使っていないRails APIをIaCする
次にDockerを使っていない場合IaCについて。
1:render-build.shを作成する
binディレクトリ配下に、render-build.shファイルを作成する。
このファイルはrenderにデプロイしたとき、特定のコマンドを実行してくれる。
僕はRailsをAPIとして使っているので、render-build.shの中身はこんな感じで書いている。
#!/usr/bin/env bash # exit on error set -o errexit bundle install bundle exec rails db:migrate bundle exec rails db:seed_fu
2:render.yamlファイルをapp直下に作成する
次にapp直下にrender.yamlファイルを作る。
ここで注意したいのが、render.ymlではなく、『render.yaml』というファイル名にする必要があるということだ。
僕はrender.ymlだと設定が反映されないことにめちゃくちゃ時間がかかったので気をつけて。
render.yamlファイルを作成したら、↓のように設定を記述する。
databases: - name: xxxxxx_db databaseName: xxxxxx_postgreql user: xxxxxx_service region: singapore services: - type: web name: xxxxxx_service env: ruby region: singapore plan: free buildCommand: "./bin/render-build.sh" startCommand: "bundle exec puma -C config/puma.rb" envVars: - key: DATABASE_URL fromDatabase: name: xxxxxx_db property: connectionString - key: RAILS_MASTER_KEY sync: false
pushする
git add git commit -m "create render.yaml" git push origin main
これでデプロイできていればOK。
デプロイがうまくできない場合は、
- 環境変数のRAILS_MASTER_KEYがない
- database.ymlの設定が間違っている
- production.rbの設定が間違っている
- puma.rbの設定が間違っている
らへんがおかしい可能性が高いので、以下のURLを参考に設定をしてみてください。
おしまい。