教學中級 · 30 分鐘

在預算型 VPS 上設置簡單的客戶門戶網站

小型企業在不支付昂貴 SaaS 技術棧費用下,在自有 VPS 上啟動輕量級客戶門戶網站的實用方法。

發佈於 Apr 18, 2026 · 更新於 Apr 18, 2026

摘要

您最終將擁有一個運行在 Ubuntu VPS 上的輕量級客戶門戶網站,由 PM2 管理,並透過帶有自動 HTTPS 功能的 Caddy 進行前端處理,且結構設計便於未來升級。

為什麼此設置適合小型企業

一個簡單的客戶門戶網站不需要從昂貴的 SaaS 訂閱或臃腫的平台開始。如果您的目標是為客戶提供一個安全的地方進行登錄、查看狀態、交換文件並處理少量循環任務,那麼預算型 VPS 可以是一個實用的第一步。

本教程延續了我們之前介紹的規劃方法:從小處著手,保持範圍明確,並避免構建超出您工作流程實際需求的內容。與其將門戶網站視為完整的產品套件,不如部署一個輕量級的基礎架構,這將更容易控制、運行成本更低,且日後擴展更簡單。

本教程涵蓋內容

在本指南中,您將準備一個 Ubuntu VPS,安裝門戶網站所需的運行環境,部署應用程序,在前面配置 Caddy 以實現自動 HTTPS,並添加一些生產環境的基礎設置,例如環境變量、防火牆規則和進程管理。

當您已經知道門戶網站的最小範圍,並希望有一條直接的路徑將其上線時,這非常適合您。

開始之前

本指南假設:

  • 您擁有具有 sudo 權限的 Ubuntu 24.04+ VPS
  • 您控制域名或子域名的 DNS
  • 您的門戶應用程序已使用 Next.js 或其他基於 Node 的技術棧構建
  • 您熟悉在終端機中使用 SSH

如果您仍在決定門戶網站實際應該處理哪些內容,請在部署之前先從規劃方面開始。

你需要的東西

必需

  • 具有 sudo 權限的 Ubuntu 24.04+ VPS
  • 指向 VPS 的域名或子域名
  • 對服務器的 SSH 訪問權限

建議

  • 專用的部署用戶,或者至少有清晰的部署文件夾結構
  • 具有文檔化環境變量的生產就緒應用程序存儲庫
  • 用於 SSH、HTTP 和 HTTPS 的基本防火牆訪問權限

步驟

步驟 1

在部署前定義門戶網站的最小範圍

確保您部署的是一個重點明確的第一階段門戶網站,而不是一個定義不明的未來系統。

在接觸服務器之前,寫下您門戶網站最小的可用版本。

例如,您的第一階段可能僅包括:

  • 安全登錄
  • 狀態顯示
  • 文件上傳或文件交付
  • 小型請求列表
  • 一個後台內部工作流程

您要避免的是為一個仍沒有明確界限的門戶網站部署基礎設施。

當應用程序首先只需要支持少數真實的工作流程時,簡單的生產部署會變得容易得多。

預期結果

您已為第一階段準備了簡短的書面範圍,並可以解釋門戶網站將處理和不會處理哪些內容。

步驟 2

準備 VPS 並更新基礎軟體包

在安裝應用程序技術棧之前,從乾淨的服務器狀態開始。

bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ufw

如果您尚未配置防火牆,請允許您將會用到的基本端口:

bash
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

這為公共 Web 服務提供了一個簡單的基準,同時不會讓主機完全暴露。

預期結果

服務器軟體包已更新,已安裝 gitcurl,且防火牆允許 SSH、HTTP 和 HTTPS。

步驟 3

安裝 Node.js 和 PM2

設置您的門戶應用程序在生產環境中將使用的運行環境和進程管理器。

bash
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g pm2

檢查安裝情況:

bash
node -v
npm -v
pm2 --version

PM2 將幫助您保持應用程序運行,並在重啟或崩潰後重新啟動它。

預期結果

node -v 顯示 Node.js 22.x,npm -v 打印版本,且 pm2 --version 成功返回。

