從零開始,用 Rockylinux 最小安裝,建構 pm2 的運行環境流程。

類 Linux 作業系統的相關討論。
回覆文章
頭像
sunsir.code
文章: 9
註冊時間: 2016-02-04, 02:49
Gender:

從零開始,用 Rockylinux 最小安裝,建構 pm2 的運行環境流程。

文章 由 sunsir.code »

這是一份從零開始在 Rocky Linux Minimal 最小安裝環境下,建置 Node.js (PM2)、Apache 反向代理、安全性防護、SSL 憑證、SEO 與 CDN 最佳化的高效能生產環境完整規劃與執行流程。


一、 基礎系統初始化與安全設定

1. 系統更新與基礎工具安裝
執行最小安裝後,首先更新系統並安裝必要的運維與管理工具:

代碼: 選擇全部

sudo dnf update -y
sudo dnf install -y epel-release curl wget git vim net-tools firewalld fail2ban policycoreutils-python-utils
2. 設定系統時區

代碼: 選擇全部

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
2. 設定 SELinux (關鍵反向代理權限)
因為 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.local
在設定檔中啟用並調整 [sshd] 與 [apache-badbots] 等相關規則(例如設定 bantime = 1h, maxretry = 5)。

2. 啟動並啟用 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
2. 全域安裝 PM2

代碼: 選擇全部

sudo npm install -g pm2
3. 設定 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
2. 設定虛擬主機 (Virtual Host) 反向代理
建立網站專屬的設定檔:

代碼: 選擇全部

sudo vim /etc/httpd/conf.d/yourdomain.conf
輸入以下內容(假設 Node.js 應用運行在 3000 埠):

代碼: 選擇全部

<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>
檢查語法並重啟 Apache:

代碼: 選擇全部

sudo apachectl configtest
sudo systemctl restart httpd

六、 Let's Encrypt (Certbot) SSL 憑證申請

1. 安裝 Certbot 及其 Apache 套件

代碼: 選擇全部

sudo dnf install -y certbot python3-certbot-apache
2. 申請並自動設定 SSL 憑證

代碼: 選擇全部

sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
依提示輸入電子郵件、同意條款,並選擇是否將 HTTP 自動強制導向 HTTPS(建議選擇 2: Redirect)。

3. 驗證自動續期機制
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
2. 核心參數調校 (sysctl)
編輯 /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
套用設定:sudo sysctl --system


八、 應用程式整合: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
        }
      }]
    };
2. SEO 優化設置
  • SSR/SSG 渲染:確保 Node.js 端(如 Next.js 或 Nuxt)正確輸出 Meta 標籤、Open Graph (OG) 屬性及語意化 HTML。
  • Sitemap 與 Robots.txt:確保靜態或動態生成的 sitemap.xml 與 robots.txt 可透過 Apache 或應用程式順利訪問。
3. CDN 整合 (建議搭配 Cloudflare)
  • 將網域名稱 DNS 託管至 Cloudflare,啟用 Proxy (橘色雲朵)。
  • 好處:
    • 提供免費的 DDoS 防護與 Web Application Firewall (WAF)。
    • 快取靜態資源(圖片、CSS、JS),大幅減輕 Rocky Linux 主機的頻寬與負載。
    • 設定 SSL/TLS 模式為 Full (Strict),確保從 Cloudflare 到 Apache 之間通訊的安全性。
免責聲明
本文僅供參考,不負任何損害賠償之責任,請閱讀者自行斟酌,並後果自負。
回覆文章