LoginSignup
1
0

More than 1 year has passed since last update.

【Rails, Docker, Postgresql, Production】本番環境で起動させる

Last updated at Posted at 2021-07-28

目標

本番環境(production)でdockerを用いてrailsを動かす

実行内容

  • docker-compose.prd.ymlの作成
  • database.ymlの変更
  • DBの作成
  • アセットのプリコンパイル
  • ビルド、起動

1. docker-compose.prd.ymlの作成

docker-compose.prd.yml
version: '3'
services:
  db:
    image: postgres
    environment: 
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_HOST_AUTH_METHOD: 'trust' #実際にデプロイする場合は使わない
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    environment:
      RAILS_ENV: production  #これを追加する。
    volumes:
      - .:/app
      - gem_data:/usr/local/bundle
    ports:
      - "3000:3000"
    depends_on:
      - db
volumes:
  gem_data:

development環境で動かしていたdocker-compose.ymlとは別で、docker-compose.prd.ymlを作成しwebのenvironmentにはRAILS_ENV=productionを指定する。
また、productionとtestではdatabase.ymlのhost: dbを指定することができるがproductionではできないためとりあえずPOSTGRES_HOST_AUTH_METHOD: 'trust'を設定する。デプロイする際には環境変数を使って設定する。

2. database.ymlの変更

database.yml
production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5
  database: app_production
  username: postgres
  password: postgres

username, passwordにはdocker-compose.prd.ymlのPOSTGRES_USER,POSTGRES_PASSWORDの値を設定する。(デプロイの際は環境変数を用いる)hostはdocker-compose.prd.ymlでPOSTGRES_HOST_AUTH_METHOD: 'trust'を設定しているため特に設定しない。

3. DBの作成

docker-compose -f docker-compose.prd.yml run web rails db:create RAILS_ENV=production

-f docker-compose.prd.ymlをつけ忘れないように気を付ける。

docker-compose -f docker-compose.prd.yml run web rails db:migrate RAILS_ENV=production

4. アセットのプリコンパイル

docker-compose run web rails assets:precompile RAILS_ENV=production

本番環境の場合、アセットのプリコンパイルをしておかないと起動しない。

5. ビルドして起動

docker-compose -f docker-compose.prd.yml build
docker-compose -f docker-compose.prd.yml up

補足

development環境では読み込まれていた画像が表示されなかったりcssが適用されない,httpのメソッドがDELETEで指定しているのにGETでアクセスされているなどがあった場合 config/environments/production.rbで次のように変更する。

production.rb
config.public_file_server.enabled = true

参考にしたサイト

 Dockerでコンテナ化したrailsアプリをproductionモードで起動する

 【初めての環境構築】Windows10にRails6+MySQL8.0+Dockerな環境を作ってみた

まとめ

改善点や間違っているところがあればぜひ意見をお願いします!

1
0
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
1
0