從零開始,用 Rockylinux 最小安裝,建構 pm2 的運行環境流程。
發表於 : 2026-07-21, 18:44
這是一份從零開始在 Rocky Linux Minimal 最小安裝環境下,建置 Node.js (PM2)、Apache 反向代理、安全性防護、SSL 憑證、SEO 與 CDN 最佳化的高效能生產環境完整規劃與執行流程。
一、 基礎系統初始化與安全設定
1. 系統更新與基礎工具安裝
執行最小安裝後,首先更新系統並安裝必要的運維與管理工具:
2. 設定系統時區
二、 防火牆 (Firewalld) 與 SELinux 設置
1. 設定 Firewalld
開啟必要的網路連接埠(HTTP、HTTPS 與自訂 SSH 埠)
2. 設定 SELinux (關鍵反向代理權限)
因為 Apache 需要將流量轉發至本地端由 PM2 運行的 Node.js 服務(例如 Port 3000),必須賦予 Apache 網路連線權限:
三、 入侵防禦 (Fail2ban) 設置
1. 配置 Fail2ban 監控 SSH 與 Apache
建立本地設定檔 jail.local:
在設定檔中啟用並調整 [sshd] 與 [apache-badbots] 等相關規則(例如設定 bantime = 1h, maxretry = 5)。
2. 啟動並啟用 Fail2ban
四、 Node.js 與 PM2 運行環境建置
1. 安裝 Node.js LTS
使用 NodeSource 套件庫安裝最新的長期支援版 (LTS) Node.js:
2. 全域安裝 PM2
3. 設定 PM2 開機自動啟動
執行以下指令並按照終端機提示的輸出,複製貼上對應的 root 授權指令:
五、 Apache 網頁伺服器與反向代理設置
1. 安裝 Apache (httpd)
2. 設定虛擬主機 (Virtual Host) 反向代理
建立網站專屬的設定檔:
輸入以下內容(假設 Node.js 應用運行在 3000 埠):
檢查語法並重啟 Apache:
六、 Let's Encrypt (Certbot) SSL 憑證申請
1. 安裝 Certbot 及其 Apache 套件
2. 申請並自動設定 SSL 憑證
依提示輸入電子郵件、同意條款,並選擇是否將 HTTP 自動強制導向 HTTPS(建議選擇 2: Redirect)。
3. 驗證自動續期機制
Certbot 預設會安裝 systemd timer 來處理憑證自動續期:
七、 安全與效能調校 (Security & Performance)
1. SSH 服務硬化
編輯 /etc/ssh/sshd_config:
編輯 /etc/sysctl.d/99-custom.conf 優化網路與記憶體效能:
套用設定:sudo sysctl --system
八、 應用程式整合:Clerk、OAuth、SEO 與 CDN
1. Clerk 與 OAuth 環境變數管理
一、 基礎系統初始化與安全設定
1. 系統更新與基礎工具安裝
執行最小安裝後,首先更新系統並安裝必要的運維與管理工具:
代碼: 選擇全部
sudo dnf update -y
sudo dnf install -y epel-release curl wget git vim net-tools firewalld fail2ban policycoreutils-python-utils代碼: 選擇全部
sudo timedatectl set-timezone Asia/Taipei二、 防火牆 (Firewalld) 與 SELinux 設置
1. 設定 Firewalld
開啟必要的網路連接埠(HTTP、HTTPS 與自訂 SSH 埠)
代碼: 選擇全部
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 若有更改預設 SSH 連接埠(例如 2222),需在此開放
# sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload因為 Apache 需要將流量轉發至本地端由 PM2 運行的 Node.js 服務(例如 Port 3000),必須賦予 Apache 網路連線權限:
代碼: 選擇全部
sudo setsebool -p httpd_can_network_connect 1三、 入侵防禦 (Fail2ban) 設置
1. 配置 Fail2ban 監控 SSH 與 Apache
建立本地設定檔 jail.local:
代碼: 選擇全部
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local2. 啟動並啟用 Fail2ban
代碼: 選擇全部
sudo systemctl enable --now fail2ban四、 Node.js 與 PM2 運行環境建置
1. 安裝 Node.js LTS
使用 NodeSource 套件庫安裝最新的長期支援版 (LTS) Node.js:
代碼: 選擇全部
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo dnf install -y nodejs
node -v && npm -v代碼: 選擇全部
sudo npm install -g pm2執行以下指令並按照終端機提示的輸出,複製貼上對應的 root 授權指令:
代碼: 選擇全部
pm2 startup systemd -u root --hp /root五、 Apache 網頁伺服器與反向代理設置
1. 安裝 Apache (httpd)
代碼: 選擇全部
sudo dnf install -y httpd mod_ssl
sudo systemctl enable --now httpd建立網站專屬的設定檔:
代碼: 選擇全部
sudo vim /etc/httpd/conf.d/yourdomain.conf代碼: 選擇全部
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ErrorLog /var/log/httpd/yourdomain_error.log
CustomLog /var/log/httpd/yourdomain_access.log combined
</VirtualHost>代碼: 選擇全部
sudo apachectl configtest
sudo systemctl restart httpd六、 Let's Encrypt (Certbot) SSL 憑證申請
1. 安裝 Certbot 及其 Apache 套件
代碼: 選擇全部
sudo dnf install -y certbot python3-certbot-apache代碼: 選擇全部
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com3. 驗證自動續期機制
Certbot 預設會安裝 systemd timer 來處理憑證自動續期:
代碼: 選擇全部
sudo systemctl list-timers | grep certbot七、 安全與效能調校 (Security & Performance)
1. SSH 服務硬化
編輯 /etc/ssh/sshd_config:
- 停用密碼登入,改用 SSH 金鑰 (Public Key) 認證:PasswordAuthentication no
- 禁止 Root 直接登入:PermitRootLogin no
- 重新啟動 SSH 服務:sudo systemctl restart sshd
編輯 /etc/sysctl.d/99-custom.conf 優化網路與記憶體效能:
代碼: 選擇全部
# 提高網路連線暫存佇列,應付突發流量
net.core.somaxconn = 1024
# 啟用 TCP SYN Cookie 保護防範 SYN Flood 攻擊
net.ipv4.tcp_syncookies = 1
# 優化 TIME_WAIT 狀態連接回收
net.ipv4.tcp_tw_reuse = 1八、 應用程式整合:Clerk、OAuth、SEO 與 CDN
1. Clerk 與 OAuth 環境變數管理
- 安全實踐:切勿將 Clerk API Keys 或 OAuth Client Secrets 硬編碼在程式碼中。
- 建議在專案根目錄建立 .env.production,並透過 PM2 的生態系檔案 (ecosystem.config.js) 載入:
代碼: 選擇全部
module.exports = { apps: [{ name: 'my-app', script: './server.js', env_production: { NODE_ENV: 'production', PORT: 3000 } }] };
- OAuth 回調設定:記得在 Google / GitHub 等 OAuth 開發者後台及 Clerk Dashboard 中,將 Redirect URI 更新為正式的 [https://yourdomain.com/](https://yourdomain.com/)...。
- SSR/SSG 渲染:確保 Node.js 端(如 Next.js 或 Nuxt)正確輸出 Meta 標籤、Open Graph (OG) 屬性及語意化 HTML。
- Sitemap 與 Robots.txt:確保靜態或動態生成的 sitemap.xml 與 robots.txt 可透過 Apache 或應用程式順利訪問。
- 將網域名稱 DNS 託管至 Cloudflare,啟用 Proxy (橘色雲朵)。
- 好處:
- 提供免費的 DDoS 防護與 Web Application Firewall (WAF)。
- 快取靜態資源(圖片、CSS、JS),大幅減輕 Rocky Linux 主機的頻寬與負載。
- 設定 SSL/TLS 模式為 Full (Strict),確保從 Cloudflare 到 Apache 之間通訊的安全性。