設定ファイル
PM2で複数のアプリケーションを管理する場合は、JS設定ファイルを使用して整理します。
設定の生成
設定ファイルのサンプルを生成するには、次のコマンドを入力します。
$ pm2 init simple
これにより、サンプルのecosystem.config.js
が生成されます。
module.exports = {
apps : [{
name : "app1",
script : "./app.js"
}]
}
独自の設定ファイルを作成する場合は、ファイル名が.config.js
で終わるようにしてください。PM2は設定ファイルとして認識できます。
設定ファイルへの操作
アプリに作用するよりもシームレスに、設定ファイルに含まれるすべてのアプリを起動/停止/再起動/削除できます。
# Start all applications
pm2 start ecosystem.config.js
# Stop all
pm2 stop ecosystem.config.js
# Restart all
pm2 restart ecosystem.config.js
# Reload all
pm2 reload ecosystem.config.js
# Delete all
pm2 delete ecosystem.config.js
特定のプロセスへの操作
また、アプリケーション名とオプション--only <app_name>
を使用して、特定のアプリケーションに作用することもできます。
pm2 start ecosystem.config.js --only api-app
注:--only
オプションは、start/restart/stop/deleteでも動作します。
各アプリ名をカンマで区切って指定することで、複数のアプリを操作対象に指定することもできます。
pm2 start ecosystem.config.js --only "api-app,worker-app"
環境の切り替え
env_*
オプションを使用して、異なる環境変数セットを指定できます。
例
module.exports = {
apps : [{
name : "app1",
script : "./app.js",
env_production: {
NODE_ENV: "production"
},
env_development: {
NODE_ENV: "development"
}
}]
}
異なる環境の変数を切り替えるには、--env [環境名]
オプションを指定します。
pm2 start process.json --env production
pm2 restart process.json --env development
使用可能な属性
アプリケーションの動作と設定は、次の属性を使用して微調整できます。
一般
フィールド | タイプ | 例 | 説明 |
---|---|---|---|
name | (文字列) | “my-api” | アプリケーション名(デフォルトは拡張子なしのスクリプトファイル名) |
script | (文字列) | ”./api/app.js” | pm2 startからの相対スクリプトパス |
cwd | (文字列) | “/var/www/” | アプリが起動されるディレクトリ |
args | (文字列) | “-a 13 -b 12” | CLI経由でスクリプトに渡されるすべての引数をを含む文字列 |
interpreter | (文字列) | “/usr/bin/python” | インタプリタの絶対パス(デフォルトはnode) |
interpreter_args | (文字列) | ”–harmony” | インタプリタに渡すオプション |
node_args | (文字列) | interpreter_argsのエイリアス |
高度な機能
フィールド | タイプ | 例 | 説明 |
---|---|---|---|
instances | 数値 | -1 | 起動するアプリインスタンスの数 |
exec_mode | 文字列 | “cluster” | アプリを起動するモード。「cluster」または「fork」を指定できます。デフォルトはforkです。 |
watch | ブール値または[] | true | 監視と再起動機能を有効にします。フォルダまたはサブフォルダでファイルが変更されると、アプリがリロードされます。 |
ignore_watch | リスト | [”[\/\\]\./”, “node_modules”] | 監視機能によって無視されるファイル名またはフォルダ名の正規表現のリスト |
max_memory_restart | 文字列 | “150M” | 指定されたメモリ量を超えると、アプリが再起動されます。人間が理解しやすい形式: 「10M」、「100K」、「2G」など… |
env | オブジェクト | {“NODE_ENV”: “development”, “ID”: “42”} | アプリに表示される環境変数 |
env_ |
オブジェクト | {“NODE_ENV”: “production”, “ID”: “89”} | inject |
appendEnvToName | ブール値 | true | デフォルトはfalse。単一サーバーに複数の環境をデプロイするために使用します。各環境を名前に追加します。例:my-api-production |
source_map_support | ブール値 | true | デフォルトはtrue、[ソースマップファイルを有効/無効にする] |
instance_var | 文字列 | “NODE_APP_INSTANCE” | ドキュメントを参照してください |
filter_env | 文字列の配列 | [ “REACT_” ] | 「REACT_」で始まるグローバル変数を除外し、クラスターへの侵入を許可しません。 |
ログファイル
フィールド | タイプ | 例 | 説明 |
---|---|---|---|
log_date_format | (文字列) | “YYYY-MM-DD HH:mm Z” | ログの日付形式(ログセクションを参照) |
error_file | (文字列) | エラーファイルパス(デフォルトは$HOME/.pm2/logs/<アプリ名>-error-<pid>.log) | |
out_file | (文字列) | 出力ファイルパス(デフォルトは$HOME/.pm2/logs/<アプリ名>-out-<pid>.log) | |
log_file | (文字列) | 出力とエラーログの両方のファイルパス(デフォルトでは無効) | |
combine_logs | ブール値 | true | trueに設定すると、ログファイルにプロセスIDのサフィックスが付けられなくなります。 |
merge_logs | ブール値 | true | combine_logsのエイリアス |
time | ブール値 | false | デフォルトはfalse。trueの場合、ログに日付が自動的にプレフィックスされます。 |
pid_file | (文字列) | pidファイルパス(デフォルトは$HOME/.pm2/pids/<アプリ名>-<pid>.pid) |
制御フロー
フィールド | タイプ | 例 | 説明 |
---|---|---|---|
min_uptime | (数値) | 起動されたとみなされるアプリの最小稼働時間 | |
listen_timeout | 数値 | 8000 | アプリがリッスンしていない場合にリロードを強制するまでの時間(ミリ秒単位) |
kill_timeout | 数値 | 1600 | 最後のSIGKILLを送信するまでの時間(ミリ秒単位) |
shutdown_with_message | ブール値 | false | process.kill(pid, SIGINT)の代わりにprocess.send('shutdown')でアプリケーションをシャットダウンします。 |
wait_ready | ブール値 | false | リロードがlistenイベントを待機する代わりに、process.send('ready')を待機します。 |
max_restarts | 数値 | 10 | アプリがエラーとみなされ、再起動されなくなるまでの、連続した不安定な再起動(1秒未満の間隔、またはmin_uptimeによるカスタム時間)の数 |
restart_delay | 数値 | 4000 | クラッシュしたアプリを再起動するまでの待機時間(ミリ秒単位)。デフォルトは0です。 |
autorestart | ブール値 | false | デフォルトはtrue。falseの場合、アプリがクラッシュまたは正常に終了した場合、PM2はアプリを再起動しません。 |
cron_restart | 文字列 | “1 0 * * *” | アプリを再起動するためのcronパターン。 cron機能が動作するには、アプリケーションが実行されている必要があります。 |
vizion | ブール値 | false | デフォルトはtrue。falseの場合、PM2はビジョン機能(バージョン管理メタデータ)なしで起動します。 |
post_update | リスト | [“npm install”, “echo launching the app”] | Keymetricsダッシュボードからプル/アップグレード操作を実行した後に実行されるコマンドのリスト |
force | ブール値 | true | デフォルトはfalse。trueの場合、通常PM2では許可されていない同じスクリプトを複数回起動できます。 |
デプロイメント
エントリ名 | 説明 | タイプ | デフォルト |
---|---|---|---|
key | SSHキーパス | 文字列 | $HOME/.ssh |
user | SSHユーザー | 文字列 | |
host | SSHホスト | [文字列] | |
ssh_options | コマンドラインフラグのないSSHオプション。「man ssh」を参照してください。 | 文字列または[文字列] | |
ref | GITリモート/ブランチ | 文字列 | |
repo | GITリモート | 文字列 | |
path | サーバー内のパス | 文字列 | |
pre-setup | ローカルマシン上のプリセットアップコマンドまたはスクリプトへのパス | 文字列 | |
post-setup | ホストマシン上のポストセットアップコマンドまたはスクリプトへのパス | 文字列 | |
pre-deploy-local | デプロイ前アクション | 文字列 | |
post-deploy | デプロイ後アクション | 文字列 |
考慮事項
JSONアプリ宣言を使用する場合に渡されるすべてのコマンドラインオプションは削除されます。例:
CWD
cwd: JSON宣言はスクリプトと同じ場所にある必要はありません。JSONをスクリプト以外の場所(たとえば、/etc/pm2/conf.d/node-app.json
)に保持する場合、cwd
機能を使用する必要があります(これは、シンボリックリンクを使用するcapistranoスタイルのディレクトリ構造に非常に役立ちます)。ファイルはcwd
ディレクトリからの相対パス、または絶対パスにすることができます(以下の例を参照)。
CLI/JSONオプション
すべてのキーはJSON設定ファイルで使用できますが、コマンドラインではほぼ同じままです。例:
exec_mode -> --execute-command
max_restarts -> --max-restarts
force -> --force
引用符を使用してESCを作成する例:
$pm2 start test.js --node-args "port=3001 sitename='first pm2 app'"
nodeArgs
引数は次のように解析されます。
[
"port=3001",
"sitename=first pm2 app"
]
しかし、次のようにはなりません。
[
"port=3001",
"sitename='first",
"pm2",
"app'"
]
ログの無効化
ログの保存を無効にするには、/dev/null
をerror_fileまたはout_fileに渡します。注:PM2 2.4.0
以降、/dev/null
またはNULL
はプラットフォームに関係なくログを無効にします。
ログのサフィックス
オプションmerge_logs: true
を有効にすることで、ログの自動IDサフィックス(例:app-name-ID.log
)を無効にすることができます。
環境定義
プロセスファイル内で定義された特定の環境を使用するようにpm2に指示するには、--env <環境名>
を使用する必要があります。
{
"apps" : [{
"name" : "worker-app",
"script" : "./worker.js",
"watch" : true,
"env": {
"NODE_ENV": "development"
},
"env_production" : {
"NODE_ENV": "production"
}
},{
"name" : "api-app",
"script" : "./api.js",
"instances" : 4,
"exec_mode" : "cluster"
}]
}
この例では、pm2 start ecosystem.json
を実行すると、アプリケーションがデフォルト環境(開発環境)で起動します。次に、pm2 start ecosystem.json --env production
を使用すると、属性env_<名前>
が使用されます。ここで、名前はproduction
なので、アプリはNODE_ENV=production
で起動します。
特別なext_type
- min_uptime
min_uptime
の値は次のとおりです。- 数値 例:
"min_uptime": 3000
は3000ミリ秒を意味します。 - 文字列 設定を簡潔にするために、
h
、m
、s
を使用できます。例:"min_uptime": "1h"
は1時間、"min_uptime": "5m"
は5分、"min_uptime": "10s"
は10秒を意味します(これらはミリ秒に変換されます)。
- 数値 例:
- max_memory_restart
max_memory_restart
の値は次のとおりです。- 数値 例:
"max_memory_restart": 1024
は1024バイトを意味します(**ビットではありません**)。 - 文字列 設定を簡潔にするために、
G
、M
、K
を使用できます。例:"max_memory_restart": "1G"
は1ギガバイト、"max_memory_restart": "5M"
は5メガバイト、"max_memory_restart": "10K"
は10キロバイトを意味します(これらはバイトに変換されます)。
- 数値 例:
-
オプション値 たとえば、
exec_mode
は、可能な値としてcluster
(cluster_mode
)またはfork
(fork_mode
)を取ることができます。 - 知っておくべきこと
"instances": 0
は、PM2 が CPU の数に応じて可能な限り最大のプロセスを起動することを意味します(クラスターモード)。- 配列
args
、node_args
、およびignore_watch
は、Array
型(例:"args": ["--toto=heya coco", "-d", "1"]
)またはstring
型(例:"args": "--to='heya coco' -d 1"
)です。