やりたかったこと
VPSで動かしているNode.jsアプリがSSHを切断するたびに終了してしまった。PM2を使ってバックグラウンドで常駐させたかった。
PM2のインストール
npm install -g pm2
グローバルインストールするので、nvmを使っている場合はバージョンを固定しておく。
アプリの起動
pm2 start app.js
# または
pm2 start app.js --name myapp
--nameでプロセス名を指定しておくと後で管理しやすい。
よく使うコマンド
# プロセス一覧確認
pm2 list
# ログ確認
pm2 logs
pm2 logs myapp
# 再起動
pm2 restart myapp
# 停止
pm2 stop myapp
# 削除
pm2 delete myapp
pm2 listでCPU・メモリ使用量も一覧で確認できる。
サーバー再起動後も自動起動させる
pm2 startup
実行すると以下のようなコマンドが出力されるので、そのままコピーして実行する。
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu
その後、現在の起動設定を保存する。
pm2 save
これでサーバーを再起動してもPM2が自動で立ち上がり、登録済みのアプリも起動する。
ecosystem.config.jsで設定をまとめる
複数アプリや環境変数が多い場合は設定ファイルにまとめた方が管理しやすかった。
module.exports = {
apps: [{
name: 'myapp',
script: './app.js',
env: {
NODE_ENV: 'production',
PORT: 3000
},
error_file: './logs/err.log',
out_file: './logs/out.log'
}]
};
pm2 start ecosystem.config.js
ハマったポイント
- nvmでNode.jsを管理している場合、
pm2 startup後にnvmのパスが通らなくてアプリが起動しないことがある →pm2 startupの出力コマンドにPATHを追加して解決 pm2 saveを忘れるとサーバー再起動後に登録が消える- ログが溜まり続けるので
pm2 install pm2-logrotateでローテーション設定しておくと良い - nginxのリバースプロキシと組み合わせる時はPORTの設定を揃えること
pm2 startupは実行ユーザーのホームディレクトリを参照するので、rootとuserで混在しないよう注意
関連記事
- Node.jsのバージョンをnvmで管理する方法
- nginxのリバースプロキシ設定(Node.jsアプリをnginxで公開する)
- systemdでサービスを管理する方法(start/stop/enable/status)
- Linuxでプロセスを確認・終了する方法(ps/kill)
- VPSにDockerをインストールして本番環境を構築する方法
おすすめのVPS/ドメイン/スクール
VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。