個人開発をしている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 "$@"
以上で終わり。
今回の設定をコード化したい場合は、こちらの記事を参考にやってみてください。