n8n Deploy 教學:自動化工作流程自架部署指南【2025】

n8n Deploy 教學:自動化工作流程自架部署指南【2025】

想要自動化你的工作流程,卻不想被 Zapier 的價格綁架?

n8n 是一個開源的工作流程自動化平台,功能媲美 Zapier 和 Make,但你可以自己架設,完全免費使用。這篇文章將教你從零開始,在自己的伺服器上部署 n8n。

不管是串接 API、自動發送通知、還是建立複雜的資料處理流程,n8n 都能幫你實現。而自架版本更讓你擁有完整的資料控制權。

n8n 是什麼?為什麼要自架

n8n(讀作 n-eight-n 或 nodemation)是一個開源的工作流程自動化工具。

n8n 核心功能

視覺化流程編輯

n8n 提供拖拉式的流程編輯器,你可以:
- 用滑鼠連接不同節點
- 即時預覽資料流向
- 不寫程式碼完成複雜自動化

400+ 整合節點

內建支援各種服務的整合:
- 通訊工具:Slack、Discord、Telegram、Line
- 專案管理:Notion、Trello、Asana、Jira
- 雲端服務:Google Sheets、Airtable、Dropbox
- 開發工具:GitHub、GitLab、Jenkins
- 資料庫:MySQL、PostgreSQL、MongoDB
- 還有 HTTP Request 節點可以串接任何 API

程式碼節點

對於進階需求,n8n 支援 JavaScript 和 Python 程式碼節點,讓你可以處理複雜的資料轉換。

為什麼要自架?

n8n 提供雲端版本(n8n Cloud),但自架版本有以下優勢:

資料完全自主

所有工作流程資料都存在你自己的伺服器,不用擔心敏感資料外流。對於處理客戶資料、財務資訊的企業來說,這點非常重要。

無執行次數限制

n8n Cloud 的免費方案每月限制執行次數,付費方案也有上限。自架版本完全沒有限制,想跑多少次就跑多少次。

長期成本更低

一台 $5/月的 VPS 就能運行 n8n,比 n8n Cloud 的付費方案便宜很多,更別說 Zapier 動輒上百美元的月費。

完整客製化能力

自架版本可以安裝社群開發的節點、修改設定、甚至修改原始碼來符合特殊需求。

n8n vs 其他自動化工具

特性 n8n(自架) Zapier Make
價格 VPS 成本(~$5/月) $19.99+/月 $9+/月
執行次數 無限制 有限制 有限制
資料存放 自己的伺服器 雲端 雲端
整合數量 400+ 6000+ 1500+
程式碼支援 JavaScript/Python 有限 JavaScript
開源

想了解更多部署基礎知識,請參考我們的 程式部署完整指南

部署方式選擇

n8n 支援多種部署方式,根據你的需求選擇最適合的。

方式一:Docker(推薦)

Docker 是最推薦的部署方式:

優點:
- 環境隔離,不影響系統其他應用
- 一鍵啟動,設定簡單
- 容易升級和備份
- 跨平台支援

適合:
- 大多數使用者
- 需要穩定生產環境
- 想要簡單維護的團隊

方式二:npm 直接安裝

直接用 npm 安裝到系統:

npm install n8n -g
n8n start

優點:
- 安裝最簡單
- 適合快速測試

缺點:
- 需要管理 Node.js 版本
- 升級較麻煩
- 不適合生產環境

適合:
- 本地開發測試
- 臨時試用

方式三:Railway / Render 一鍵部署

這些平台提供一鍵部署模板:

優點:
- 最快速上手
- 無需管理伺服器

缺點:
- 成本較高
- 某些限制

適合:
- 不想管理伺服器
- 預算充足

💡 不確定該選哪種部署方式?讓 VibeFix 幫你評估

本教學重點:Docker + VPS

這篇教學將聚焦在 Docker 部署到 VPS 的方式,這是最平衡的選擇:

  • 成本低(~$5/月)
  • 效能好
  • 維護簡單
  • 適合生產環境

準備工作

在開始部署前,你需要準備以下資源。

VPS 伺服器

推薦的 VPS 規格:

規格 最低需求 建議規格
CPU 1 vCPU 2 vCPU
RAM 1 GB 2 GB
儲存 20 GB SSD 40 GB SSD
系統 Ubuntu 20.04+ Ubuntu 22.04

