iT邦幫忙

1

【Day 29】雲端部署與監控維運:利用 Docker、Nginx 反向代理與 Uptime Kuma 實現 n8n 7x24 小時不間斷服務

  • 分享至 

  • xImage
  •  

在昨天的 Day 28 中,我們完成了資安與權限控管,確保了 API Key 的安全以及敏感數據的脫敏保護。然而,如果我們的 n8n 自動化流程只是執行在 local 環境(如本機電腦),一旦電腦關機、網路斷線或休眠,所有的 Webhook 觸發器、Cron 定時巡檢與 Telegram / LINE 機器人就會瞬間失靈!

今天我們要將這套 AI 待辦系統正式「推向生產環境(Production)」!透過 Docker Composer 進行多容器化部署、使用 Nginx / Let's Encrypt 配置 SSL 安全憑證與反向代理,並導入 Uptime Kuma 進行 7x24 小時的全天候服務監控與異常警報,確保系統穩定運行不中斷!


為什麼需要雲端部署與獨立維運?

  1. 7x24 不間斷服務(High Availability):雲端 VPS(如 AWS, GCP, DigitalOcean 或 Linode)能確保伺服器全年無休,隨時接收外部傳來的 Webhook 請求。
  2. 獲得標準 HTTPS 安全網址:Telegram / LINE Messaging API 與許多第三方 Webhook 都強制要求必須使用 HTTPS 網址,傳統本機 http://localhost:5678 無法直接於生產環境運作。
  3. 主動式系統探針(Proactive Health Check):伺服器偶爾可能因記憶體耗盡或網路波動掛掉,透過獨立監控工具可以在系統宕機時第一時間發送推播警告。

核心實作步驟說明

1. 使用 Docker Compose 快速編排 n8n 與 PostgreSQL

在 VPS 伺服器上建立 docker-compose.yml 檔案,將 n8n 與 PostgreSQL 資料庫獨立容器化:

version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    restart: always
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=your_secure_db_password
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=your_secure_db_password
      - N8N_HOST=n8n.yourdomain.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.yourdomain.com/
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  postgres_data:
  n8n_data:

2. 配置 Nginx 反向代理與 Let's Encrypt SSL 自動修復

  • 安裝 Nginx 與 Certbot:
    使用 Certbot 免費申請 Let's Encrypt SSL 憑證,自動為網域(例如 n8n.yourdomain.com)配置 HTTPS 通訊。
  • Nginx 設定檔關鍵設定:
    開啟 WebSocket 支援(n8n 畫布即時更新需要)與安全 Header:
server {
    server_name n8n.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. 部署 Uptime Kuma 進行全天候健康檢查(Health Check)

  • 在 VPS 啟動另一個輕量級監控容器 Uptime Kuma。

  • 新增監控探針(Monitor):

  • Monitor Type:HTTP(s)

  • URL:[https://n8n.yourdomain.com/healthz](https://n8n.yourdomain.com/healthz)(n8n 內建的健康檢查 API 端點)

  • Heartbeat Interval:每 60 秒 探測一次。

  • 配置警報頻道 (Notification):將 Uptime Kuma 綁定至管理員的 Telegram Bot。當 n8n 服務無回應超過 2 分鐘,Uptime Kuma 會發送紅燈警報!

4. 服務上線驗證與自動重啟測試

  • 執行 docker compose up -d 啟動所有容器。
  • 瀏覽器造訪 [https://n8n.yourdomain.com](https://n8n.yourdomain.com),確認 SSL 鎖頭圖示正常顯示。
  • 手動執行 docker stop n8n_container_1 故意模擬崩潰,確認 Uptime Kuma 於 2 分鐘內於 Telegram 跳出 🚨 服務中斷通知,且 Docker 自動重啟(restart: always)後服務成功復原!

今天我們成功把原本只能跑在 local 的實照專案,升級成了 Production 等級的 7x24 雲端自動化架構。明天「Day 30」我們將迎來 2026 鐵人賽的最終完結篇——「全系列終極成果發表、系統架構總複習與未來 AI 生態系擴充藍圖」!


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言