N8N Docker 自架完全攻略:從 $20/月省下來的方法
N8N Cloud 每月 20 美元起,自架可以幾乎免費。這篇完整說明 Docker 自架的選擇邏輯、伺服器建議、完整設定步驟,以及讓它穩定跑的關鍵配置。
N8N Docker 自架完全攻略:從 $20/月省下來的方法
N8N Cloud 的入門方案是每個月 20 美元,執行次數上限 2,500 次。
如果你的流程執行頻率高一點,比如每小時抓一次資料,一個月下來就超過 700 次執行。加上你可能同時跑幾條不同的流程,2,500 次的額度很容易就吃完。
然後你得升級到每月 50 美元的方案。
自架 N8N,在一台 5-10 美元的雲端 VPS 上跑,執行次數不限制,資料存在你自己的伺服器上,一個月省下 40-50 美元。
這篇文章帶你把這件事從頭到尾做完。
自架 N8N 之前,你需要先想清楚的事
自架有代價。省下月費的同時,你要承擔:
「維護責任」:伺服器出問題、Docker 掛掉、N8N 版本更新出錯,這些都要自己解決。Cloud 版本出問題是 N8N 官方的事,自架出問題是你的事。
「安全責任」:你的自動化流程裡可能有 API Key、帳號密碼等敏感資料。自架代表你要自己確保伺服器的安全。
「備份責任」:Cloud 版本 N8N 會幫你備份流程資料,自架需要自己設定備份。
這些問題不是要嚇你,而是讓你有心理準備。對大多數人來說,這些事情都不複雜,花幾個小時設定好就可以,之後基本上不需要管。
如果你只是剛開始測試 N8N,先用 Cloud 版本的免費試用。等你確定 N8N 有用、想長期跑,再來考慮自架。
伺服器選擇:什麼規格夠用
N8N 的資源需求不高,但也不是完全沒要求。
基本需求:1 vCPU + 1GB RAM 是最低可用的配置,跑幾條簡單流程沒問題。但如果你要跑 AI 相關的流程(LLM 呼叫、向量計算),建議 2 vCPU + 2GB RAM。
推薦的 VPS 選項:
DigitalOcean Droplet($6/月,1vCPU + 1GB RAM):適合入門,介面友善,教學資源多。
Vultr($6/月,同樣規格):通常比 DigitalOcean 的網路速度好一點,台灣連線較快。
Hetzner(€3.79/月,2vCPU + 2GB RAM):歐洲廠商,CP 值最高,但伺服器在歐洲,台灣連線稍慢,用作後台跑流程沒問題。
Oracle Cloud Free Tier(免費,永久):4 vCPU + 24GB RAM 的 ARM 機器可以免費用,是真的免費,不是試用。缺點是申請有時候被拒絕、稳定性稍低。
作業系統選 Ubuntu 22.04 LTS,這是目前 N8N 官方文件最常用的範例環境,遇到問題找資料最容易。
Docker 安裝與設定
連上你的 VPS 之後(SSH 連線),開始安裝。
安裝 Docker
# 更新套件列表
sudo apt update
# 安裝必要套件
sudo apt install -y ca-certificates curl gnupg lsb-release
# 加入 Docker 的 GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 加入 Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安裝 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 讓你不需要 sudo 就能用 docker
sudo usermod -aG docker $USER
newgrp docker
確認 Docker 安裝成功:docker --version
用 Docker Compose 設定 N8N
建立工作目錄:
mkdir ~/n8n && cd ~/n8n
建立 docker-compose.yml:
version: "3.8"
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://${N8N_HOST}/
- GENERIC_TIMEZONE=Asia/Taipei
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- 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
volumes:
n8n_data:
external: true
建立 .env 環境變數檔案(不要把這個檔案上傳到 GitHub):
N8N_HOST=你的網域名稱
N8N_ENCRYPTION_KEY=一串隨機的32位元以上字串
N8N_BASIC_AUTH_USER=你的登入帳號
N8N_BASIC_AUTH_PASSWORD=你的登入密碼
建立 Docker Volume 並啟動:
docker volume create n8n_data
docker compose up -d
確認有在跑:docker compose ps
設定 HTTPS 和網域名稱
直接用 IP + Port 存取 N8N 是可以的,但不安全,而且很多第三方服務(比如 Meta API)要求 Webhook URL 必須是 HTTPS。
要設定 HTTPS,你需要一個網域名稱、Nginx 作為反向代理、Let’s Encrypt 的免費 SSL 憑證。
安裝 Nginx 和 Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
設定 Nginx 配置
建立 /etc/nginx/sites-available/n8n:
server {
server_name 你的網域名稱;
location / {
proxy_pass http://localhost: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;
proxy_cache_bypass $http_upgrade;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_request_buffering off;
}
listen 80;
}
啟用設定:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
申請 SSL 憑證
確認你的網域 A 記錄已經指向你的 VPS IP,然後執行:
sudo certbot --nginx -d 你的網域名稱
按照提示填入 Email,選擇自動轉向 HTTPS。完成後,你可以用 https://你的網域名稱 存取 N8N。
SSL 憑證每 90 天需要更新一次,Certbot 會自動幫你更新。
關鍵配置:讓自架 N8N 跑得更穩
資料備份
N8N 的所有流程、憑證、執行紀錄都存在 Docker Volume(n8n_data)裡,實際路徑是 /var/lib/docker/volumes/n8n_data/_data。
設定每日備份腳本:
cat > ~/backup-n8n.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
# 備份 n8n data volume
docker run --rm \
-v n8n_data:/data \
-v /tmp:/backup \
alpine tar czf /backup/n8n-data-${DATE}.tar.gz -C /data .
# 清理本地備份(保留最近 7 天)
find /tmp -name "n8n-data-*.tar.gz" -mtime +7 -delete
EOF
chmod +x ~/backup-n8n.sh
# 設定每天凌晨 2 點自動執行
(crontab -l 2>/dev/null; echo "0 2 * * * /root/backup-n8n.sh") | crontab -
自動重啟
Docker Compose 裡的 restart: always 確保 N8N 在意外崩潰後自動重啟,伺服器重開機後也會自動啟動。
確認 Docker 服務開機後自動啟動:
sudo systemctl enable docker
更新 N8N
定期更新 N8N 到最新版本(建議每 1-2 個月更新一次):
cd ~/n8n
docker compose pull
docker compose up -d
更新前先備份:~/backup-n8n.sh
常見問題
「Docker Compose 啟動後瀏覽器連不上」:確認防火牆有開放 80 和 443 port:
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 22
sudo ufw enable
「Webhook 收不到請求」:確認 WEBHOOK_URL 環境變數設定正確(完整的 HTTPS URL,結尾加斜線),而且網域的 DNS 已經正確指向你的 VPS IP。
「N8N 版本更新後流程出錯」:更新前先備份,更新後測試重要流程。如果有問題查 N8N 的 changelog 了解哪些地方改變了。
「記憶體不足導致 N8N 崩潰」:如果 VPS 是 1GB RAM,設定 Swap 可以暫時緩解:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
進階:連接外部 PostgreSQL 資料庫
預設 N8N 用 SQLite 存資料,適合個人使用。如果流程執行量大,可以改成 PostgreSQL。
在 docker-compose.yml 裡加入 postgres service,並在 n8n 的環境變數裡加入:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
完整的 Docker Compose 設定包括環境變數詳解,可以參考「Docker Compose 檔案詳解:N8N 環境變數、資料卷、反向代理完整說明」那篇。Docker 官方安裝文件也是自架時的重要參考。
你省了多少
自架之後算一下帳:
VPS 費用:每月 6-10 美元
N8N Cloud 費用:省去每月 20-50 美元
每年淨省:最少 120 美元,最多 480 美元
設定時間:第一次大概 2-3 小時,之後每月維護不超過 30 分鐘。
對大多數長期用 N8N 的人來說,這個投資很值得。
你現在用的是 Cloud 版還是還沒開始用 N8N?留言告訴我你的狀況,我可以建議你是否值得現在就自架。
自架好之後,前往 N8Nstart 模板庫 開始匯入流程,不用從空白畫布建起。
延伸閱讀
- Docker Compose 檔案詳解:N8N 環境變數、資料卷、反向代理完整說明 — 逐行理解你的設定檔
- N8N 入門完全指南:從安裝到第一條流程的 30 分鐘路線 — 安裝完成後的第一步
- N8N 第一個工作流:從零到自動化 — 自架環境搭好後跑第一條流程
- N8N 官方文件 — Self-hosting — 自架的官方完整說明