github 上の nodejs アプリを自動更新する環境を作る
github 上にある nodejs アプリが更新されたら起動しているアプリを更新する仕組みを考える. ホットデプロイとか言うんですかね.仕組みの評価は行わずにとりあえず動くところまで.
使用ツール
流れ
- github からの webhook を受ける
- アプリのディレクトリで git pull
- npm update してライブラリを更新
- pm2 restart する
設定とか
ここでは nodejsapp というアプリを対象とし, /var/www/nodejsapp においてるものとする.
また github 側で webhook の URL が設定されているものとする.
大きな手順としては下記のように書いてる.
- pm2 のインストール
- pm2 を使ってアプリを起動
- gost のインストール
- gost の設定を記述
- gost を起動
pm2 のインストール
npm が入っていることが前提.
$ npm install -g pm2
pm2 を使ってアプリを起動
アプリのディレクトリに行き,下記のようなコマンドを実行してデーモン化する.
$ NODE_PATH=app pm2 start app.js -i 1
gost のインストール
go 言語がインストールされていることが前提.
$ go get github.com/mattn/gost
gost の設定を記述
config.json
{ "addr": "127.0.0.1:8889", "apps": { "nodejsapp" : { "path": "/var/www/nodejsapp", "update_command": "git pull", "build_command": "npm update", "release_command": "pm2 restart all" } }, "log": "gost.log" }
gost の起動
ここでは簡単に nohup を使ってバックグラウンドで動き続けるようにしている.
$ nohup gost -c config.json &
以上で完了.
問題点とか
現状運用してみているところで思ってることを列挙.
- nodejsapp のプロセスが死んだ時にどうしようもない
- ここ のような仕組みのほうがいいかもしれない
- pm2 reload all がたまに詰まる
- ので pm2 restart all に変更した