一、 基礎系統初始化與安全設定
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 之間通訊的安全性。