Node.jsのExpressフレームワークを使用したアプリケーションは、その効率と拡張性で知られていますが、運用環境ではアプリケーションの管理と維持が不可欠です。ここでは、プロセスマネージャーであるPM2を用いてExpressアプリケーションを管理する方法について詳しく説明します。PM2はアプリケーションの自動再起動、ログ管理、負荷分散などを簡単に行うことができるツールです。Ubuntu環境でのログローテーション設定も合わせて解説します。
前提条件
- Node.jsがインストールされていること
- Expressプロジェクトが作成済みで、プロジェクトのルートディレクトリで作業が行えること
- Ubuntuシステムで作業すること
1. PM2のインストール
PM2はnpmを通じて簡単にインストールできます。グローバルにインストールすることで、どのプロジェクトからもPM2コマンドを利用できるようになります。
npm install pm2@latest -g
2. ExpressアプリケーションのPM2での起動
PM2を使用してExpressアプリケーションを起動するには、プロジェクトのルートディレクトリで以下のコマンドを実行します。
pm2 start app.js --name "my-express-app"
ここで、app.js
はあなたのExpressアプリケーションのエントリーポイントです。--name
オプションでPM2プロセスに名前を付けることができます。
PM2の設定を保存:
PM2に現在のプロセスリストとそれらの設定を保存させ、システム再起動後もそれらが再開されるようにします。
pm2 save
3. ログの管理
PM2では、アプリケーションの標準出力とエラー出力を自動的にログファイルにリダイレクトします。デフォルトでは、これらのログファイルは~/.pm2/logs
に保存されます。ログファイルの場所をカスタマイズするには、以下のように--output
および--error
オプションを使用します。
pm2 start app.js --name "my-express-app" --output ~/logs/app-out.log --error ~/logs/app-err.log
4. Ubuntuでのログローテーション
長期間運用する場合、ログファイルが大きくなりすぎると問題が発生することがあります。Ubuntuではlogrotate
を用いてログローテーションを設定することができます。
-
logrotate
の設定ファイルを作成します。
sudo nano /etc/logrotate.d/my-express-app
- 以下の内容をファイルに追加します。
/home/username/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 username username
sharedscripts
postrotate
pm2 reloadLogs
endscript
}
この設定により、ログファイルは毎日ローテーションされ、14世代分が保存されます。pm2 reloadLogs
コマンドは、ログローテーション後にPM2にログファイルを新しくさせるために使用されます。
5. PM2のその他の便利なコマンド
- **アプリケーショ
ンのリスト表示**: pm2 list
-
アプリケーションのモニタリング:
pm2 monit
-
アプリケーションの停止:
pm2 stop my-express-app
-
アプリケーションの削除:
pm2 delete my-express-app
PM2はExpressアプリケーションの運用を効率的にする強力なツールです。適切に設定することで、アプリケーションの可用性を高め、運用の手間を大きく削減することが可能です。
package.jsonにPM2スクリプトを追加
package.json
に関しては、PM2を利用するための直接的な記述は必要ありませんが、PM2をプロジェクト依存のツールとして扱いたい場合や、特定のスクリプトを設定してPM2で簡単に実行可能にしたい場合は、package.json
に関連するスクリプトを追加することが有効です。
例えば、package.json
にPM2を用いてアプリケーションを起動するためのスクリプトを追加することで、開発者がコマンドを覚える必要がなく、コンソールから簡単にプロジェクトを起動できます。以下はその一例です。
-
スクリプトの追加: PM2でアプリケーションを起動するためのスクリプトを
package.json
のscripts
セクションに追加します。
{
"name": "your-express-app",
"version": "1.0.0",
"scripts": {
"start": "pm2 start app.js --name 'my-express-app'",
"stop": "pm2 stop my-express-app",
"delete": "pm2 delete my-express-app",
"logs": "pm2 logs"
},
"dependencies": {
"express": "^4.17.1"
}
}
この設定により、以下のようにnpmスクリプトを通じてPM2の操作が可能になります。
-
起動:
npm run start
-
停止:
npm run stop
-
削除:
npm run delete
-
ログの確認:
npm run logs
-
PM2のローカルインストール: グローバルではなくプロジェクト依存性としてPM2をインストールする場合は、以下のコマンドでPM2をプロジェクトの
devDependencies
に追加します。
npm install pm2 --save-dev
これにより、PM2のバージョンがプロジェクトに固定され、異なる環境間での互換性が保たれます。また、プロジェクトを他の開発者と共有する際に、PM2が必要であることが明確になり、セットアップが容易になります。
TypeScript アプリケーションの PM2 での起動する場合
PM2を使ってapp.tsを直接起動する設定を行います。以下のコマンドを使用して、PM2にts-nodeをインタープリタとして指定し、アプリケーションを起動します。
pm2 start app.ts --interpreter="./node_modules/.bin/ts-node" --name "my-express-app"
--interpreter
オプションはPM2にどのインタープリタを使用してスクリプトを実行するかを指示します。ここではts-nodeを指定しています。--name オプションはこのプロセスに名前を付け、後から簡単に参照できるようにします。