個人開発をしているDockerで構築したRails APIをRenderへデプロイしたのでその時のメモ書き。
データベースを作成

まずはデータベースの作成から。
まずはダッシュボードに移動して、PostgreSQLを選択。

以下の項目を入力
- Name
- Database
- User
- Region
- PostgreSQL Version
- Instance Type
入力したら『Create Dabase』をクリック。


しばらくするとデータベースが作成される。
そうすると、以下のようにデータベースの情報が表示される。
Internal Database URLはあとで使うので、どっかにコピペしておく。

Web Serviceを作成する

次にWeb Serviceを作成する。
ダッシュボードから『Web Service』をクリック。

RenderへデプロイしたいRepositoryをConnectする

次にアプリケーションの情報を入力していく。
絶対に入力しないといけないのは
- Name(アプリの名前)
- Region(サーバーが置かれている地域)
- Branch(どのブランチのアプリを実行するか)
- Runtime(どの環境でアプリを動かすか0
- Instance Type(使用するインスタンスのタイプ)
- Environment Variables(環境変数)
- DockerfilePath(Dockerfileが置かれているパス)
くらいだと思う。
Nameはご自身のアプリの名前をご自由に。
RegionはSingaporeが1番近いので『Singapore』が良いと思う。
Branchもご自由に。
僕はdevelopブランチのものをデプロイしたいので、『develop』を選択した。
Runtimeは、Dockerで構築したアプリをデプロイするので、Runtimeの箇所で『Docker』を選択。

インスタンスタイプは『Free』を選択。

環境変数は先ほど作成したPostgreSQLのInternal Database URLを設定する。
DATABASE_URLという環境変数名にして、valueに『Internal Database URL』を入力する。
そして『Dockerfileを置いているパス』をDockerfile Pathに入力。

最後に『Create Web Service』をクリック。
これでRenderにアプリケーションがデプロイされる。

ちなみに僕のディレクトリ構成はこんな感じ。
dockerディレクトリにdeployというディレクトリを切り、その中でstaging用とproduction用を作ってそれぞれDockerfileとentrypoint.shを置いている。

Dockerfileはこんな感じ。
FROM ruby:3.1.3
ENV APP_ROOT /myapp
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT
COPY docker/deploy/staging/entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
COPY Gemfile $APP_ROOT/Gemfile
COPY Gemfile.lock $APP_ROOT/Gemfile.lock
RUN apt-get update -qq \
&& apt-get install -y build-essential libpq-dev \
&& bundle config set --local without 'development test' \
&& bundle install
COPY . $APP_ROOT
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 8080
entrypoint.shはこんな感じ。
#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapp/tmp/pids/server.pid bundle exec rails db:migrate bundle exec rails db:seed_fu # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"
以上で終わり。
今回の設定をコード化したい場合は、こちらの記事を参考にやってみてください。



