今回はsecret_key_baseと環境変数の設定方法について解説したいと思います。聞き慣れない用語が早速2つ登場しましたが、今回を機に理解を深めていきましょう。
この記事は前回の続きとなっています。
↓前回の記事はこちら

環境変数とは
環境変数とは、Githubにアップロードすることができない情報を入れておく箱のようなものです。データベースパスワードや外部サービスのパスワードなどを環境変数として設定します。
環境変数に設定した値は、ENV[‘<環境変数名>’]という記述で呼び出すことができます。
試しにconfig/secrets.ymlを見てみると、<%= ENV[“SECRET_KEY_BASE”] %>という記述がされていると思います。この記述により、環境変数に設定したsecret_key_baseという値を呼び出すことができます。
↓ config/secrets.yml
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
secret_key_baseとは
secret_key_baseとは、Cookieの暗号化に用いられる文字列です。万一これが流出してしまうと、なりすましをされてしまう可能性があるので注意しましょう。
設定方法
では実際に環境変数の設定を行っていきます。
まずはsecret_key_baseを生成しましょう。
↓ ターミナル(EC2)
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ rake secret
69619d9a75b78f2e1c87ec5e07541b42f23efeb6a54e97da3723de06fe74af29d5718adff77d2b04b2805d3a1e143fa61baacfbf4ca2c6fcc608cff8d5a28e8d
続いて、EC2インスタンスに環境変数を設定していきます。環境変数は /etc/environment というファイルに保存することで、サーバ全体に適用されます。
↓ ターミナル(EC2)
[ec2-user@ip-172-31-23-189 ~]$ sudo vim /etc/environment
以下のような画面が表示されたら、正常に/etc/environmentが開かれたことになります。

「i」を打ち込んで入力モードに切り替えましょう。入力モードに切り替わったら、以下をのようにDATABASE_PASSWORDとSECRET_KEY_BASEを記述します。
↓ /etc/environment
DATABASE_PASSWORD='MySQLのrootユーザーのパスワード'
SECRET_KEY_BASE='先程コピーしたsecret_key_base'
「=」の前後にはスペースを空けないように注意しましょう。
↓MySQLのパスワード設定はこちら

記述が完了したら「esc(エスケープキー)→:wq」と入力して内容を保存します。

保存後、環境変数を適用するために一旦ログアウトし、再度ログインしましょう。
↓ ターミナル(EC2)
[ec2-user@ip-172-31-23-189 ~]$ exit
↓ ターミナル(ローカル)
$ ssh -i [ダウンロードした鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]
環境変数がきちんと設定されているか確認します。先ほど設定したSECRET_KEY_BASEとDATABASE_PASSWORDがきちんと表示されれば完了です、お疲れ様でした。
↓ ターミナル(EC2)
[ec2-user@ip-172-31-23-189 ~]$ env | grep SECRET_KEY_BASE
> 設定したsecret_key_baseが表示
[ec2-user@ip-172-31-23-189 ~]$ env | grep DATABASE_PASSWORD
> 設定したdatabase_passwordが表示
envコマンドは環境変数を設定してプログラムを実行するコマンドで、grepコマンドはファイルの中にある文字列を検索するために用いられるコマンドです。
まとめ
- 環境変数とは、Githubにアップロードすることができない情報を入れておく箱のようなもの
- 環境変数に設定した値は、ENV[‘<環境変数名>’]という記述で呼び出すことができる
- secret_key_baseとは、Cookieの暗号化に用いられる文字列のこと
今回はsecret_key_baseと環境変数の設定方法について解説しました。これらの設定はセキュリティを守る上で非常に重要なので、しっかり行っていきましょう。