このブログのビルドとデプロイはwerckerを利用しています。最近、そのWerckerがDockerベースになり、rsyncでデプロイするところでハマったので記録として残しておきます。sshやscpも基本的には同じようにできると思います。
werckerにSSHキーの登録
私の場合、Dockerベースになる前に登録してあったSSHキーが無くなっていた(!)ので再登録します。何かのはずみで消えたのでしょう。もしSSHキーでこける場合は疑ってみてください。
ちなみに鍵が無くなったことには、werckerビルドした時の以下のメッセージがで気づきました。
鍵生成
さて、鍵生成しましょう。wercker上でできるので難しくはありません。werckerにログインし、werckerのアプリケーションのタブメニューから「Environment」を選択して「+ Generate SSH Keys」をクリックします。
鍵の名前は適当なものを入力してください(ここではHOGEHOGEにします)。ただしこの名前はあとでwercker.yml記述するときに使いますので短い方がいいと思います。強度はお好みで。特殊な理由がないなら4096bit選んでよいでしょう。あとは「Generate」ボタンを押せば鍵が生成されます。
公開鍵をホストサーバーに登録
先ほどの操作でXXXXXX_PRIVATE
とXXXXXX_PUBLIC
という鍵ができたと思います。このうちXXXXXX_PUBLICが公開鍵です。この公開鍵の値をコピーしておいてください。
コピーした文字列をホストサーバーに登録します。ホストサーバーにはwerckerユーザーでも作っておき、/home/wercker/.ssh/authorized_keys
ファイルを作ったら、そこにペーストすれば公開鍵登録は完了です。
wercker@hostserver:/home/wercker/.ssh$ vim authorized_keys
wercker.ymlの編集
次にwercker.ymlを編集します。以下に実際に使っているymlの一部をコメント付きで記載しますので参考にしてください。
box: ruby
build:
steps:
- script:
name: preparation
code: |
...(省略)...
deploy:
steps:
#
# rsyncをインストール
#
- script:
name: install rsync
code: |
sudo apt-get update
sudo apt-get -y install rsync
#
# 秘密鍵をコンテナに登録
# ホストにSSHする時に自動でこの鍵が利用されます
#
- add-ssh-key:
keyname: HOGEHOGE_KEY
#
# デプロイ先のホストをコンテナに登録
#
- add-to-known_hosts:
hostname: your.host.ne.jp
#
# 鍵を使ってデプロイ実行
#
- script:
name: transfer application
code: |
rsync -avzr -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=no" $WERCKER_ROOT/_site/* wercker@your.host.ne.jp:/var/www/yourdir/
# scpならたぶんこんな感じ
# scp -r -o StrictHostKeyChecking=no -o UserKnownHostsFile=no $WERCKER_ROOT/_site/* wercker@your.host.ne.jp:/var/www/yourdir/
昔にくらべてだいぶすっきりしました。あとは試しに実行してみてください。うまくいく・・はず!