步驟 4

克隆門戶應用程序並安裝依賴項

將應用程序移至服務器並為生產構建做準備。

bash
cd /var/www
sudo mkdir -p client-portal
sudo chown $USER:$USER client-portal
cd client-portal

git clone <your-repo-url> app
cd app
npm install

如果您的存儲庫已經包含 lockfile,請保留它,以確保生產環境的安裝保持一致。

預期結果

應用程序源代碼已在服務器上,且 npm install 完成且無依賴錯誤。

步驟 5

添加環境變量並構建應用程序

在啟動之前,配置門戶網站所需的生產設置。

根據您的應用程序預期的變量創建生產環境文件。

bash
cp .env.example .env.production
nano .env.production

然後構建應用程序:

bash
npm run build

典型的生產變量可能包括:

  • 應用程序 URL
  • 數據庫連接字符串
  • 身份驗證密鑰
  • 文件存儲配置
  • 電子郵件發送設置

不要將這些值硬編碼到應用程序本身中。

預期結果

您的生產環境文件已就緒,且 npm run build 成功完成。

步驟 6

使用 PM2 啟動門戶網站

以一種在斷開連接後仍能生存並可以自動重新啟動的方式運行應用程序。

對於典型的 Next.js 部署,您可以像這樣啟動生產服務器:

bash
pm2 start npm --name client-portal -- start

保存進程列表並啟用重啟時啟動:

bash
pm2 save
pm2 startup

pm2 startup 之後,PM2 會打印出另一個命令。請完全按照顯示的方式運行該命令。

然後確認進程已在線:

bash
pm2 status

預期結果

PM2 顯示 client-portal 進程為在線狀態,且啟動配置已保存。

步驟 7

配置 Caddy 作為帶有 HTTPS 的反向代理

將 Caddy 放在應用程序前面,以便您的門戶網站通過您的域名安全地提供服務。

安裝 Caddy:

bash
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
sudo apt install -y caddy

編輯 Caddyfile:

bash
sudo nano /etc/caddy/Caddyfile

將內容替換為您的域名和本地應用程序端口:

caddy
portal.example.com {
    reverse_proxy 127.0.0.1:3000
}

然後重新加載 Caddy:

bash
sudo systemctl reload caddy
sudo systemctl status caddy

一旦 DNS 指向正確,Caddy 就可以自動請求並更新 HTTPS 證書。

預期結果

Caddy 正在運行,您的域名已解析到 VPS,且門戶網站通過 HTTPS 加載。

步驟 8

進行最後的生產檢查

確認部署運作起來像一個真實的客戶門戶網站,而不僅僅是一個正在運行的 Web 應用程序。

在宣佈部署完成之前,測試對實際用戶重要的部分。

至少檢查以下內容:

  • 門戶網站是否在正確的域名上加載
  • HTTPS 是否已激活
  • 登錄是否正常
  • 主儀表板或落地頁是否正確渲染
  • 任何與文件相關的工作流程是否按預期運行
  • 瀏覽器控制台或 PM2 日誌中是否沒有錯誤

您可以使用以下命令檢查應用程序日誌:

bash
pm2 logs client-portal

這次最終檢查非常重要,因為只有當業務工作流程正常運作時,門戶網站才是有用的,而不僅僅是服務器在線。

預期結果

您可以在其正式域名上訪問門戶網站,核心用戶流程正常工作,且日誌中沒有出現任何阻塞性的運行時錯誤。

接下來會發生什麼

後續步驟

門戶網站上線後,接下來的改進通常涉及使日常操作更有用的部分:安全登錄、文件上傳處理、備份、基於角色的訪問控制,以及與團隊已使用的系統進行集成。

您不需要在第一天就具備所有功能。更好的方法是先讓穩定版本上線,確認範圍可行,然後分層添加自動化。

如果您希望在工作流程設計、安全託管和長期所有權方面獲得幫助,將簡單的部署轉變為生產級的門戶網站,請參閱我們的 Services

需要幫助實現嗎?

我們為小型企業打造客製化方案。讓我們協助您的下一個項目。