在預算型 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 的基本防火牆訪問權限
步驟
在部署前定義門戶網站的最小範圍
確保您部署的是一個重點明確的第一階段門戶網站,而不是一個定義不明的未來系統。
在接觸服務器之前,寫下您門戶網站最小的可用版本。
例如,您的第一階段可能僅包括:
- 安全登錄
- 狀態顯示
- 文件上傳或文件交付
- 小型請求列表
- 一個後台內部工作流程
您要避免的是為一個仍沒有明確界限的門戶網站部署基礎設施。
當應用程序首先只需要支持少數真實的工作流程時,簡單的生產部署會變得容易得多。
預期結果
您已為第一階段準備了簡短的書面範圍,並可以解釋門戶網站將處理和不會處理哪些內容。
準備 VPS 並更新基礎軟體包
在安裝應用程序技術棧之前,從乾淨的服務器狀態開始。
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ufw
如果您尚未配置防火牆,請允許您將會用到的基本端口:
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
這為公共 Web 服務提供了一個簡單的基準,同時不會讓主機完全暴露。
預期結果
服務器軟體包已更新,已安裝 git 和 curl,且防火牆允許 SSH、HTTP 和 HTTPS。
安裝 Node.js 和 PM2
設置您的門戶應用程序在生產環境中將使用的運行環境和進程管理器。
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g pm2
檢查安裝情況:
node -v
npm -v
pm2 --version
PM2 將幫助您保持應用程序運行,並在重啟或崩潰後重新啟動它。
預期結果
node -v 顯示 Node.js 22.x,npm -v 打印版本,且 pm2 --version 成功返回。
克隆門戶應用程序並安裝依賴項
將應用程序移至服務器並為生產構建做準備。
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 完成且無依賴錯誤。
添加環境變量並構建應用程序
在啟動之前,配置門戶網站所需的生產設置。
根據您的應用程序預期的變量創建生產環境文件。
cp .env.example .env.production
nano .env.production
然後構建應用程序:
npm run build
典型的生產變量可能包括:
- 應用程序 URL
- 數據庫連接字符串
- 身份驗證密鑰
- 文件存儲配置
- 電子郵件發送設置
不要將這些值硬編碼到應用程序本身中。
預期結果
您的生產環境文件已就緒,且 npm run build 成功完成。
使用 PM2 啟動門戶網站
以一種在斷開連接後仍能生存並可以自動重新啟動的方式運行應用程序。
對於典型的 Next.js 部署,您可以像這樣啟動生產服務器:
pm2 start npm --name client-portal -- start
保存進程列表並啟用重啟時啟動:
pm2 save
pm2 startup
pm2 startup 之後,PM2 會打印出另一個命令。請完全按照顯示的方式運行該命令。
然後確認進程已在線:
pm2 status
預期結果
PM2 顯示 client-portal 進程為在線狀態,且啟動配置已保存。
配置 Caddy 作為帶有 HTTPS 的反向代理
將 Caddy 放在應用程序前面,以便您的門戶網站通過您的域名安全地提供服務。
安裝 Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
sudo apt install -y caddy
編輯 Caddyfile:
sudo nano /etc/caddy/Caddyfile
將內容替換為您的域名和本地應用程序端口:
portal.example.com {
reverse_proxy 127.0.0.1:3000
}
然後重新加載 Caddy:
sudo systemctl reload caddy
sudo systemctl status caddy
一旦 DNS 指向正確,Caddy 就可以自動請求並更新 HTTPS 證書。
預期結果
Caddy 正在運行,您的域名已解析到 VPS,且門戶網站通過 HTTPS 加載。
進行最後的生產檢查
確認部署運作起來像一個真實的客戶門戶網站,而不僅僅是一個正在運行的 Web 應用程序。
在宣佈部署完成之前,測試對實際用戶重要的部分。
至少檢查以下內容:
- 門戶網站是否在正確的域名上加載
- HTTPS 是否已激活
- 登錄是否正常
- 主儀表板或落地頁是否正確渲染
- 任何與文件相關的工作流程是否按預期運行
- 瀏覽器控制台或 PM2 日誌中是否沒有錯誤
您可以使用以下命令檢查應用程序日誌:
pm2 logs client-portal
這次最終檢查非常重要,因為只有當業務工作流程正常運作時,門戶網站才是有用的,而不僅僅是服務器在線。
預期結果
您可以在其正式域名上訪問門戶網站,核心用戶流程正常工作,且日誌中沒有出現任何阻塞性的運行時錯誤。
接下來會發生什麼
後續步驟
門戶網站上線後,接下來的改進通常涉及使日常操作更有用的部分:安全登錄、文件上傳處理、備份、基於角色的訪問控制,以及與團隊已使用的系統進行集成。
您不需要在第一天就具備所有功能。更好的方法是先讓穩定版本上線,確認範圍可行,然後分層添加自動化。
如果您希望在工作流程設計、安全託管和長期所有權方面獲得幫助,將簡單的部署轉變為生產級的門戶網站,請參閱我們的 Services。