推薦的 VPS 供應商:
- DigitalOcean($6/月起)
- Vultr($5/月起)
- Linode($5/月起)
- AWS Lightsail($5/月起)

網域名稱

為了使用 HTTPS,你需要一個網域名稱,並將子網域指向你的 VPS IP。

例如:n8n.yourdomain.com123.45.67.89

在 DNS 設定中新增 A 記錄:

類型: A
名稱: n8n
值: 你的 VPS IP
TTL: 300

SSH 連線

確保你可以 SSH 連線到 VPS:

ssh root@your-server-ip

如果你對 SSH 金鑰設定不熟悉,可以參考我們的 GitHub Deploy Key 設定教學

Docker 環境安裝

首先在 VPS 上安裝 Docker 和 Docker Compose。

安裝 Docker

連線到 VPS 後,執行以下指令:

# 更新套件清單
sudo apt update

# 安裝必要的相依套件
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 新增 Docker 官方 GPG 金鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 新增 Docker 套件庫
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安裝 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 啟動 Docker 並設定開機自動啟動
sudo systemctl start docker
sudo systemctl enable docker

安裝 Docker Compose

# 下載 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 設定執行權限
sudo chmod +x /usr/local/bin/docker-compose

# 驗證安裝
docker-compose --version

設定非 root 使用者(可選但建議)

為了安全性,建議使用非 root 使用者操作 Docker:

# 將當前使用者加入 docker 群組
sudo usermod -aG docker $USER

# 重新登入讓群組生效
exit
ssh user@your-server-ip

n8n Docker Compose 設定

現在來建立 n8n 的 Docker Compose 設定檔。

建立專案目錄

mkdir -p ~/n8n
cd ~/n8n

基本版 docker-compose.yml

先從最基本的設定開始:

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.yourdomain.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.yourdomain.com/
      - GENERIC_TIMEZONE=Asia/Taipei
      - TZ=Asia/Taipei
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

這個設定會:
- 使用最新版 n8n 映像檔
- 開放 5678 連接埠
- 設定時區為台北
- 將資料持久化到 Docker volume

啟動測試

docker-compose up -d

等待幾秒後,可以透過 http://your-server-ip:5678 存取 n8n。

但這樣還不夠,因為:
- 沒有 HTTPS(不安全)
- 使用內建 SQLite(效能有限)
- 沒有反向代理

生產環境完整設定

讓我們建立一個完整的生產環境設定。

完整版 docker-compose.yml

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: always
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      # 基本設定
      - N8N_HOST=n8n.yourdomain.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.yourdomain.com/

      # 時區設定
      - GENERIC_TIMEZONE=Asia/Taipei
      - TZ=Asia/Taipei

      # 資料庫設定
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}

      # 加密金鑰(重要!)
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}

      # 執行模式
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - QUEUE_BULL_REDIS_PORT=6379

      # 安全性設定
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - n8n-network
    expose:
      - 5678

  postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: always
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    container_name: n8n-redis
    restart: always
    volumes:
      - redis_data:/data
    networks:
      - n8n-network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  nginx:
    image: nginx:alpine
    container_name: n8n-nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
      - certbot_data:/var/www/certbot:ro
    depends_on:
      - n8n
    networks:
      - n8n-network

volumes:
  n8n_data:
  postgres_data:
  redis_data:
  certbot_data:

networks:
  n8n-network:
    driver: bridge

環境變數檔案 .env

建立 .env 檔案儲存敏感資訊:

# 產生隨機密碼
POSTGRES_PASSWORD=$(openssl rand -hex 16)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=$(openssl rand -hex 12)

# 寫入 .env 檔案
cat > .env << EOF
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
EOF

# 顯示登入資訊(記得保存!)
echo "=== n8n 登入資訊 ==="
echo "使用者: admin"
echo "密碼: ${N8N_BASIC_AUTH_PASSWORD}"
echo "===================="

環境變數說明

變數 用途
N8N_HOST n8n 的網域名稱
N8N_ENCRYPTION_KEY 加密 Credentials 的金鑰
DB_TYPE 資料庫類型(postgresdb)
EXECUTIONS_MODE 執行模式(queue 使用 Redis 佇列)
N8N_BASIC_AUTH_* 基本驗證帳密

Nginx 反向代理設定

Nginx 負責處理 HTTPS 和反向代理。

建立 nginx.conf

