Node.js Expressサービス
Node.js Expressアプリケーション用のプロダクション対応systemdサービスを作成します。環境変数、ワーキングディレクトリ、journalへのログ出力、適切なプロセス管理について解説します。
Application Services
詳細な説明
systemdでNode.jsをプロダクション運用する
Node.jsアプリケーションはデフォルトでフォアグラウンドで実行されるため、Type=simpleに最適です。適切に設定されたsystemdユニットは、PM2のようなプロセスマネージャーを置き換え、Linuxシステムとのより良い統合を提供します。
[Unit]
Description=Node.js Express API
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node /opt/myapp/server.js
Restart=on-failure
RestartSec=5
User=nodeapp
Group=nodeapp
WorkingDirectory=/opt/myapp
Environment="NODE_ENV=production"
Environment="PORT=3000"
StandardOutput=journal
StandardError=journal
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
環境設定
Node.jsアプリケーションでは、環境変数が標準的な設定方法です。2つのオプションがあります:
インライン変数(機密でない値の場合):
Environment="NODE_ENV=production"
Environment="PORT=3000"
環境ファイル(シークレットや多数の変数の場合):
EnvironmentFile=/opt/myapp/.env
ファイルディスクリプタ制限
多数の同時接続を処理するNode.jsアプリケーションは、ファイルディスクリプタ制限の引き上げが必要です。Linuxのデフォルト制限(1024)はプロダクションサーバーには低すぎます。
PM2ではなくsystemdを使う理由
PM2はNode.jsエコシステムで人気がありますが、systemdは以下を提供します:
- 統一された管理: 他のすべてのシステムサービスと同じインターフェース
- 起動統合: システム起動時の自動起動
- Journalログ: ローテーション付きの一元ログ
- リソース制御: cgroupsによるメモリ/CPU制限
- 依存関係の順序付け: データベース、ネットワークなどの後に起動
ユースケース
クラッシュ時の自動再起動、環境ベースの設定、一元ログ、システム起動プロセスとの統合が必要なNode.js Express APIサーバーをプロダクションにデプロイする場合に使用します。