在 Vultr 上使用 PM2 部署 Node.js 應用程式
Process Manager 2 (PM2) 是一款應用程式,可讓您為各種應用程式(例如 HTTP 伺服器和任務佇列工作程式)建立持久化服務。PM2 的叢集模式透過允許您建立同一應用程式的多個例項來實現高效的資源利用,從而進一步擴充套件了此功能。此外,PM2 提供了一個簡單的 CLI 介面來管理、擴充套件和監控正在執行的服務。
在本文中,我們將演示在 Vultr 雲計算伺服器上部署 Node.js 應用程式的步驟。我們將指導您為 Node.js 應用程式在 Vultr 上部署伺服器。您將學習安裝執行應用程式所需的依賴項,以及如何使用 PM2 建立持久化服務,以確保您的應用程式在伺服器重啟後自動重新啟動。此外,我們還將介紹設定 Nginx 作為反向代理以實現高效負載均衡,以及使用安全套接字層 (SSL) 證書保護您的應用程式以啟用 HTTPS。
在 Vultr 上部署伺服器
-
註冊並登入 Vultr 客戶門戶。
-
導航到產品頁面。
-
從側邊選單中,選擇計算。
-
點選中心的部署伺服器按鈕。
-
將 雲計算 選擇為伺服器型別。
-
在“伺服器位置”部分,選擇您選擇的區域。
-
在“伺服器映像”部分,單擊 Marketplace Apps (應用商店應用) 選項卡,然後選擇 NodeJS 映像。
the NodeJS Marketplace App 預裝了最新的 Node.js 和 Node Package Manager (npm) 二進位制檔案,這可以節省您的設定時間。
-
在“伺服器大小”部分,根據需要選擇伺服器大小。
-
在“附加功能”部分,根據需要選擇任何其他功能。
-
點選右下角的立即部署按鈕。
建立 Node.js 應用程式
已按照先前的說明建立了 Vultr 伺服器,本節將指導您使用 Express 建立一個示例 Node.js 應用程式。我們將引導您完成初始化 Node.js 專案、安裝 Express 以及建立基本端點的過程。如果您已有現成的 Node.js 應用程式,請隨時跳過此部分,克隆您的 Git 儲存庫,然後繼續閱讀下一節。
-
建立一個資料夾來儲存專案檔案,並導航到該資料夾。
bashmkdir ~/express-demo cd ~/express-demo -
初始化一個 Node.js 專案。
bashnpm init -
安裝
express庫。bashnpm install express -
建立一個名為
index.js的檔案。bashnano index.js -
將以下內容貼上到
index.js檔案中。javascriptconst express = require("express"); const app = express(); app.get("/", (req, res) => { res.send("<h1>Hello World, greetings from Vultr</h1>"); }); app.listen(3000, () => { console.log("Server listening on port 3000"); });上面的程式碼塊定義了一個基本的基於 Express 的應用程式,當您訪問主頁時,它將顯示“Hello World, greetings from Vultr”訊息。
-
儲存檔案並退出編輯器。
-
允許埠
3000監聽傳入連線。bashsudo ufw allow 3000 -
啟動應用程式。
bashnode index.js -
在 Web 瀏覽器中,導航到如下所示的 URL。
http://SERVER_IP:3000
確認訪問後,您可以停止伺服器。
使用 PM2 建立持久化服務
PM2 提供了一個易於使用的 CLI 介面,以確保您的服務持久、可靠並自動重新啟動。在本節中,您將學習如何安裝 PM2 包,以叢集模式啟動應用程式,並設定持久化服務以確保您的應用程式在伺服器啟動時自動啟動。
-
全域性安裝 PM2。
-g標誌指定 PM2 包應全域性安裝,使其可供所有系統使用者訪問。bashsudo npm install pm2 -g -
以叢集模式啟動您的 Node.js 應用程式。請確保將路徑替換為您的應用程式的實際位置。
-i標誌指定 Node.js 應用程式應在叢集模式下執行四個例項。bashpm2 start ~/express-demo -i 4 --name express-demo -
設定持久化服務。
bashpm2 startup -
儲存配置以應用更改。
bashpm2 save
配置 Nginx 作為反向代理伺服器
Nginx 在您的 Web 伺服器和客戶端之間充當反向代理。它根據您的請求配置設定來路由傳入的請求。在本節中,您將學習如何配置您的示例應用程式以使用 Nginx 實現高效的請求處理和負載均衡。您還將學習如何配置應用程式以實現反向代理。
-
登入 Vultr 客戶門戶。
-
導航到產品頁面。
-
從側邊選單,展開 網路 下拉選單,然後選擇 DNS。
-
單擊中心的 新增域名 按鈕。
-
透過選擇伺服器的 IP 地址,按照設定過程新增您的域名。
-
將以下主機名設定為您域名的主次名稱伺服器,並在域名註冊商處進行設定。
ns1.vultr.comns2.vultr.com
-
安裝 Nginx。
bashsudo apt install nginx -
在
sites-available目錄中建立一個名為express-demo.conf的檔案。bashsudo nano /etc/nginx/sites-available/express-demo.conf -
將以下內容貼上到
express-demo.conf檔案中。請確保將example.com替換為您的實際域名。bashserver { listen 80; listen [::]:80; server_name example.com www.example.com; location / { proxy_pass http://127.0.0.1:3000/; } }上面的虛擬主機配置中使用了以下指令:
server定義了您的域名的設定塊。listen指示伺服器監聽埠80以接收傳入請求。server_name指定此伺服器塊將響應的域名。location定義了伺服器應該如何處理每個傳入的請求。proxy_pass指示伺服器將請求轉發到另一個位置,在本例中為http://127.0.0.1:3000/。
-
儲存檔案並退出編輯器。
-
要啟用虛擬主機配置,請在
sites-enabled目錄中建立一個軟連結。bashsudo ln -s /etc/nginx/sites-available/express-demo.conf /etc/nginx/sites-enabled/ -
測試配置以識別錯誤。
bashsudo nginx -t如果配置沒有錯誤,您的輸出應如下所示:
bashnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful -
重啟 Nginx 伺服器。
bashsudo systemctl reload nginx -
允許埠
80的傳入連線。bashsudo ufw allow 80/tcp -
在 Web 瀏覽器中,導航到如下所示的 URL。
http://example.com
-
拒絕埠
3000的傳入連線。bashsudo ufw deny 3000
使用 Certbot 安裝 SSL 證書
Certbot 允許您從 “Let's Encrypt”(一個免費的證書頒發機構)獲取 SSL 證書。這些 SSL 證書充當加密金鑰,可在使用者和 Web 伺服器之間實現安全通訊。在本節中,您將學習如何為您的域請求一個免費的“Let's Encrypt”SSL 證書,併為您的應用程式實現 HTTPS。您還將學習如何設定證書在 90 天到期前自動續訂。
-
允許埠
443的傳入連線以使用 HTTPS。bashsudo ufw allow 443/tcp -
使用
snap包管理器安裝certbot包。bashsudo snap install --classic certbot -
為您的域請求一個新的 SSL 證書。請確保將
example.com替換為您的實際域名。bashsudo certbot --nginx -d example.com -d www.example.com -
在 Web 瀏覽器中,導航到如下所示的 URL
https://example.com
-
測試 SSL 證書在到期時是否自動續訂。
bashsudo certbot renew --dry-run
擴充套件您的 PM2 服務
在本節中,您將學習如何擴充套件和縮減您的 PM2 服務。此外,您還將探索用於監控應用程式程序的各種其他 PM2 命令。
列出所有 PM2 程序。
pm2 list
示例輸出
縮減 PM2 服務
要縮減您的 Node.js 應用程式,請執行 pm2 scale 命令,如下所示。請確保將 express-demo 替換為您的實際服務名稱。
pm2 scale express-demo 2
上述命令將例項數量從最初執行的四個例項減少到兩個。
示例輸出
擴充套件 PM2 服務
要擴充套件您的 Node.js/Express 應用程式,請執行 pm2 scale 命令,如下所示。請確保將 express-demo 替換為您的實際服務名稱。
pm2 scale express-demo 5
上述命令將例項數量從執行的兩個例項增加到五個。
示例輸出
探索其他 PM2 命令
-
停止所有 PM2 程序
bashpm2 stop all -
重新啟動所有 PM2 程序
bashpm2 restart all -
軟重新載入所有 PM2 程序
bashpm2 reload all軟重新載入透過逐個例項重新載入來幫助最大程度地減少 Node.js/Express 應用程式的停機時間。
-
監控所有 PM2 程序
bashpm2 monit -
檢查 PM2 生成的日誌
bashpm2 logs
總結
在本文中,您學習瞭如何在 Vultr 雲計算伺服器上使用 PM2 部署 Node.js 應用程式。本教程指導您完成建立、擴充套件和監控 PM2 服務的步驟。您還學習瞭如何為 PM2 服務設定 Nginx 作為反向代理伺服器,並使用 SSL 證書進行保護。
作為 Node.js 部署的擴充套件,請考慮使用 Vultr 託管資料庫來託管與您的應用程式關聯的資料庫。它提供了一個安全、高可用且易於擴充套件的資料庫叢集,可立即使用。
這是一篇由 Vultr 贊助的文章。Vultr 是全球最大的私營雲計算平臺。Vultr 是開發者的首選,已為 185 個國家/地區的 150 萬多客戶提供了靈活、可擴充套件、全球化的雲計算、雲 GPU、裸金屬和雲端儲存解決方案。瞭解更多關於 Vultr 的資訊。