Dockerで構築したRails APIをRenderへデプロイする | Tomoyuki Kato's Blog

Dockerで構築したRails APIをRenderへデプロイする

Engineering
この記事を書いた人

PharmaXというオンライン薬局のスタートアップで薬剤師・エンジニアとして働いています。Rails・React・TypeScriptなどを書きます。英語が得意でTOEIC900点・通訳案内士資格取得。主に薬剤師の働き方やプログラミング、英語学習について書きます。当サイトではアフィリエイトプログラムを利用して商品を紹介しています。
>> 詳しいプロフィール

Tomoyuki Katoをフォローする

 

個人開発をしている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 "$@"

 

以上で終わり。

 

今回の設定をコード化したい場合は、こちらの記事を参考にやってみてください。

RenderにデプロイしたRails APIをIaC化する
個人開発で作っているRails APIをRender.comにデプロイしているのだが、Renderでの設定をコード化したのでその時のメモ。 RenderではBlueprintと呼ばれるIaCするための機能を無料で使うことができ
タイトルとURLをコピーしました