Image text reads Deploy Node.js applications with PM2 on Vultr. Learn how to deploy and monitor applications using PM2 and enable SSL protection with Let's Encrypt. The image has light blue and white color background. In the bottom left corner, there's a blue magnifying glass icon, and in the top right corner, there's a shield icon.
贊助

在 Vultr 上使用 PM2 部署 Node.js 應用程式

閱讀時間 7 分鐘

Process Manager 2 (PM2) 是一款應用程式,可讓您為各種應用程式(例如 HTTP 伺服器和任務佇列工作程式)建立持久化服務。PM2 的叢集模式透過允許您建立同一應用程式的多個例項來實現高效的資源利用,從而進一步擴充套件了此功能。此外,PM2 提供了一個簡單的 CLI 介面來管理、擴充套件和監控正在執行的服務。

在本文中,我們將演示在 Vultr 雲計算伺服器上部署 Node.js 應用程式的步驟。我們將指導您為 Node.js 應用程式在 Vultr 上部署伺服器。您將學習安裝執行應用程式所需的依賴項,以及如何使用 PM2 建立持久化服務,以確保您的應用程式在伺服器重啟後自動重新啟動。此外,我們還將介紹設定 Nginx 作為反向代理以實現高效負載均衡,以及使用安全套接字層 (SSL) 證書保護您的應用程式以啟用 HTTPS。

在 Vultr 上部署伺服器

  1. 註冊並登入 Vultr 客戶門戶

  2. 導航到產品頁面。

  3. 從側邊選單中,選擇計算

    Screenshot of Vultr customer portal showing the Products menu on the left with Compute as a sub option and the Deploy Server button in the center
  4. 點選中心的部署伺服器按鈕。

  5. 雲計算 選擇為伺服器型別。

  6. 在“伺服器位置”部分,選擇您選擇的區域。

  7. 在“伺服器映像”部分,單擊 Marketplace Apps (應用商店應用) 選項卡,然後選擇 NodeJS 映像。

    Screenshot of Vultr customer portal showing the Marketplace Apps tab, selection of the NodeJS option and the Deploy Now button on the bottom right corner

    the NodeJS Marketplace App 預裝了最新的 Node.js 和 Node Package Manager (npm) 二進位制檔案,這可以節省您的設定時間。

  8. 在“伺服器大小”部分,根據需要選擇伺服器大小。

  9. 在“附加功能”部分,根據需要選擇任何其他功能。

  10. 點選右下角的立即部署按鈕。

建立 Node.js 應用程式

已按照先前的說明建立了 Vultr 伺服器,本節將指導您使用 Express 建立一個示例 Node.js 應用程式。我們將引導您完成初始化 Node.js 專案、安裝 Express 以及建立基本端點的過程。如果您已有現成的 Node.js 應用程式,請隨時跳過此部分,克隆您的 Git 儲存庫,然後繼續閱讀下一節。

  1. 建立一個資料夾來儲存專案檔案,並導航到該資料夾。

    bash
    mkdir ~/express-demo
    cd ~/express-demo
    
  2. 初始化一個 Node.js 專案。

    bash
    npm init
    
  3. 安裝 express 庫。

    bash
    npm install express
    
  4. 建立一個名為 index.js 的檔案。

    bash
    nano index.js
    
  5. 將以下內容貼上到 index.js 檔案中。

    javascript
    const 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”訊息。

  6. 儲存檔案並退出編輯器。

  7. 允許埠 3000 監聽傳入連線。

    bash
    sudo ufw allow 3000
    
  8. 啟動應用程式。

    bash
    node index.js
    
  9. 在 Web 瀏覽器中,導航到如下所示的 URL。

    http://SERVER_IP:3000
    

    確認訪問後,您可以停止伺服器。

使用 PM2 建立持久化服務

PM2 提供了一個易於使用的 CLI 介面,以確保您的服務持久、可靠並自動重新啟動。在本節中,您將學習如何安裝 PM2 包,以叢集模式啟動應用程式,並設定持久化服務以確保您的應用程式在伺服器啟動時自動啟動。

  1. 全域性安裝 PM2。-g 標誌指定 PM2 包應全域性安裝,使其可供所有系統使用者訪問。

    bash
    sudo npm install pm2 -g
    
  2. 以叢集模式啟動您的 Node.js 應用程式。請確保將路徑替換為您的應用程式的實際位置。-i 標誌指定 Node.js 應用程式應在叢集模式下執行四個例項。

    bash
    pm2 start ~/express-demo -i 4 --name express-demo
    
  3. 設定持久化服務。

    bash
    pm2 startup
    
  4. 儲存配置以應用更改。

    bash
    pm2 save
    

配置 Nginx 作為反向代理伺服器

