WerckerでSSHキーを使ってrsyncでVPSにデプロイする

  • 10 Feb 2017

WerckerがDockerベースになり、過去のymlだと使えなくなってました。またSSH鍵の取り扱いなども変わったようなのでメモとして残しておきます。scpでも同様の方法でいけると思います。

このブログのビルドとデプロイはwerckerを利用しています。最近、そのWerckerがDockerベースになり、rsyncでデプロイするところでハマったので記録として残しておきます。sshやscpも基本的には同じようにできると思います。

werckerにSSHキーの登録

私の場合、Dockerベースになる前に登録してあったSSHキーが無くなっていた(!)ので再登録します。何かのはずみで消えたのでしょう。もしSSHキーでこける場合は疑ってみてください。

ちなみに鍵が無くなったことには、werckerビルドした時の以下のメッセージがで気づきました。 ssh鍵が空?

鍵生成

さて、鍵生成しましょう。wercker上でできるので難しくはありません。werckerにログインし、werckerのアプリケーションのタブメニューから「Environment」を選択して「+ Generate SSH Keys」をクリックします。 ssh鍵が空?

鍵の名前は適当なものを入力してください(ここではHOGEHOGEにします)。ただしこの名前はあとでwercker.yml記述するときに使いますので短い方がいいと思います。強度はお好みで。特殊な理由がないなら4096bit選んでよいでしょう。あとは「Generate」ボタンを押せば鍵が生成されます。

ssh鍵生成モーダル

公開鍵をホストサーバーに登録

先ほどの操作でXXXXXX_PRIVATEXXXXXX_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/

昔にくらべてだいぶすっきりしました。あとは試しに実行してみてください。うまくいく・・はず!