pm2はforeverと類似のプロセスマネージャですが、foreverと比べると以下のようなメリットがあります。
というわけでSailsアプリケーションでデプロイ機能を試してみました。デプロイのイメージは以下のような感じです。
pm2でデプロイを行う場合の注意点としてNodeのモジュールはすべてアプリケーションにローカルインストールし、node_modulesディレクトリをGitリポジトリにコミットしておく必要があります。Sailsなどを使う場合、Windows上だとnode_modulesディレクトリのネストが深すぎてgit addするとき怒られることがあるのでCドライブ直下など、できるだけ浅い場所で作業するほうがよいと思います。
まずはSailsプロジェクトのルートディレクトリで以下のコマンドを実行し、デプロイ用の設定ファイルの雛形を生成します。
$ pm2 ecosystem
ecosystem.jsonというファイルが以下の内容で生成されるのでプロジェクトやデプロイ先の環境にあわせて適当に設定を変更し、リモートリポジトリにプッシュしておきます。
{ "apps" : [{ "name" : "API", "script" : "app.js", "env": { "COMMON_VARIABLE": "true" }, "env_production" : { "NODE_ENV": "production" } },{ "name" : "WEB", "script" : "web.js" }], "deploy" : { "production" : { "user" : "node", "host" : "212.83.163.1", "ref" : "origin/master", "repo" : "git@github.com:repo.git", "path" : "/var/www/production", "post-deploy" : "pm2 startOrRestart ecosystem.json --env production" }, "dev" : { "user" : "node", "host" : "212.83.163.1", "ref" : "origin/master", "repo" : "git@github.com:repo.git", "path" : "/var/www/development", "post-deploy" : "pm2 startOrRestart ecosystem.json --env dev" } } }
準備ができたらアプリケーションをデプロイしてみます。プロジェクトのルートディレクトリでまずは以下のコマンドを実行します(devの部分はproductionなどデプロイする環境にあわせて変更します)。なお、デプロイ先のサーバへの操作はSSH経由で行われますのでデプロイ先にもNode.js、pm2、Gitなどがインストールされている必要があります。
$ pm2 deploy ecosystem.json dev setup
これでデプロイ先にGitリポジトリがクローンされ、デプロイが可能になります。以下のコマンドを実行するとデプロイ先に配置されたファイルがリモートリポジトリの内容で最新化され、post-deployに指定したコマンドによって起動されます。
$ pm2 deploy ecosystem.json dev
Node.jsアプリケーションの開発・運用にはpm2のようなプロセスマネージャが必須ですが、デプロイ機能まで付属しており手軽に利用できるのは嬉しいところです。ただ、現状ではpm2だと複数のサーバへのデプロイが難しかったり、Windows上では利用できないといった欠点もあります。デプロイには別のツールを使用し、pm2は運用環境でのプロセスマネジメントに特化した使い方をするのがよいかもしれません。