はじめに
S3の導入でシークレットキーをcredentials.yml.enc(以下、credentials)で管理する手順の備忘録。
主にはcredentialsとmaster.keyを本番環境で使う為のまとめになると思います。
APIkeyも一度設定してしまえば、credentialsに書き込むだけで、出来るので参考になればと思います。
開発環境
ポートフォリオサイトにて作業しています。
開発環境はそちらに書いてあるので、参照してください。
現状
carrierwaveの設定から画像のアップロードを出来るところまでやっていきます。
S3のバケットは作成済みです。他の記事を参考にしてください。
cledentialsへキーを書き込む
$ EDITOR=vim bin/rails credentials:edit
を打つとvimでの編集が可能です。
# aws:
# access_key_id: 123
# secret_access_key: 345
最初開くとこのように表示がされていると思います。
secrets.yml+bash_profileでの管理の時はaccess_key_idとsecret_access_keyは別々に記入していましたが、上記のような書き方をすることでまとめて書くことが出来るようになっています。
#が付いているのはコメントアウトされているので、書き直すかコメントアウトを消して、任意の値を記入します。
記述が終了したら、コンソールで確認してみます。
$ rails c
Running via Spring preloader in process 67060
Loading development environment (Rails 5.2.3)
[1] pry(main)> Rails.application.credentials.aws[:access_key_id]
=> "先程入力した値"
これで表示されていればひとまず成功です。
carrierwaveでの設定
Rails.application.secrets.aws_access_key_id
↓
Rails.application.credentials.aws[:access_key_id]
secrets.ymlでは上の表記になっていると思いますが、credentialsでは下のような記述にします。
master.keyを本番環境で使える様にする
master.keyはデフォルトで.gitignoreに登録されている為、本番環境に存在しないので持っていく必要があります。
$ scp -i .ssh/example.pem AppName/config/master.yml ec2-user@xx.xxx.xxx.xx:/var/www/AppName/shared/config/
別の記事を参考にやりましたが、うまくいきません。/shared/config/のディレクトリーがないと言われたので、mkdirで作り、touchでmaster.keyを作り行けました。
:linked_filesにmaster.keyも入れておきます。私はこれの記述を忘れて、エラーが出て時間を食いました。
これについて調べましたが、いまいち理解が深くないので、ここでは割愛します。わかる方がいましたら教えて頂けると助かります、、、。
set :linked_files, fetch(:linked_files, []).push("config/master.key")
以上で、デプロイが完了したら投稿してみてください。私は以上の手順でうまくアップロード出来ました。
まとめ
備忘録なので細かい設定の部分は省略しました。
このあたりのデプロイ関係は私が他記事にてまとめているので、見てみてください。
どなたかの参考になれば幸いです。