・dockerで開発したアプリをrenderで公開したい
・rails + PostgreSQLでアプリを公開したい
・でも、どうすればいいかわからない
という人向けに記事です。
僕自身、Railsアプリを公開したのですが、1日以上かかって大変な思いをしました。
とはいえ、終わってみると「イッシュンデデキルヤン」ってなってるので、皆さんに共有しておきます。
※Render.comのアカウントは作成している前提です。
Dockerfile,compose.yaml,entrypoint.shの修正
こちらは各自によって違うので参考にならないかもしれない。
だが一応載せておくことにする。
はっきり言って、以下の記事をめちゃめちゃ参考にしているので以下の記事を読んでほしい↓
僕はmariaDBでデータベースを使っていたので、PostgreSQLに移行するのが難しかった。
まぁ、僕と同じ環境なら以下のコードコピペでも動くかもだけど...
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" ]
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と同じディレクトリ上に書くといい
#!/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に以下のコードを追加
class Application < Rails::Application
...
config.hosts << "(リンク先)" # 追加
...
end
(リンク先)には「https:// 」は必要ないです。
まとめ
いや〜意外と簡単でしたか?
僕は1日以上かかったので、大変でした。
なぜデプロイするのか皆さんの事情はわからないですが、この記事がお役に立てれば幸いです!
参考になった記事(ありがとうございました)
ファイル関係のコード↓
Render.comにデプロイする方法(写真付きでわかりやすかったです)↓