Capistranoでデプロイするためのキー設定を行います。ここではgithubのリポジトリへDeployKeyを設定しない方法を紹介しています。デプロイ先のサーバー台数が増えてきた場合はサーバー個別にキー設定をするのは面倒なので、この方法が良いと思います。
この記事で使用しているCapistranoのバージョンは3.15.0です。
1. 自分のマシンのssh鍵を作成する
下記のコマンドを実行します。
$ ssh-keygen -t rsa
パスフレーズはセットしません。
これにより、~/.sshにid_rsaとid_rsa.pubが作られます。
id_rsaが秘密鍵、id_rsa.pubが公開鍵です。
2. 自分のマシンの「公開鍵」をgithubに登録する
作成したid_rsa.pubをgithubに登録し、ローカルからgithubへsshでアクセスできるようにします。設定方法は下記のgithubのドキュメントを参考にしてください。
3. githubにセットした公開鍵に対する秘密鍵を指定する
下記のコマンドを実行して、ssh-agentを起動し、秘密鍵のパスを指定します。
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
毎回入力するのは面倒なので、.zshrcや.bash_profileに登録しておくと便利です。
4. ローカルからデプロイ先へのアクセス設定をする
Capistranoにローカルからデプロイ先のアクセスするための設定を行います。
AWS EC2を利用する場合はAWSが発行したpemを使ってアクセスしますが、そのケースは下記のように設定します。もしすでにデプロイ先に自分のマシンの公開鍵をセットするなどして、アクセスできる場合はこの設定は不要です。
set :ssh_options, {
auth_methods: [ 'publickey' ],
keys: [ '~/.ssh/aws.pem' ],
}
上記はpemを~/.sshに配置したことを想定しています。それ以外の場所に設置した場合はそれにあわせて書き換えてください。
5. 確認
下記のようになれば成功です。
$ bundle exec cap production deploy:check
00:00 git:wrapper
01 mkdir -p /tmp
✔ 01 ec2-user@xx.xxx.xx.xx 0.087s
Uploading /tmp/git-ssh-a01f19cecd7277afb347.sh 100.0%
02 chmod 700 /tmp/git-ssh-a01f19cecd7277afb347.sh
✔ 02 ec2-user@xx.xxx.xx.xx 0.082s
00:00 git:check
01 git ls-remote git@github.com:username/sampleapp.git HEAD
01 3c12f893e9804130cba2621d2920555fc7d2a4c3 HEAD
✔ 01 ec2-user@xx.xxx.xx.xx 2.070s
00:02 deploy:check:directories
01 mkdir -p /var/rails/sampleapp/shared /var/rails/sampleapp/releases
✔ 01 ec2-user@xx.xxx.xx.xx 0.038s
00:02 deploy:check:linked_dirs
01 mkdir -p /var/rails/sampleapp/shared/log /var/rails/sampleapp/shared/tmp/pids /var/rails/sampleapp/shared/tmp/cache /var/rails/sampleapp/shared/tmp/sockets /var/rails/sampleapp/shared/public/system /var/rails/sampleapp/shared/…
✔ 01 ec2-user@xx.xxx.xx.xx 0.115s
00:02 deploy:check:make_linked_dirs
01 mkdir -p /var/rails/sampleapp/shared/config
✔ 01 ec2-user@xx.xxx.xx.xx 0.079s
6. 備考
forward_agentオプションについて
これに関するの記事を見ると、forward_agent: trueを設定しているものを見かけますが、今回試してみたところ、この設定はあってもなくても関係なくデプロイができました。Capistranoのバージョンにもよるのかもしれませんが、今回使用している3.15.0では不要であったため、記載していません。
公式ドキュメント
Github(SSH関連)
https://docs.github.com/ja/github/authenticating-to-github/connecting-to-github-with-ssh
Capistrano(認証関連)
https://capistranorb.com/documentation/getting-started/authentication-and-authorisation/