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.com → 123.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
- 點擊右上角「New Workflow」
- 點擊畫布中央的「+」新增節點
- 搜尋「Schedule Trigger」並新增
- 設定每分鐘執行一次(測試用)
- 再新增一個「HTTP Request」節點
- 設定 GET 請求到任意 URL
- 連接兩個節點
- 點擊「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 團隊隨時可以幫你處理。