分享程式代碼相關筆記
目前文章總數:223 篇
最後更新:2026年 03月 14日
架設在本地有以下優點:
| 優勢項目 | : | 詳細說明 |
|---|---|---|
| 數據隱私 | : | 所有的股票紀錄、資料庫密鑰都留在自己的伺服器,不經過第三方雲端。 |
| 無限制執行 | : | 不再受 Cloud 版的 Tasks 數量限制,適合高頻率抓取新聞。 |
| 硬體連動 | : | 可以直接存取本地端檔案或內網中的其他設備。 |
最重要的一點:免費 (n8n Cloud 有 14 天試用期的限制,超過要綁信用卡進行繳費,保留期限為 3 天)
以下是 2 者的差異,如果需要隱私性、低成本,那麼可以考慮自行搭建(較複雜)
| 比較項目 | : | n8n Cloud (官方訂閱) | Self-hosted (Ubuntu + Docker) |
|---|---|---|---|
| 1. 架設難度 | : | 極低。註冊帳號即可使用,無需管理伺服器。 | 中等。需具備 Linux 基礎、Docker 與網路設定知識。 |
| 2. 執行限制 | : | 嚴格。根據訂閱等級限制 Workflow 執行次數(Tasks)。 | 無限。只要你的伺服器跑得動,執行幾萬次都免費。 |
| 3. 數據隱私 | : | 數據存在官方雲端。適合一般自動化,敏感資料需評估。 | 最高。數據完全保存在自有的硬體中,安全性由自己掌控。 |
| 4. 維護成本 | : | 低。官方負責更新、備份與系統擴展。 | 需手動。需自行處理版本更新、硬碟空間清理與資料庫備份。 |
| 5. 每月費用 | : | 較高。入門版約 $20 USD/月起跳,隨用量增加。 | 極低。僅需負擔電費或 VPS 租金(約 $5~10 USD/月)。 |
| 6. 擴充靈活性 | : | 受限於官方環境。無法安裝額外的 Linux 套件或工具。 | 極高。可自由安裝 Python 庫、自建 API 或連動內網設備。 |
n8n 的 Cloud 不包含 AI Agent 的 Token 費用,但在雲服務上可以隨時取得最新的自動化服務功能
n8n community有討論過自架設 n8n 最低需求配置為何
討論的結果一 依照自己 workflow 的複雜度來定義
| 階段 | : | 資源消耗狀況 |
|---|---|---|
| 靜態待機 | : | 啟動後如果不執行任何 Workflow,n8n + Postgres 約佔用 400MB~600MB 的 RAM。 |
| 執行簡單任務 | : | 如 HttpRequest 需求,記憶體波動極小。 |
| 執行複雜任務 | : | AI 處理大量的 RSS 新聞 JSON、或是 Postgres 在進行複雜 SQL 查詢時,Node.js 的垃圾回收(GC)機制可能來不及反應,記憶體會瞬間衝高。 |
依照討論結果,若要 Ubuntu 系統的 Docker 容器化搭建 n8n ; 依據環境差異,以下最小配置需求,提供參考:
| 硬體項目 | : | 建議最低配置 (Minimum) | 生產環境推薦 (Recommended) |
|---|---|---|---|
| CPU | : | 1 Core (x86_64 或 ARM64) | 2 Cores 以上 |
| RAM (記憶體) | : | 1GB | 2GB ~ 4GB |
| 儲存空間 | : | 10GB 可用空間 | 50GB 以上 (視資料庫增長而定) |
| 作業系統 | : | Ubuntu 20.04+ / Debian / Docker | 任何支援 Docker 的 Linux 版本 |
n8n 官網 -> Docs -> Self-Host n8n
進入後選擇 Docker installation guide
中間有一段 n8n-hosting repository.,我們要從裡面取得 docker-compose.yml 的安裝腳本
※目前官方自架(Self-hosting)最推薦、也最穩定的方式。
n8n 的 docker-compose.yml 有以下特性:
| 管理方便 | : | 可以同時管理 n8n 本體和 Postgres 資料庫。 |
| 配置清晰 | : | 所有的環境變數(包括你提到的 N8N_RUNNERS_ENABLED 等)都可以寫在一個 .yml 檔案裡。 |
將 n8n Git Source 複製
n8n 預設使用的是 Sqlite ,下載 Git Source 後,在小型個人開發,先 withPostgres 的 docker-compose 進行安裝
將代碼複製到 Ubuntu 主機 (圖為 WinScp 上傳檔案)
※有 4 種模式的 docker-compose 在第五部分進行補充
我們進入 Ubuntu 主機進入以下目錄
/home/louis/n8n-hosting/docker-compose/withPostgres
並且在 # 的地方做調整,我們增加此 2 行
※第五部分有補充相關訊息
N8N_RUNNERS_ENABLED=false
N8N_SECURE_COOKIE=false
上述參數的目的如下:
| N8N_RUNNERS_ENABLED | : | 設為 false 可關閉獨立的 Task Runner。對於個人自架的小型 Server 來說,這樣能有效節省 RAM 消耗。 |
| N8N_SECURE_COOKIE | : | 在開發環境或尚未設定 HTTPS 憑證時,必須設為 false 以避免瀏覽器因安全性規則導致無法登入。 |
對應腳本:
version: '3.8'
volumes:
db_storage:
n8n_storage:
services:
postgres:
image: postgres:16
restart: always
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
volumes:
- db_storage:/var/lib/postgresql/data
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
# - N8N_RUNNERS_MODE=external # ← 這行替換成下面這行
- N8N_RUNNERS_ENABLED=false
# 添加以下這行
- N8N_SECURE_COOKIE=false
ports:
- 5678:5678
links:
- postgres
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
並且執行以下代碼安裝 n8n
docker-compose up -d
第一次安裝後必定會出現安裝失敗,要在執行一次
docker-compose up -d
第二次再次執行就會看到正常
※原因是 n8n 的 docker-compose.yml 會先安裝 postgresql -> 然後安裝 n8n -> 這時檢查到 postgresql 的健康檢查異常因此出現 Error
實際上是因為 postgresql 剛安裝好,尚未初始化完成
進入 Portainer 或下以下指令,檢查可以發現 n8n 與 postgresql 的容器皆安裝完成
docker ps -a
此為內部架設,可以依照自己的容器 Port 號(預設 5678),輸入 URL 訪問
http://172.18.2.233:5678/
一開始會需等待初始化:
依序填寫帳號密碼,做管理員的配置
到此步驟,會出現提供這些功能(如:資料夾分類、進階除錯、執行紀錄搜索)原本是付費版才有的,但官方為了吸引用戶留存並 收集匿名數據 ,決定讓你免費啟用。
基本上我們自架設用不到這些服務,若有需要再進行填寫
| Advanced debugging (進階除錯) | : | 可以「修改單一節點後,從錯誤點直接重新跑一次」,不用整個流程從頭再來。這在測試大型流程時非常省時間。 |
| Execution search and tagging (搜尋與標記) | : | 當跑了幾千次任務後,想找特定的某一筆紀錄會像大海撈針。這個功能讓你用關鍵字或標記(Tag)來過濾。 |
| Folders (資料夾) | : | Workflow 超過 20 個時,畫面會變得很亂。資料夾功能讓像電腦檔案一樣把它們分類 |
基本上如果極度重視隱私,不想讓官方知道你跑了多少個 Workflow,就選擇 跳過 Skip
進入自己的 n8n 雲端服務,選擇 download 會得到 .json 檔案
開啟一個空的 workflow -> 選擇 Import from file…
匯入完成後,可以看到所有的節點與雲端一致
要開始對每個節點有用到金鑰的地方重新設定 EX: Azure Sql Database、Groq API 等等…
執行 Create new credential
全部轉移完成後,執行 Execute workflow 節點
可以觀察到所有流程已從 雲端 轉移到 本地端 ,並且重現 串接 Groq AI + Azure SQL + LineBot 完整自動化流程
對應 Step 5:使用 withPostgres 版本
n8n 在預設未使用 Docker-Compose 單部署容器化,預設安裝的資料庫是 Sqlite ,效能與未來擴容沒有 PostgreSQL 高效
官方一共給出 4 種模式:
| Directory | Description | |
| 1. | docker-compose/withPostgres | n8n + PostgreSQL |
| 2. | docker-compose/withPostgresAndWorker | n8n + PostgreSQL + Redis + worker (queue mode) |
| 3. | docker-compose/subfolderWithSSL | n8n behind SSL reverse proxy in subfolder |
| 4. | docker-caddy | n8n with Caddy reverse proxy |
對應特點如下,可依照實際需求再選擇:
| 特點 | 適用對象 | |
| 1. | 預設情況下 n8n 使用 SQLite 作為資料庫(這對輕量使用沒問題) | 希望穩定運行的個人用戶或小型團隊。PostgreSQL 能提供更好的性能與資料安全性。 |
| 但在處理大量資料或高併發工作流時,SQLite 可能會出現資料庫鎖定問題。 | ||
| 2. | 「佇列模式 (Queue Mode)」 n8n 主程式負責介面與調度 | 工作流非常多、需要並行處理多個任務、或是任務非常耗費系統資源的企業級需求。 |
| 實際的自動化任務(Workflow)會交給後端的 Worker 去執行,而 Redis 負責處理這些任務排隊 | ||
| 3. | 主要解決「網路路徑」的問題。例如不想 n8n 佔據整個網域(example.com) | 已經有現成網站網域,並希望將 n8n 作為其中一個功能模組掛載的用戶。 |
| ,而是希望它跑在子目錄下(example.com/n8n/)。 | ||
| 4. | Caddy 是一個非常簡單的 Web Server,它最優秀的地方是會「自動處理」SSL 憑證(Let’s Encrypt),你不需要手動去更新證書。 | 需要從外網存取且希望自動搞定 HTTPS 安全加密,但不熟悉 Nginx 配置的用戶。 |
對應 Step 6:進入 Ubuntu 目錄 + 調整腳本
未設定 N8N_RUNNERS_ENABLED=false 時, n8n 本地端 Web-UI 會遇到無法訪問的異常
觀察容器 Log
ssing auth token. When `N8N_RUNNERS_MODE` is `external`, it is required to set `N8N_RUNNERS_AUTH_TOKEN`.
Its value should be a shared secret between the main instance and the launcher.
n8n 在較新的版本中引入了 Task Runners(任務運行器)機制。當系統偵測到某些環境設定時,它會以為你要使用「外部運行模式」,因此要求一個安全憑證(Auth Token)。
因此我們 關閉 Task Runners 模式
- N8N_RUNNERS_ENABLED=false # 關鍵:關閉 Task Runners 模式
為什麼這樣設定可以排除錯誤?
因為 n8n 為了提升 安全性與效能,預設會檢查 Worker 與主程式之間的溝通憑證。
如果你沒有設定 N8N_RUNNERS_AUTH_TOKEN,且系統環境觸發了某些偵測機制,它就會報錯跳出。
對內網自架用戶來說,直接設定 N8N_RUNNERS_ENABLED=false 是最省事的做法。
在自架且非 Cluster 模式下,我們通常不需要這個