詳細

root権限なしでポート80をリスン

rootとしてnodeを実行すべきではないという一般的なルールがあります。しかし、1024未満のポートにバインドできるのはrootユーザーのみです。ここでauthbindが登場します。Authbindを使用すると、root以外のユーザーも1024未満のポートにバインドできます。%user%pm2を実行するユーザーに置き換えてください。

sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chown %user% /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80

pm2を実行するユーザーのプロファイル(例:~/.bashrcまたは~/.zshrc)にエイリアスを追加する必要があります。(~/.bashrcまたは~/.zshrcを実行した直後にsource ~/.bashrcまたはsource ~/.zshrcを実行する必要があります。)

+alias pm2='authbind --deep pm2'

最後に、authbindを使用してpm2を更新してください。

authbind --deep pm2 update

または、ユーザーのプロファイルにエイリアスを追加した場合は、単にpm2 updateを実行してください。

これで、root権限なしでポート80にバインドできるアプリケーションをPM2を使用して開始できます!

同じサーバー上の複数のPM2

クライアントとデーモンは、$HOME/.pm2/pub.sockと$HOME/.pm2/rpc.sockにあるソケットファイル経由で通信します。

PM2_HOME環境変数を変更することで、複数のPM2インスタンスを開始できます。

PM2_HOME='.pm2' pm2 start echo.js --name="echo-node-1"
PM2_HOME='.pm3' pm2 start echo.js --name="echo-node-2"

これにより、2つの異なるPM2インスタンスが起動します。各インスタンスによって管理されているプロセスを一覧表示するには、以下を実行します。

PM2_HOME='.pm2' pm2 list
PM2_HOME='.pm3' pm2 list

デーモンモードなしでPM2を起動

デーモンモードなしでPM2を開始する前に、すべてのPM2インスタンスを停止してください(pm2 kill)。

デーモン化せずにPM2を起動

pm2 start app.js --no-daemon

PM2のインストール時にデフォルトでインストールされるCLI pm2-runtimeもあり、これはNode.jsバイナリのドロップイン置換です。

ステートレスアプリ

本番アプリケーションはステートレスであるべきだという一般的なルールがあります。すべてのデータ、状態、WebSocketセッション、セッションデータは、あらゆる種類のデータベースまたはPUB/SUBシステムを介して共有する必要があります。

そうでない場合、アプリケーションは同じサーバー上や複数のサーバー間でスケールするのが困難になります。

たとえば、connect-redisを使用してセッションを共有できます。

12ファクターアプリの規約に従うこともお勧めします。http://12factor.net/

サーバーへのpm2のセットアップ

Ubuntu VPSでNode.js本番環境を設定するためのpm2の使い方.

ログとPIDファイル

デフォルトでは、ログ(エラーと出力)、pidファイル、ダンプ、PM2ログは~/.pm2/にあります。

.pm2/
├── dump.pm2
├── custom_options.sh
├── pm2.log
├── pm2.pid
├── logs
└── pids

Harmony ES6の有効化

--node-argsオプションを使用すると、nodeインタープリターに引数を追加できます。プロセスのHarmonyを有効にするには、次のコマンドを入力します。

pm2 start my_app.js --node-args="--harmony"

そして、JSON宣言内では

[{
  "name" : "ES6",
  "script" : "es6.js",
  "node_args" : "--harmony"
}]

CoffeeScript

CoffeeScript v1

pm2 install coffee-script 
pm2 start app.coffee

CoffeeScript v2

pm2 install coffeescript
pm2 start app.coffee

以上です!

JSONのパイプ処理

プルリクエスト

#!/bin/bash

read -d '' my_json <<_EOF_
[{
    "name"       : "app1",
    "script"     : "/home/projects/pm2_nodetest/app.js",
    "instances"  : "4",
    "error_file" : "./logz/child-err.log",
    "out_file"   : "./logz/child-out.log",
    "pid_file"   : "./logz/child.pid",
    "exec_mode"  : "cluster_mode",
    "port"       : 4200
}]
_EOF_

echo $my_json | pm2 start -

プロセスタイトル

アプリケーションをPM2で開始する際に環境変数PROCESS_TITLEを指定できます。これにより、プロセスタイトルが設定されます。これは、プロセスから特定のデータを取得しようとする際に非常に役立ちます。たとえば、ps -fC nameを使用できます。

トランスパイラ

PM2でのトランスパイラの使用チュートリアルを参照してください。

ユーザーからのヒント(Issueより)

外部リソースと記事

このページに貢献する