LoginSignup
1
0

【Rails + Docker】Render.comでMulti Environment Credentialsに対応する

Posted at

はじめに

Render.comでなにも考えずデプロイしたら、development環境でデプロイされてしまいました。
production環境でデプロイしたくて試行錯誤したのでその方法と詰まった点を簡単にまとめてみました。
Render.comに環境変数を追加するために今までdashboardから追加していました。
.envで環境変数を管理することも考えましたが、チーム開発の際の障害が大きすぎるのでcredentials.yml.encでの管理を考えました。

Multi Environment Credentialsとは

credentialsはrails5.2からサポートされ始めた機能です。
機密情報を暗号化し、安全に保護するためのものです。
Credentialsを使えば、復号化キーを紛失、もしくは盗難にあわない限り、機密情報を保護することができます。
rails6よりMulti Environment Credentials機能が追加され、環境毎に秘匿情報を設定できるようになりました。

実際に設定する

最終的なcredentials.yml.enc周りのファイル構成はこのようになる予定です。

.
│
└─config
  │  credentials.yml.enc
  │  master.key
  │
  └─credentials
     production.key
     production.yml.enc

rails newを行ったときにconfig/credentials.yml.encが作成されると思います。
今回はこちらを開発、test環境ように使用します。

production環境用のcredentials.yml.encを作成する

EDITOR="vim" rails credentials:edit --environment production

これで以下のファイルが作成されます。

  • config/credentials/production.yml.enc
  • config/credentials/production.key

production.yml.encsecret_key_baseを設定する

rails newで作成されたconfig/credentials.yml.encにはsecret_key_baseの値が自動挿入されます。
Multi Environment Credentialsで作成されたファイルにはその値が記載されていません。

そのため、手動で設定する必要があります。
以下のコマンドでsecret_key_baseを生成します。

rails secret

上記のコマンドで生成されたキーを先ほど作成したconfig/credentials/production.yml.encに記載します。

EDITOR="vim" rails credentials:edit --environment production
secret_key_base: <生成されたキー>

設定しなければ以下のエラーが出ます。

rails aborted!

PMArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit`

Render.comのDashBoardから環境変数を設定

production環境でデプロイするための環境変数を設定します。
設定する環境変数は以下です。

  • RAILS_ENV: production
  • RAILS_MASTER_KEY: *****
    この時のRAILS_MASTER_KEYproduction.keyの値を設定します。

これで完了です。
正常にデプロイされれば成功です。

注意したいこと

  • config/credentials/production.yml.encconfig/credentials.yml.encの内容をマージするわけではない
  • config/credentials.yml.encのsecret_base_keyはconfig/credentials/production.yml.encに追記する必要があること

config/credentials/production.yml.encconfig/credentials.yml.encの内容をマージするわけではない」については以下の例で説明します。

config/credentials.yml.enc
setting_1: abcdefg12345
setting_2: hijklmn67890
config/credentials/production.yml.enc
setting_1: hellohello

ファイルの中身がこのようになっている場合、production環境では

Rails.application.credentials.setting_1
=>"hellohello"

Rails.application.credentials.setting_2
=>nil

となります。
読み込まれるのはconfig/credentials/production.yml.encだけです。
この2点を知らずにconfig/credentials.yml.encsecret_base_keyが読まれると思い込み右往左往しました。

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