把服務部屬到主機後,如何讓服務保持執行,甚至在主機重開機後都會自動執行呢?通常我們會用 pm2 來管理 server 上的 Node.js 服務。

pm2 的 pm 是 Process Manager 的意思。通常在本機開發的時候,我會使用 nodemon 來測試服務,讓它保持長開、存檔時自動重啟;而在主機上,我會使用 pm2 來管理服務,因為它可以設定服務要不要自動重啟、要不要在存檔時自動重啟、甚至做到開機自動啟動。

我們一樣使用 上次部屬koa-api-example 來測試。

正式服務要放哪個資料夾

首先是,當你的主機上服務一多的時候,零散的放會很難管理,所以通常會找一個資料夾統一放這些服務。至於怎麼放其實沒有硬性規定,你要通通放 ~ 資料夾也可以,只是亂了點。由於 Nginx 預設把 HTML 的東西放在 /var/www/html 下,例如我們可能會有個 /var/www/html/wordpress 專案,所以我習慣把 Node.js 的服務都放在 /var/www/node 下,那我們就先搬移這個專案吧:

# 首先建立這個資料夾
sudo mkdir -p /var/www/node

# 接著搬移我們的專案
sudo mv ~/koa-api-example /var/www/node/.

安裝並使用 pm2

第一步先安裝 pm2:

npm install --global pm2

接著啟動我們的服務:

cd /var/www/node/koa-api-example
pm2 start --name koa-api-example server.js

我們使用 pm2 start 來啟動一個服務,透過 --name 來幫服務取個名字,不然 App name 叫做 server 的話太難辨識了。

pm2

如果需要有變更時自動重啟的話,可以加入 --watch 選項。

假設你加了好幾個服務的話,可以使用 pm2 listpm2 ls 來查看這個列表。

開機自動執行 pm2

由於這是在 server 上管理,為了避免我們不小心重開機,或是 server 異常斷電重開後服務沒有跟著開起來,我們應該確保 pm2 可以在開機時自動重開,並執行我們設定的這些服務。

首先執行 pm2 startup 指令,設定開機自動啟動 pm2。

如果提示 To setup the Startup Script, copy/paste the following command:,記得把那行指令複製貼上執行一次。

接著執行 pm2 save 指令,讓 pm2 記得我們設定了這些服務,下次啟動 pm2 的時候要自動執行這些東西。

本篇文章同步發表在 iT邦幫忙