LoginSignup
7
12

More than 3 years have passed since last update.

RailsをProductionで起動するとき、「credentials.yml.enc」を使用しない方法[Rails 5.2]

Last updated at Posted at 2018-11-13

背景

Productionモードで起動するときにはconfig/credentials.yml.encの中身を復号して環境変数”SECRET_KEY_BASE”として使用するけど、”SECRET_KEY_BASE”ってRailsで暗号化とかするときのキーとして使用されるからそもそもconfig/credentials.yml.encってコミットしたくなくね?って話。
バージョン管理に登録する/しないは別の議論にするとして、config/credentials.yml.encを使用しないで起動する方法を試してみることにした。

前提

  • Docker上でRailsが起動している(ローカルで起動している方は読み替えてください)
  • ローカルPCで動作させる
  • 1度credentials.yml.encを生成している("rails credentials:edit"実行済み)

手順

config/credentials.yml.encを削除する

以下のファイルを削除する

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

環境変数にSECRET_KEY_BASEを追加する

今回はDocker上でRailsを起動させているため、docker-compose.ymlに環境変数を追加する

docker-compose.yml
version: '3'
services:


  web:
    environment:
      SECRET_KEY_BASE: ${SECRET_KEY_BASE}


ここでハッシュ値を書くと秘匿情報が丸見えで意味がないため、外部ファイルから設定する
${SECRET_KEY_BASE}の部分について、docker-compose.ymlの階層(基本はRailsのルートディレクトリ)と同じ階層に".env"ファイルを配置しておくと、そこに記載されている変数に設定された値を設定してくれる

.env
# docker-compose.ymlの${}と同じ変数名にすること
SECRET_KEY_BASE=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

これにより秘匿情報をコミットすることはなくなる(ただし、.envファイルは別の管理方法で管理することになる)

master_keyを使用しないようconfigを定義する

master_keyを使用する/しないの設定項目があるので、「使用しない」を定義しておく
定義されていない場合は定義する。trueが定義されている場合はfalseにする。

config/environments/production.rb
config.require_master_key = false

RailsをProductionモードで起動する

「config/credentials.yml.enc」が存在しない状態でProductionモードでの起動ができればOK

最後に

環境変数にハッシュ値が設定されているだけで良いのはびっくりした。が、特に難しいこともなくできることがわかった
実は"SECRET_KEY_BASE"はハッシュ値であればなんでも起動できたりする(なにかのファイルをmd5コマンドでハッシュ値を出したものでも)

7
12
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
7
12