Wercker という Continuous Integration(CI、継続インテグレーション)を提供する SaaS があります。
なんとベータ版で無料!使わない理由がありません。
CI というとコードのビルドやテストを行うものを思い浮かべる方が多いかと思いますが、デプロイにも使えて、非常に便利です!
ただ、GitHub にプッシュ→Wercker でビルド&テスト実行→テストが通ったらデプロイ、という流れを考えると、GitHub、Wercker、デプロイ先と3つのサーバを経由しており、お互いにどうやって認証しているのか非常にややこしくなります(少なくとも自分は最初混乱しました)。
GitHub → Wercker
これは Wercker のウェブサイトから簡単に設定できるので、割愛します。
Wercker サーバ → デプロイ先サーバ
1. ssh-keygen で新しい暗号鍵を生成する。
まずは、Wercker のサーバで実行しているプロセスがデプロイ先のサーバにログインできるようにする必要があります。そのための公開鍵と暗号鍵の鍵ペアを ssh-keygen で作ります。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/id/.ssh/id_rsa): wercker_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in wercker_key.
Your public key has been saved in wercker_key.pub.
↑の3行目では必ず新しいファイル名を指定しましょう!でないとデフォルトで使っているキーを上書きしてしまう可能性があります!ここでは wercker_key という名前にしました。
実行後に、
- wercker_key : 秘密鍵(Private Key)
- wercker_key.pub : 公開鍵(Public Key)
という2つのファイルが ~/.ssh
ディレクトリの中にできているはずです。
2. Wercker に秘密鍵を設定する。
次に Wercker 側に 秘密鍵 を設定します。
個人的にはここが少しややこしかったです( 秘密 鍵なのに外に置くの?みたいな)。
今回の場合、Wercker がデプロイ先に対して認証をしないといけないので、「Wercker の秘密鍵」を設定してるんだ、と理解すれば大丈夫です。
とは言え秘密鍵なのでレポジトリにチェックインする、などは言語道断です。
Wercker の解説ページで紹介されている方法は環境変数を使う方法です。
Wercker に登録しているアプリケーションのページにある Settings をクリックし、Deploy Targets の下に各デプロイ先(テスト環境、本番環境など)があります。その中に ENVIRONMENT VARIABLE というのがあり、その中に秘密鍵を設定します。
この際、 Protected と書いてあるチェックを必ず入れましょう。これを入れないと中身がログに出てしまいます。
3. デプロイ先サーバの公開鍵を設定する。
最後に接続を受け入れる側であるデプロイ先サーバには公開鍵を設定します。
デプロイを行うユーザのデプロイ先サーバの deploy ユーザの ~/.ssh/authorized_keys に Public Key を加える。
デプロイ先サーバ → GitHub サーバ
デプロイ先サーバの deploy ユーザの公開鍵を GitHub レポジトリの設定(Settings)にある Deploy Keys に加える。