[PM2] 使用 PM2 管理多個 .NET Core Application

  • 687
  • 0
  • PM2
  • 2022-12-23

PM2 的 PM 是 Process Manager 的簡稱,他大多用於管理 Node.js 服務。

雖然我們公司大多數 .NET Core 已經使用 Docker 的方式部屬了,不過以前在還沒導入 Docker 之前,有段時間的 .NET Core 專案是使用 PM2 來管理的,由於 PM2 原本的單一管理方式有些麻煩,在將這些 Application 轉 Docker 之前,想說還是先優化一下設置,順便分享一下使用 PM2 部屬 .NET Core 的做法。

 

 

 

Publish Path 設置

將 .NET Core Publish 的內容放進 Linux Server 內的根目錄,這裡的範例是下圖的 demoapi demoapi2 這兩個 API

 

 

Install PM2

npm install pm2 -g

 

 

Create PM2 Process

啟動(也就是新增)一個 Process 並指定名稱

pm2 start “dotnet DemoApi.dll” --name demoapi

如果有多個( demoapi、demoapi2 )此指令就是執行多次,並指定不同的名稱

 

 

查看 PM2 Process 清單

pm2 list

 

 

管理多個 Process

PM2 預設會在 Server 重啟的時候清空 Process,需要重新 start,當一個 Process 的時候還能夠用上面的指令重新 start 一次就好,但是當管理的 Application 數量較多的時候,每次重啟就會花費不少時間下很多指令,所以可以添加設置檔來管理。

 

 

ecosystem.config 設定

pm2 init simple

 

他會產生一個 ecosystem.config.js,裡面有預設的範例格式

 

編輯 ecosystem.config.js,改成 .NET Core 的 Application

sudo vi ecosystem.config.js
module.exports = {
  apps : [{
    name   : "demoapi",
    script : "dotnet DemoApi.dll",
    cwd    : "./demoapi/"
  },
  {
    name   : "demoapi2",
    script : "dotnet DemoApi2.dll",
    cwd    : "./demoapi2/"
  }]
}

cwd:啟動 Application 的目錄,也就是範例中 DemoApi.dll的路徑

 

 

手動啟動多個 Process

設置好 ecosystem.config.js 後,以後要 start 多個 Process 時,改成只需要下一個指令,就會幫我自動重啟這 2 個 Application 了

pm2 start ecosystem.config.js

 

延伸閱讀:PM2 - Ecosystem File (keymetrics.io)

 

 

設置開機自動重啟 Process

雖然可以制定上述的 ecosystem.config.js 來達到批次 Start 的功能,但是每次 Server reboot 後都需要人工啟動還是有點麻煩,所以也可以使用 Startup Script 處理。

 

 

保存要在重新啟動時還原的應用程式清單

啟動所有需要的 Process 後,儲存現有的 pm2 list,用於重新啟動後生成的設置

(使用這種方式就不需要  ecosystem.config.js 了)

pm2 save

 

 

生成啟動腳本

pm2 startup

 

 

執行啟動腳本

複製上一個步驟生成的 Script,直接執行

 

執行完畢後重開 Server 

sudo reboot

 

再看一次 pm2 list,就會看到 pm2 的 Process 已經自動啟動了。

 

 

更新啟動腳本

當 Process 有更動,想要更新啟動腳本的時候

 

更正好準備設定進啟動清單的 Process 後,再度保存現在的 Application 清單

pm2 save

 

需要先移除目前的啟動設定

pm2 unstartup

 

一樣執行他要你 copy 的腳本,看到這樣的 Log 就代表刪除成功了

 

再度生成啟動腳本

pm2 startup

再執行一次啟動腳本,結束

 

延伸閱讀:PM2 - Startup Script (keymetrics.io)