首頁

目前文章總數:223 篇

  

最後更新:2026年 03月 14日

0002. 擺脫訂閱制!打造私有自動化基地:Ubuntu Server 環境下 Docker 部署 n8n 全攻略

日期:2026年 04月 11日

標籤: n8n Continuous Integration(CI) Microsoft Azure SQL Server LineBot JavaScript RSS Groq AI Agent Linux Ubuntu

摘要:n8n


應用所需:1. Ubuntu 22.04 LTS 版本以上
     2. 已有 n8n WorkerFlow
解決問題:如何用自己的機器搭建 n8n ,並且運行容器化執行
     2. 如何快速地將 n8n 雲服務上的 workflow 轉到 n8n 本地端(自己機器搭建的 n8n)
相關參考:0001. 打造 AI 選股助手:n8n Cloud + Groq AI + Azure SQL 實戰自動化工作流
基本介紹:本篇分為 5 大部分。
第一部分:為什麼選擇自架(Self-Hosted)n8n?
第二部分:環境準備與硬體需求
第三部分:Docker Compose 快速部署
第四部分:進入 n8n 世界 - 雲端轉本地
第五部分:補充資訊






第一部分:為什麼選擇自架(Self-Hosted)n8n?

Step 1:前言-為什麼選擇自架(Self-Hosted)n8n?

架設在本地有以下優點:

優勢項目 詳細說明
數據隱私 所有的股票紀錄、資料庫密鑰都留在自己的伺服器,不經過第三方雲端。
無限制執行 不再受 Cloud 版的 Tasks 數量限制,適合高頻率抓取新聞。
硬體連動 可以直接存取本地端檔案或內網中的其他設備。


最重要的一點:免費 (n8n Cloud 有 14 天試用期的限制,超過要綁信用卡進行繳費,保留期限為 3 天)


Step 2:n8n Cloud vs. 自架 Ubuntu Server 差異分析

以下是 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 費用,但在雲服務上可以隨時取得最新的自動化服務功能



第二部分:環境準備與硬體需求

Step 1:沒有硬性規定

n8n community有討論過自架設 n8n 最低需求配置為何
討論的結果一 依照自己 workflow 的複雜度來定義

階段 資源消耗狀況
靜態待機 啟動後如果不執行任何 Workflow,n8n + Postgres 約佔用 400MB~600MB 的 RAM。
執行簡單任務 如 HttpRequest 需求,記憶體波動極小。
執行複雜任務 AI 處理大量的 RSS 新聞 JSON、或是 Postgres 在進行複雜 SQL 查詢時,Node.js 的垃圾回收(GC)機制可能來不及反應,記憶體會瞬間衝高。




Step 2:整理官方討論 - 建議最小配置

依照討論結果,若要 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 版本





第三部分:Docker Compose 快速部署

Step 1:n8n 官網文件

n8n 官網 -> Docs -> Self-Host n8n


Step 2:Docker 嚮導

進入後選擇 Docker installation guide


Step 3:n8n自架開源庫

中間有一段 n8n-hosting repository.,我們要從裡面取得 docker-compose.yml 的安裝腳本
※目前官方自架(Self-hosting)最推薦、也最穩定的方式。
n8n 的 docker-compose.yml 有以下特性:

管理方便 可以同時管理 n8n 本體和 Postgres 資料庫。
配置清晰 所有的環境變數(包括你提到的 N8N_RUNNERS_ENABLED 等)都可以寫在一個 .yml 檔案裡。




Step 4:下載 n8n 開源代碼

將 n8n Git Source 複製


Step 5:使用 withPostgres 版本

n8n 預設使用的是 Sqlite ,下載 Git Source 後,在小型個人開發,先 withPostgres 的 docker-compose 進行安裝
將代碼複製到 Ubuntu 主機 (圖為 WinScp 上傳檔案)
※有 4 種模式的 docker-compose 在第五部分進行補充


Step 6:進入 Ubuntu 目錄 + 調整腳本

我們進入 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



Step 7:進入 Ubuntu 目錄 + 安裝(異常是正常)

並且執行以下代碼安裝 n8n

docker-compose up -d



第一次安裝後必定會出現安裝失敗,要在執行一次

docker-compose up -d


第二次再次執行就會看到正常
※原因是 n8n 的 docker-compose.yml 會先安裝 postgresql -> 然後安裝 n8n -> 這時檢查到 postgresql 的健康檢查異常因此出現 Error
實際上是因為 postgresql 剛安裝好,尚未初始化完成


Step 8:檢查安裝結果

進入 Portainer 或下以下指令,檢查可以發現 n8n 與 postgresql 的容器皆安裝完成

docker ps -a




Step 9:訪問 n8n Web-UI

此為內部架設,可以依照自己的容器 Port 號(預設 5678),輸入 URL 訪問

http://172.18.2.233:5678/


一開始會需等待初始化:




依序填寫帳號密碼,做管理員的配置



Step 10:官方提供額外功能 (可跳過此步驟)

到此步驟,會出現提供這些功能(如:資料夾分類、進階除錯、執行紀錄搜索)原本是付費版才有的,但官方為了吸引用戶留存並 收集匿名數據 ,決定讓你免費啟用。
基本上我們自架設用不到這些服務,若有需要再進行填寫

Advanced debugging (進階除錯) 可以「修改單一節點後,從錯誤點直接重新跑一次」,不用整個流程從頭再來。這在測試大型流程時非常省時間。
Execution search and tagging (搜尋與標記) 當跑了幾千次任務後,想找特定的某一筆紀錄會像大海撈針。這個功能讓你用關鍵字或標記(Tag)來過濾。
Folders (資料夾) Workflow 超過 20 個時,畫面會變得很亂。資料夾功能讓像電腦檔案一樣把它們分類


基本上如果極度重視隱私,不想讓官方知道你跑了多少個 Workflow,就選擇 跳過 Skip




第四部分:進入 n8n 世界 - 雲端轉本地

Step 1:進行轉移 - n8n 雲端下載 workflow

進入自己的 n8n 雲端服務,選擇 download 會得到 .json 檔案


Step 2:進行轉移 - n8n 本地端匯入

開啟一個空的 workflow -> 選擇 Import from file…


Step 3:進行轉移 - 重設金鑰

匯入完成後,可以看到所有的節點與雲端一致
要開始對每個節點有用到金鑰的地方重新設定 EX: Azure Sql Database、Groq API 等等…


執行 Create new credential


Step 4:執行 n8n - 轉移完成

全部轉移完成後,執行 Execute workflow 節點
可以觀察到所有流程已從 雲端 轉移到 本地端 ,並且重現 串接 Groq AI + Azure SQL + LineBot 完整自動化流程




第五部分:進入 n8n 世界 - 雲端轉本地

Step 1:為何選擇 Docker-Compose withPostgres 腳本

對應 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 2:為何配置 N8N_RUNNERS_ENABLED=false

對應 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 模式



Step 3:為何配置 N8N_RUNNERS_ENABLED=false - 追加補充

為什麼這樣設定可以排除錯誤?
因為 n8n 為了提升 安全性與效能,預設會檢查 Worker 與主程式之間的溝通憑證。

如果你沒有設定 N8N_RUNNERS_AUTH_TOKEN,且系統環境觸發了某些偵測機制,它就會報錯跳出。
對內網自架用戶來說,直接設定 N8N_RUNNERS_ENABLED=false 是最省事的做法。


在自架且非 Cluster 模式下,我們通常不需要這個