How To

Menggunakan fork mode

  1. Buat file PM2 baru, saya beri nama pm2-fork.json

  2. Isi dengan

{
  "apps" : [
    {
      "name": "fork-backend",
      "script": "index.js",
      "exec_interpreter": "node",
      "exec_mode": "fork",
      "instances": "2",
      "autorestart": true,
      "watch": false,
      "max_memory_restart": "1G",
      "error_file": "/dev/null",
      "out_file": "/dev/null",
      "increment_var" : "PORT",
      "env": {
        "PORT": 3000
      }
    }
  ]
}

Penjelasan

{
  "apps" : [
    {
      "name": "fork-backend",
      "script": "index.js",
      "exec_interpreter": "node",
      "exec_mode": "fork",
      #you can add fork/replica 
      "instances": "2",
      "autorestart": true,
      "watch": false,
      "max_memory_restart": "1G",
      #disable log
      "error_file": "/dev/null",
      "out_file": "/dev/null",
      #port will be increased
      "increment_var" : "PORT",
      #hapus variabel PORT di .env 
      "env": {
        #it will create two replica with 2 port, 3000 & 3001 (because we defined instances: 2)
        "PORT": 3000
      }

    }
  ]
}

Menggunakan cluster mode

  1. Buat file PM2 baru, saya beri nama pm2-cluster.json

  2. Isi dengan

{
  "apps" : [
    {
      "name": "cluster-backend",
      "script": "index.js",
      "exec_interpreter": "node",
      "exec_mode": "cluster",
      "instances": "max",
      "autorestart": true,
      "watch": false,
      "max_memory_restart": "1G",
      "error_file": "/dev/null",
      "out_file": "/dev/null"
    }
  ]
}

Penjelasan

{
  "apps" : [
    {
      "name": "cluster-backend",
      "script": "index.js",
      "exec_interpreter": "node",
      "exec_mode": "cluster",
      #if you got 2 core, than it will create 2 replica
      "instances": "max",
      "autorestart": true,
      #dont watch change file, juse use `pm2 reload`
      "watch": false,
      "max_memory_restart": "1G",
      #disable log
      "error_file": "/dev/null",
      "out_file": "/dev/null"
      #you dont need specify port
      #it will use internal load balance
    }
  ]
}

Berbagai Macam Error yang Ada Saat Menggunakan PM2

  1. npm ERR! could not determine executable to run. Solusi, pastikan nodejs sudah terinstall. Di kasus saya, ini terjadi karena sebelumnya menggunakan
      "script": "npx",
      "args" : "index.js",

dan berhasil jalan tanpa error, tapi setelah beberapa lama (entah setelah update, jadi tidak bisa), solusi cukup di ganti

      #dari awal memang tidak menggunakan npx
      "script": "index.js",
      "exec_interpreter": "node",

Sumber:

  1. Github - Unitech/pm2 - SyntaxError: Invalid or unexpected token in /bin/bash

  2. Stackoverflow - Disable PM2 Log