Golangで書かれたWebアプリをWerckerでVPSにデプロイした話
今回はGoで書かれたWebアプリケーションをWerckerを使ってビルドとデプロイをしたのでその時のWerckerのデプロイ設定などについて書いていきたいと思います。
はじめに
開発環境
前提条件
Werckerの全体像
WerckerのPipelineという概念があります。
下記画像のようにBoxという仮想環境の中でBuildフェーズとDeployフェーズが順番に実行され、その中でstep と呼ばれる個別の処理で発生します。
今回はmasterにpushされたタイミングでBuildフェーズとDeployフェーズが実行されるように設定します。
Wercker側でDeployフェーズの追加
werckerのアプリケーションのページに移動します。 開くとWorkFlowsというタブがあるのでそれを選択します。
続いて選択して移動したページにAdd new pipelineと書いてあるボタンがあるので選択します。
新しいpipelineのNameを入力します。今回はDeployフェーズの追加なので deploy と入力しましょう。
YML Pipeline Nameも同様で良いです。
Hook Typeですが、今回はBuildフェーズが通った後にDeployフェーズを実行するため Default を選択しましょう。
必要な項目を全て入力したら Create しましょう。
作成すると下記画像のようにdeployが追加されるので確認してみてください。
秘密鍵の設定
VPSにログインするために秘密鍵の設定をする必要があります。先ほどの画像の deploy をクリックして詳細のページに飛びます。
詳細のページに移動すると Generate SSH Keys というボタンがあるのでそれを押すと秘密鍵の生成ができます。
鍵の名前は自由でいいのですが、今回は DEPLOY_KEY
とします。
RSAですが、2048と4096がありますが、どちらでも構いません。
Create を押すと公開鍵と秘密鍵のペアがこのように生成されます。
DEPLOY_KEY_PUBLIC
は後でVPSの方で鍵を設定するのに必要なのでコピーしておきます。
VPS側の設定
VPSの方にSSH接続し、今回Deployする用のユーザーを作成します
#今回はdeploy用のユーザーはwerckerとします $ adduser wercker # wheelグループにwerckerを追加 $ gpasswd -a wercker wheel $ su - wercker $ cd ~/ $ mkdir .ssh # ここで先ほどコピーした公開鍵を貼り付ける $ vi .ssh/authorized_keys $ chmod -R 700 .ssh $ chmod 644 .ssh/authorized_keys # deploy用のディレクトリの用意 $ mkdir /srv/rsync $ chmod 755 /srv/rsync
これで一旦VPS側の設定は終わります。
wercker.ymlにDeployフェーズを追加
次にwercker.ymlを編集していきます。
box: golang build: steps: - setup-go-workspace #何かしらの処理(今回はBuildフェーズの詳細については省きます) deploy: steps: # デプロイするファイルの表示 - script: name: deploy info code: find . # VPSのIPもしくはドメインを入力しましょう - add-to-known_hosts: hostname: IPアドレスもしくはドメイン名 #ここでは先ほど登録した鍵の変数名を入力しましょう - add-ssh-key: keyname: DEPLOY_KEY # 今回はrsyncというファイル同期ができるコマンドを使って転送します - install-packages: packages: rsync # 転送 - script: name: rsync code: rsync -azvv --delete -e "ssh -v -o StrictHostKeyChecking=no -o UserKnownHostsFile=no" $WERCKER_ROOT/* wercker@ IPアドレスもしくはドメイン名 :/srv/rsync
以上でwercker.ymlの設定は終了です。
Buildフェーズが通ったらDeployフェーズが実行されるようにする
これまででほとんどの設定は終了しました。あとはBuildフェーズ後にDeployフェーズが実行されるようにすればいいだけです。
もう一度アプリケーションのページから WorkFlows のページに飛んでください。
WorkFlowsのページから下記画像のように+ボタンを押してpipelineを追加することができます。
これはWorkFlowと言って1つのCIのプロセスを複数のパイプラインに分割することのできる機能です。これを使ってbuildフェーズの後にdeployフェーズの追加をしてあげます。
on branch でDeployフェーズが実行されるブランチを決めることができます。今回はmasterにします。
Execute pipeline はdeployを選択しましょう。
これでGithubからmasterにpushされたらdeployされるようになりました。
追記
デプロイ用に作ったユーザーのロックされているとデプロイできないです。
passwd -S デプロイ用のユーザー
passwdコマンドでユーザーがロックされていないか確認して見ましょう