LoginSignup
0
0

More than 3 years have passed since last update.

Rails5.2から導入されたcredentials.yml.encの使い方

Posted at

Rails5.2では新規アプリを作成した時にconfig/secrets.ymlが生成されず
代わりにconfig/credentials.yml.encが生成されるようになったみたいです。

既に本番環境などでRailsの古いバージョンで運用していてRails5.2にアップグレードする場合は
config/secrets.ymlではなく、config/credentials.yml.encの仕組みが使われるみたいです。

Rails5.2までは従来のconfig/secrets.ymlを使用するやり方などもあるみたいですが
Rails6アップグレードのことも考えconfig/credentials.yml.encを導入してみましたので
忘備録のために投稿します。

1. credentials.yml.encとmaster.keyの生成と設定

credentials.yml.encは直接エディタから編集する事はできないので、ターミナルでエディタを指定して作成、編集する。

$ EDITOR=vim bundle exec credentials:edit

ちなみに、.bash_profileなどに以下のように設定しておけば、EDITOR="vim"の指定は不要になります。

~/.bash_profile
$ echo 'export EDITOR="vim"' >> ~/.bash_profile
$ source ~/.bash_profile

$ bundle exec credentials:edit

上記のコマンドを実行すると、config/credentials.yml.encとconfig/master.keyが生成される。
config/master.keyはgitで管理しないため必ず.gitignoreに追加する。

.gitignore

# Ignore master key for decrypting credentials and more.
/config/master.key

生成されたconfig/credentials.yml.encを以下のように修正する。

config/credentials.yml.enc

# aws:
#   access_key_id: 123
#   secret_access_key: 345

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base:
  • 今回はsecret_keyだけ設定する。AWSの設定は既存のままいくのでコメントアウトのまま
  • 上記の画面にawsのaccess_key_idやsecret_access_key、その他APIキーなどを入力すれば暗号化されて保存される
  • 環境変数など使用せず、直接入力して問題ない
  • シングルクオーテーションやダブルクオーテーションは不要

本番環境ではcredentialを使うので config/environments/production.rb で次の変数にtrueをセットする

config/environments/production.rb

config.require_master_key = true

2.Capistranoによる自動デプロイ

本番環境のshared/configにmaster.keyを配置しないとデプロイできない。
本番環境のサーバーにscpコマンドなどで、config/master.keyを転送する。

$ scp -i ~/.ssh/example.pem config/master.key ec2-user@x.x.x.x:/var/www/AppName/shared/config/master.key

ex. /var/www/AppName/shared/config/master.key

もしくは、本番環境サーバーのbashファイルにRAILS_MASTER_KEY環境変数を設定する。
Capistranoは.bash_profileに書いても読み込まれないので、~/.bashrcに記載する必要がある。
config/master.keyをRAILS_MASTER_KEYとしてexportします。つまり、.bashrcに以下のように設定する。

~/.bashrc
export RAILS_MASTER_KEY='XXXXXXXXXXXXXXXXXXX'

次に、config/deploy.rbでデプロイ時の設定ファイルにシンボリックリンクを指定する。

set :linked_files, fetch(:linked_files, []).push('config/master.key')

3.Capistranoを使ってデプロイできれば完了。

$ bundle exec cap production deploy
0
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
0
0