events {
    worker_connections 1024;
}

http {
    upstream n8n {
        server n8n:5678;
    }

    # HTTP - 重導向到 HTTPS
    server {
        listen 80;
        server_name n8n.yourdomain.com;

        location /.well-known/acme-challenge/ {
            root /var/www/certbot;
        }

        location / {
            return 301 https://$server_name$request_uri;
        }
    }

    # HTTPS
    server {
        listen 443 ssl http2;
        server_name n8n.yourdomain.com;

        ssl_certificate /etc/nginx/ssl/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/privkey.pem;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_prefer_server_ciphers off;

        location / {
            proxy_pass http://n8n;
            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;
            proxy_buffering off;
            proxy_cache off;
            chunked_transfer_encoding off;
        }
    }
}

💡 Nginx + SSL 設定太複雜?讓 VibeFix 專家幫你處理

Let's Encrypt SSL 憑證設定

使用 Certbot 取得免費的 SSL 憑證。

安裝 Certbot

sudo apt install -y certbot

取得憑證

先暫時停止 Nginx(如果有運行):

docker-compose stop nginx

取得憑證:

sudo certbot certonly --standalone -d n8n.yourdomain.com

依照提示輸入 email 並同意條款。

複製憑證到專案目錄

mkdir -p ~/n8n/ssl
sudo cp /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem ~/n8n/ssl/
sudo cp /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem ~/n8n/ssl/
sudo chown -R $USER:$USER ~/n8n/ssl

設定自動續約

Let's Encrypt 憑證每 90 天到期,設定自動續約:

# 編輯 crontab
crontab -e

