不過當 app 要發佈到遠端的虛擬機及設定比較複雜時,PM2 似乎是比較理想的工具。個人的一個專案需求是,production 會同時需要 http 及 https, development 則只需使用 http,而且 http port number 不同。
PM2 說明文件
以下是大致上的使用步驟:
1. 安裝 PM2 (使用 ubuntu 18.04)
  sudo npm i -g pm2
2. 在專案的資料夾內初始化建立 PM2 的設定檔 ecosystem.config.js
  pm2 init
3. 修改 ecosystem.config.js
    apps: [{
        name: 'der_linebot',
        script: 'app.js',
        output: './logs/output.log',
        error: './logs/error.log',
        // log: './logs/combined.log',
        // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
        args: 'one two',
        instances: 1,
        autorestart: true,
        watch: false,
        max_memory_restart: '1G',
        env: {
            NODE_ENV: 'development',
            HTTP_PORT: 3000,
            HTTPS_PORT: 3002
        },
        env_production: {
            NODE_ENV: 'production',
            HTTP_PORT: 80,
            HTTPS_PORT: 443
        }
    }],
主要是設定 logs 的輸出資料夾及檔名。另外就是開發和正式環境使用不同的埠號。
4. 設定 package.json 的 scripts
  "scripts": {
    "dev": "pm2 start",
    "pro": "sudo pm2 start --env production"
  },
5. 在正式環境時,已經使用 sudo 以 root 的權限啟動,但還是發生某些檔案讀取時發生權限不足的問題。又不想切換成為系統管理者(su root)。解法是完全停掉 pm2 後(sudo pm2 kill),將 ~/.pm2/ 裡的 .sock 檔變更所有者及所有者群組,例如:
  sudo chown shinder:shinder /home/shinder/.pm2/rpc.sock /home/shinder/.pm2/pub.sock
沒有留言:
張貼留言