動かざることバグの如し

近づきたいよ 君の理想に

Node.js TypeScriptサーバーをPM2で永続化する

環境

  • Node.js v24
  • PM2

やりたいこと

TypeScript製のWebサーバーを以下のコマンドで起動している。

node --import tsx ./src/web/server.ts --port 3000

今はこれを nohup で動かしているのだが、いくつか不満がある。

  • サーバー再起動後に自動起動しない(手動で立ち上げ直す必要がある)
  • プロセスが落ちても自動で再起動しない
  • ログ管理が貧弱でローテーションも自分でやる必要がある

これを PM2 で管理することで、プロセスの永続化・自動起動・ログ管理をまとめて解決したい。

解決策

PM2 の設定は ecosystem.config.js というファイルにまとめるのが定番だ。コマンドライン引数が長くなりがちな場合は特にこの形式が便利で、バージョン管理にも乗せやすい。

プロジェクトルートに以下の内容で作成する。

module.exports = {
  apps: [{
    name: 'my-app',
    script: 'node',
    args: '--import tsx ./src/web/server.ts --port 3000',
    cwd: '/home/thr3a/work/my-app',
    watch: false,
    restart_delay: 3000,
  }]
}

起動

pm2 start ecosystem.config.js

サーバー再起動後も自動起動させるには、初回だけ以下を実行する。

pm2 startup を実行するとsystemdのユニットファイルを登録するコマンドが表示されるので、それをコピーして実行する。pm2 save は現在のプロセス一覧を保存し、次回起動時に復元する設定だ。

pm2 save
pm2 startup

よく使うコマンドは以下

pm2 logs my-app # ログ確認
pm2 status # 状態確認
pm2 restart my-app
pm2 stop my-app

参考リンク