# 新增以下行(每天凌晨 3 點檢查續約)
0 3 * * * certbot renew --quiet && cp /etc/letsencrypt/live/n8n.yourdomain.com/*.pem ~/n8n/ssl/ && cd ~/n8n && docker-compose restart nginx

啟動與驗證

一切就緒,啟動完整服務。

啟動所有服務

cd ~/n8n
docker-compose up -d

檢查服務狀態

docker-compose ps

所有服務應該都顯示 Up 狀態:

NAME            STATUS              PORTS
n8n             Up                  5678/tcp
n8n-nginx       Up                  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
n8n-postgres    Up (healthy)        5432/tcp
n8n-redis       Up (healthy)        6379/tcp

查看日誌

如果有問題,查看日誌排查:

# 查看所有服務日誌
docker-compose logs

# 只看 n8n 日誌
docker-compose logs n8n

# 即時追蹤日誌
docker-compose logs -f n8n

存取 n8n

在瀏覽器開啟 https://n8n.yourdomain.com,使用 .env 中設定的帳密登入。

第一次登入會要求建立 Owner 帳號,這是 n8n 內部的帳號系統(與 Basic Auth 不同)。

n8n 基本操作

成功部署後,來快速了解 n8n 的基本操作。

建立第一個 Workflow

  1. 點擊右上角「New Workflow」
  2. 點擊畫布中央的「+」新增節點
  3. 搜尋「Schedule Trigger」並新增
  4. 設定每分鐘執行一次(測試用)
  5. 再新增一個「HTTP Request」節點
  6. 設定 GET 請求到任意 URL
  7. 連接兩個節點
  8. 點擊「Execute Workflow」測試

常用節點介紹

觸發節點(Triggers)

節點 用途
Webhook 接收外部 HTTP 請求
Schedule Trigger 定時執行
Email Trigger 收到 email 時觸發

動作節點(Actions)

節點 用途
HTTP Request 呼叫任意 API
Slack 發送 Slack 訊息
Google Sheets 讀寫 Google 試算表
MySQL/PostgreSQL 資料庫操作

轉換節點(Transform)

節點 用途
Set 設定變數
IF 條件分支
Switch 多重條件分支
Code 執行自訂程式碼

Webhook URL 設定

當你使用 Webhook 節點時,n8n 會產生一個 URL:

https://n8n.yourdomain.com/webhook/xxxxx

外部服務可以向這個 URL 發送請求來觸發你的 Workflow。

進階設定與優化

啟用 Workflow 歷史紀錄

預設 n8n 會保留所有執行紀錄,但這會佔用大量儲存空間。建議設定保留期限:

在 docker-compose.yml 的 n8n 環境變數中新增:

environment:
  # ... 其他設定
  - EXECUTIONS_DATA_PRUNE=true
  - EXECUTIONS_DATA_MAX_AGE=168  # 保留 7 天

設定 Email 通知

當 Workflow 失敗時發送通知:

environment:
  # SMTP 設定
  - N8N_EMAIL_MODE=smtp
  - N8N_SMTP_HOST=smtp.gmail.com
  - N8N_SMTP_PORT=587
  - [email protected]
  - N8N_SMTP_PASS=your-app-password
  - [email protected]

備份策略

定期備份 n8n 資料:

#!/bin/bash
# backup.sh

BACKUP_DIR=/home/user/n8n-backups
DATE=$(date +%Y%m%d)

# 備份 PostgreSQL
docker exec n8n-postgres pg_dump -U n8n n8n > $BACKUP_DIR/n8n-db-$DATE.sql

# 備份 n8n 資料目錄
docker cp n8n:/home/node/.n8n $BACKUP_DIR/n8n-data-$DATE

# 保留最近 7 天的備份
find $BACKUP_DIR -mtime +7 -delete

echo "Backup completed: $DATE"

設定每日備份:

chmod +x backup.sh
crontab -e
# 新增:0 2 * * * /home/user/n8n/backup.sh

升級 n8n

當有新版本發布時:

cd ~/n8n

# 拉取最新映像檔
docker-compose pull

# 重新啟動服務
docker-compose up -d

# 確認版本
docker exec n8n n8n --version

常見問題排解

問題一:無法存取 n8n

症狀:瀏覽器顯示連線失敗

檢查項目
1. 確認 Docker 服務運行中:docker-compose ps
2. 確認防火牆開放 80/443 連接埠
3. 確認 DNS 設定正確
4. 查看 Nginx 日誌:docker-compose logs nginx

問題二:SSL 憑證錯誤

症狀:瀏覽器顯示不安全連線

解決方案
1. 確認憑證檔案存在:ls ~/n8n/ssl/
2. 確認 Nginx 設定檔路徑正確
3. 重新取得憑證:sudo certbot certonly --standalone -d n8n.yourdomain.com

問題三:Webhook 無法觸發

症狀:外部服務呼叫 Webhook 沒反應

檢查項目
1. 確認 WEBHOOK_URL 設定正確
2. 確認 Workflow 已啟用(Active)
3. 查看 n8n 日誌:docker-compose logs n8n

問題四:資料庫連線失敗

症狀:n8n 啟動時顯示資料庫錯誤

解決方案
1. 確認 PostgreSQL 運行中:docker-compose ps postgres
2. 確認 .env 中的密碼設定
3. 重新啟動所有服務:docker-compose down && docker-compose up -d

VibeFix n8n 部署服務

自架 n8n 涉及多個技術面向:

  • VPS 選購與設定
  • Docker 環境配置
  • Nginx 反向代理
  • SSL 憑證管理
  • 資料庫優化
  • 備份與監控

VibeFix 團隊提供 n8n 一站式部署服務,讓你專注在自動化流程設計,不用煩惱基礎設施。

服務範圍
- VPS 環境建置與優化
- n8n 完整部署(Docker + PostgreSQL + Redis)
- Nginx + SSL 設定
- 自動備份設定
- 監控與告警設定
- 後續技術支援

想了解更詳細的服務?查看 VibeFix 服務內容

結語:打造專屬的自動化平台

自架 n8n 讓你擁有完整的自動化能力,不受限於雲端服務的價格和功能限制。透過這篇教學,你已經學會:

  • n8n 的核心功能與自架優勢
  • Docker Compose 完整設定
  • PostgreSQL 資料庫整合
  • Nginx 反向代理與 SSL 設定
  • 基本操作與進階優化
  • 備份策略與故障排除

如果你對 Docker 部署還不熟悉,可以先參考我們的 Docker 部署教學。對於更複雜的自動化需求,也可以考慮結合 Node.js 部署 來開發自訂的整合服務。


部署失敗?別擔心

n8n 自架部署看似複雜,但只要按照步驟操作,其實不難。如果你遇到問題卡關,VibeFix 團隊隨時可以幫你處理。

幫我部署 →

分享文章:
V

VibeFix

專門解決 AI Vibe Coding 後的疑難雜症,讓你的專案順利上線。

這篇文章有幫到你嗎?

如果還有問題,讓我們直接幫你解決!

聯繫我們