困りごと
DockerでRails環境を構築してそのイメージで開発・本番環境を運用している。
DBはRDSのmysqlを使用している。
database.ymlに平文でDBのユーザー、PASSを書くのはまずいので、DockerFileに環境変数としてユーザとPASSを記載して、gitにあげないようにしていた。
だけど、DockerFileの修正等が入ると、本番環境のDockerFileも修正しないといけないのでめんどくさい。
チームで開発するなら、DockerFileもgitにあげて置きたい。
解決策
credentials.yml.encを使う。
awsのアクセスキー等をこちらで管理していたので、同じように機密情報はこちらで管理してみよう。
credentials.yml.enc
aws:
access_key_id: AAAA
secret_access_key: BBBB
# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 1111111111aaaaaa...
db_user xxxxx
db_pass yyyyy
database.yml
production:
<<: *default
adapter: mysql2
encoding: utf8
database: db_name
username: <%= Rails.application.credentials[:db_user] %>
password: <%= Rails.application.credentials[:db_pass] %>
host: ABCDEFG
credentialsの中身をとるには以下
Rails.application.credentials[:db_user]
Rails.application.credentials[:db_pass]
まとめ
これでDockerFileをgitにあげても、DB情報がバレずにすみます。
環境ごとにDockerFileをさわるのは、環境がずれたりなにより、めんどくさい。
CI/CDも可能になるので挑戦してみたいです。