11
9

Render.comにDockerで開発したRailsアプリをデプロイする方法

Posted at

・dockerで開発したアプリをrenderで公開したい
・rails + PostgreSQLでアプリを公開したい
・でも、どうすればいいかわからない

という人向けに記事です。

僕自身、Railsアプリを公開したのですが、1日以上かかって大変な思いをしました。
とはいえ、終わってみると「イッシュンデデキルヤン」ってなってるので、皆さんに共有しておきます。

※Render.comのアカウントは作成している前提です。

Dockerfile,compose.yaml,entrypoint.shの修正

こちらは各自によって違うので参考にならないかもしれない。
だが一応載せておくことにする。

はっきり言って、以下の記事をめちゃめちゃ参考にしているので以下の記事を読んでほしい↓

僕はmariaDBでデータベースを使っていたので、PostgreSQLに移行するのが難しかった。
まぁ、僕と同じ環境なら以下のコードコピペでも動くかもだけど...

Dockerfile
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs vim
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
COPY . .
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD [ "rails","server","-b","0.0.0.0" ]
compose.yaml
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_volume:/var/lib/postgresql/data
    restart: always
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    restart: always
    tty: true
    stdin_open: true
    depends_on:
      - db
volumes:
  postgres_volume:

entrypoint.shはDockerfileと同じディレクトリ上に書くといい

entrypoint.sh
#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean
bundle exec rake db:migrate

exec "$@"

とまぁこんな感じで書けばOKだと思う。(僕の環境とは違うからエラーになるかもだけど、ちょこちょこカスタマイズするんだぞ!!)

デプロイ方法2STEP

まずはPostgreSQLを作成する

正直以下の記事の方が写真付きでわかりやすいので、PostgreSQLとWeb Serviceを作ったら帰ってきてください笑↓

以下に簡単に作成方法を書いておきます
1, NewのボタンからPostgreSQLを作成する。
2, 以下の項目を入力する

  • Name
  • Database
  • User
  • Region
  • PostgreSQL Version

3, Create Databaseボタンをクリック
4, Internal Database URLをコピーしておく

次にWeb Serviceを作る

これも、以下の記事見た方がいいよ↓
https://ph-1ab.com/render-deploy-with-own-domain/#toc1

1, NewのボタンからWeb Serviceを選択する
2, 作成したいリポジトリを選ぶ
3, 以下の項目を入力する

  • Name
  • Region
  • Branch
  • Runtime
  • Environment Variables
    ここで、環境変数(左側)をDATABASE_URLにして先ほどコピーしたInternal Database URLを貼り付ける。
  • DockerfilePath

4, Create Serviceをクリックする
デプロイ完了!!(エラーが起きたら、ログやメッセージを見て修正していく)

僕が陥ったエラーへの対処法

ホスト先が認められずエラー

Block hosts: (ホスト名)
こんなエラーメッセージがデカデカと出たら、以下のコードを追加して解決しよう。
config/application.rbに以下のコードを追加

config/application.rb
class Application < Rails::Application
    ...
    config.hosts << "(リンク先)" # 追加
    ...
end

(リンク先)には「https:// 」は必要ないです。

まとめ

いや〜意外と簡単でしたか?
僕は1日以上かかったので、大変でした。

なぜデプロイするのか皆さんの事情はわからないですが、この記事がお役に立てれば幸いです!

参考になった記事(ありがとうございました)
ファイル関係のコード↓

Render.comにデプロイする方法(写真付きでわかりやすかったです)↓

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9