Capistrano でデプロイ先のホスト名やポート番号、鍵の場所などを隠したい場合

注意

特別なことは全くしていません。そして Capistrano に限った話でもないです。

結論

dotenv を用いる。

詳細

1. dotenv をインストールする

普通に bundle install しましょう。

2. dotenv を require する

Rails だと不要ですが*1.env ファイルの内容を用いるために、dotenvrequire する必要があります。Capfile の中で require 'dotenv/load' と書いて require しましょう。

3. .env ファイルを作る

デプロイ先のホスト名やポート番号、鍵の場所などを書いた .env ファイルを作りましょう。例としては以下のような感じです。

CAP_HOST="123.123.123.123"
CAP_PORT="22"
CAP_USER="foobar"
CAP_KEY="/path/to/key"

4. デプロイ設定ファイル内で呼び出す

.env に書いた値は ENV['CAP_HOST'] のようにして呼び出せます。あとはそれをデプロイ設定ファイルに埋め込んでいけばハードコーディングを避けることができて隠すことができます。

例えば以下のような感じになります。

server ENV['CAP_HOST'], user: ENV['CAP_USER'], roles: %w{web}, ssh_options: { keys: File.expand_path(ENV['CAP_KEY']), port: ENV['CAP_PORT'] }

注意

  • .env.gitignore に書いておきましょう
  • Capistrano のサンプルコードで現れる %w() という記法だと変数の展開がなされないため、%W() に置き換えて、#{[ENV['CAP_HOST']} のようにしましょう*2

*1:ただし dotenv-rails の方を入れる必要がある

*2:あるいは愚直に [] を用いて配列に入れるか

Powered by はてなブログ