Nginx 在您的 Web 伺服器和客戶端之間充當反向代理。它根據您的請求配置設定來路由傳入的請求。在本節中,您將學習如何配置您的示例應用程式以使用 Nginx 實現高效的請求處理和負載均衡。您還將學習如何配置應用程式以實現反向代理。

  1. 登入 Vultr 客戶門戶

  2. 導航到產品頁面。

  3. 從側邊選單,展開 網路 下拉選單,然後選擇 DNS

  4. 單擊中心的 新增域名 按鈕。

  5. 透過選擇伺服器的 IP 地址,按照設定過程新增您的域名。

  6. 將以下主機名設定為您域名的主次名稱伺服器,並在域名註冊商處進行設定。

    • ns1.vultr.com
    • ns2.vultr.com
  7. 安裝 Nginx。

    bash
    sudo apt install nginx
    
  8. sites-available 目錄中建立一個名為 express-demo.conf 的檔案。

    bash
    sudo nano /etc/nginx/sites-available/express-demo.conf
    
  9. 將以下內容貼上到 express-demo.conf 檔案中。請確保將 example.com 替換為您的實際域名。

    bash
    server {
         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/
  10. 儲存檔案並退出編輯器。

  11. 要啟用虛擬主機配置,請在 sites-enabled 目錄中建立一個軟連結。

    bash
    sudo ln -s /etc/nginx/sites-available/express-demo.conf /etc/nginx/sites-enabled/
    
  12. 測試配置以識別錯誤。

    bash
    sudo nginx -t
    

    如果配置沒有錯誤,您的輸出應如下所示:

    bash
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  13. 重啟 Nginx 伺服器。

    bash
    sudo systemctl reload nginx
    
  14. 允許埠 80 的傳入連線。

    bash
    sudo ufw allow 80/tcp
    
  15. 在 Web 瀏覽器中,導航到如下所示的 URL。

    http://example.com
    
  16. 拒絕埠 3000 的傳入連線。

    bash
    sudo ufw deny 3000
    

使用 Certbot 安裝 SSL 證書

Certbot 允許您從 “Let's Encrypt”(一個免費的證書頒發機構)獲取 SSL 證書。這些 SSL 證書充當加密金鑰,可在使用者和 Web 伺服器之間實現安全通訊。在本節中,您將學習如何為您的域請求一個免費的“Let's Encrypt”SSL 證書,併為您的應用程式實現 HTTPS。您還將學習如何設定證書在 90 天到期前自動續訂。

  1. 允許埠 443 的傳入連線以使用 HTTPS。

    bash
    sudo ufw allow 443/tcp
    
  2. 使用 snap 包管理器安裝 certbot 包。

    bash
    sudo snap install --classic certbot
    
  3. 為您的域請求一個新的 SSL 證書。請確保將 example.com 替換為您的實際域名。

    bash
    sudo certbot --nginx -d example.com -d www.example.com
    
  4. 在 Web 瀏覽器中,導航到如下所示的 URL

    https://example.com
    
  5. 測試 SSL 證書在到期時是否自動續訂。

    bash
    sudo certbot renew --dry-run
    

擴充套件您的 PM2 服務

在本節中,您將學習如何擴充套件和縮減您的 PM2 服務。此外,您還將探索用於監控應用程式程序的各種其他 PM2 命令。

列出所有 PM2 程序。

bash
pm2 list

示例輸出

Sample output of all PM2 processes listed

縮減 PM2 服務

要縮減您的 Node.js 應用程式,請執行 pm2 scale 命令,如下所示。請確保將 express-demo 替換為您的實際服務名稱。

bash
pm2 scale express-demo 2

上述命令將例項數量從最初執行的四個例項減少到兩個。

示例輸出

Sample output of a table showing two instances running with a warning at the end prompting to save the list using the `pm2 save` command

擴充套件 PM2 服務

要擴充套件您的 Node.js/Express 應用程式,請執行 pm2 scale 命令,如下所示。請確保將 express-demo 替換為您的實際服務名稱。

bash
pm2 scale express-demo 5

上述命令將例項數量從執行的兩個例項增加到五個。

示例輸出

Sample output of a table showing five instances running with a warning at the end prompting to save the list using the `pm2 save` command

探索其他 PM2 命令

  • 停止所有 PM2 程序

    bash
    pm2 stop all
    
  • 重新啟動所有 PM2 程序

    bash
    pm2 restart all
    
  • 軟重新載入所有 PM2 程序

    bash
    pm2 reload all
    

    軟重新載入透過逐個例項重新載入來幫助最大程度地減少 Node.js/Express 應用程式的停機時間。

  • 監控所有 PM2 程序

    bash
    pm2 monit
    
  • 檢查 PM2 生成的日誌

    bash
    pm2 logs
    

總結

在本文中,您學習瞭如何在 Vultr 雲計算伺服器上使用 PM2 部署 Node.js 應用程式。本教程指導您完成建立、擴充套件和監控 PM2 服務的步驟。您還學習瞭如何為 PM2 服務設定 Nginx 作為反向代理伺服器,並使用 SSL 證書進行保護。

作為 Node.js 部署的擴充套件,請考慮使用 Vultr 託管資料庫來託管與您的應用程式關聯的資料庫。它提供了一個安全、高可用且易於擴充套件的資料庫叢集,可立即使用。

這是一篇由 Vultr 贊助的文章。Vultr 是全球最大的私營雲計算平臺。Vultr 是開發者的首選,已為 185 個國家/地區的 150 萬多客戶提供了靈活、可擴充套件、全球化的雲計算、雲 GPU、裸金屬和雲端儲存解決方案。瞭解更多關於 Vultr 的資訊。