strong-pmを稼働させてloopbackアプリをデプロイする
http://docs.strongloop.com/display/SLC/Setting+up+a+production+host を参照してloopbackで作ったアプリケーションのデプロイを行ってみました。
いままでREMPチームで作っているプロダクトはminaを利用して、PadrinoやRendrアプリをデプロイしていましたが loopbackにはデプロイ機構やデプロイしたアプリケーションのプロセスの管理まで用意されているので今回はこの手順で進めてみました。
loopbackアプリのデプロイ及び、アプリケーションのプロセス管理をざっくり整理すると以下の様な図になります。
strong-pm - Process Managerというloopbackを開発しているStrongloopが公開しているNode.jsアプリケーション向けの プロセスマネージャーをプロダクションのホストに導入することでデプロイの制御や複数アプリケーションを立ち上げた際のプロセス管理まで一元的に行うことができます。
ドキュメントを読みながら色々試行錯誤しながら進めたので、その際の手順をメモしておきます。
手順
アプリケーションを運用するProductionなホストにstrong-pmを導入します。
まずはプロダクション用のサーバ上でnpm install
[production]$ sudo npm install -g strong-pm (snip)
続いてサービスとして起動できる様にするために以下のコマンドを実行します。
[production]$ sudo sl-pm-install Service strong-pm installed (/etc/init/strong-pm.conf)
で、サービスを起動します。
[production]$ sudo /sbin/initctl start strong-pm strong-pm start/running, process 5796
これでproductionを運用するホストにloopbackで作成したアプリケーションがデプロイできる様な状態になりました。
実際にこのproductionのホストに向けてデプロイしてみます。
ビルドサーバでまずビルドします。gitにdeployブランチが作成されます。
[build]$ slc build Running `git log -1 --pretty=format:"%t" HEAD` => 670faf6 Running `git commit-tree -p "refs/heads/deploy" -p "refs/heads/master" -m "Commit tree of 'refs/heads/master' onto 'deploy'" 670faf6` => f32106f847861e2f4e008064fa25445cc02ad5f8 Running `git update-ref "refs/heads/deploy" f32106f847861e2f4e008064fa25445cc02ad5f8` Merged source tree of `refs/heads/master` onto `deploy` Running `npm install --ignore-scripts` Running `npm prune --production` Running `git add --force --all .` Running `git write-tree` => f38b2795a54b584d091dff0d8a61fa7b518fc4b4 Running `git commit-tree -p "refs/heads/deploy" -m "Commit build products" f38b2795a54b584 d091dff0d8a61fa7b518fc4b4` Running `git update-ref "refs/heads/deploy" e03a0ec552504f3db1744e8add99e03f0a296f67` Committed build products onto `deploy`
引き続きデプロイ。ビルド時に作成したdeployブランチがプロダクションサーバーにデプロイされます。
[build]$ slc deploy http://10.0.3.xxx:8701 Counting objects: 24, done. Delta compression using up to 2 threads. Compressing objects: 100% (24/24), done. Writing objects: 100% (24/24), 2.81 KiB | 0 bytes/s, done. Total 24 (delta 12), reused 0 (delta 0) To http://10.0.3.xxx:8701/api/services/3/deploy/default acc8711..e03a0ec deploy -> deploy Deployed `deploy` as `remp-api` to `http://10.0.3.xxx:8701`
このメッセージでデプロイ完了となります。
実際にデプロイされている先は、productionホストの /var/lib/strong-pm/svc
にあって構造は以下の様になります。
[production]$ pwd /var/lib/strong-pm/svc [production]$ tree -L 3 . └── 3 ├── repo │ └── 3 └── work ├── current -> e03a0ec552504f3db1744e8add99e03f0a296f67.1432980055653 └── e03a0ec552504f3db1744e8add99e03f0a296f67.1432980055653
実際に稼働しているかはslcコマンドで確認できます。プロダクションサーバに対して以下のコマンドを実行することで、 稼働させているアプリケーションに設定している環境変数やクラスタのサイズ、開けているポート番号等を確認できます。
[build]$ slc ctl -C http://10.0.3.xxx:8701 Service ID: 3 Service Name: remp-api Environment variables: Name Value NODE_ENV production REMP_MONGO_DB_PW ************* REMP_MONGO_DB_HOST 10.0.3.*** REMP_MONGO_DB_USER ******* Instances: Version Agent version Cluster size 4.1.1 1.5.1 2 Processes: ID PID WID Listening Ports Tracking objects? CPU profiling? 3.1.22350 22350 0 3.1.22352 22352 1 0.0.0.0:3003 3.1.22354 22354 2 0.0.0.0:3003
これでアプリケーションを稼働させることができる様になりました。今回は3番目に稼働させたアプリケーションなのでService IDとして 3
が振られているので、
該当のアプリケーションは3003番が振られます。*1
この段階でnginx等のリバースプロキシから該当のポートにプロキシしてやることでアプリケーションを公開できる様になります。
メモ
- strong-pm自体のログは
/var/log/upstart/strong-pm.log
に保管されます
*1:strong-pmではService ID + 3000がデフォルトのポート番号