為什麼有兩個 Docker Compose 文件頁面?

描述問題/錯誤/問題

有兩份不同的文件說明如何使用 Docker Compose 設定 n8n:

這兩份設定差異很大。

我應該按照哪一份進行?

嘿 @Daniel,在等待回應的時候,以下是一些可能有幫助的資源:

建議的資源

自動根據你的問題配對。

文件:

論壇:

@Zelite - 你之前幫助解決過類似的問題,你能看一下嗎?

由 n8n 社群機器人自動建議。這是一個試點 - 請在此分享回饋。

嘿 @Daniel

兩者都是最新的,只是解決不同的問題。

  1. 使用 Docker Compose,位於 use-a-cloud-provider 下的那個是伺服器部署指南。n8n 加上 Traefik,這樣你可以獲得一個網域、自動 Let’s Encrypt 憑證和 HTTPS。它涵蓋 DNS 設定,預期使用 Linux VPS。沒有 AI Assistant。
  2. 使用 Docker Compose 安裝是較新的那個,基於 AI Assistant 沙箱堆疊建構。五個服務,需要 4GB 記憶體和 2 個 vCPU,以及用於沙箱執行器的 Docker in Docker。沒有反向代理,所以它在 localhost:5678 上執行,沒有 TLS。

要遵循哪一個取決於你想要什麼。如果是公開伺服器並需要網域,選擇第一個。如果是本地機器並想要 AI Assistant,選擇第二個。

兩者預設都不包含 Postgres,都退而使用 SQLite。對於任何超過測試的用途都值得新增,第二個頁面有相關的區塊。

嗨 @Daniel
單行設定會為你生成第二個堆棧,包括 compose.yml、searxng-settings.yml 和已填入唯一密鑰的 .env,因此只有在你想自訂設定或將 n8n 整合到現有的 Compose 專案時,才需要手動編寫這些檔案:

curl -fsSL https://get.n8n.io | sh -s -- --version 2.35.0

版本釘選在 2.35.0 從測試版移至穩定版之前是必需的。

如果你採用伺服器路線,這涵蓋了大小調整和供應商選擇:

那想要兩者的人呢?:sweat_smile:

我想我會把它們合併成一個 compose.yml 文件。我已經有 Nginx 在容器外運行,所以我會省略 Traefik。

我不喜歡設置腳本,因為我不信任它們不會搞亂我現有的配置,我更喜歡手動編寫我的 compose.yml,這樣我就能理解一切是如何設置的。不過我會看一下那個腳本做了什麼。

我已經有一個 10GB RAM 和 100GB NVMe 的 VPS,目前只運行 Odoo 和 Swetrix,應該沒問題。如果有任何問題,我會把它移到我的其中一個 16GB RAM 系統上 :slight_smile:

該組合已經寫好了。DigitalOcean 和 Hetzner 指南是一個反向代理 n8n,在頂部添加了沙箱堆疊,因此你可以直接從那裡提取沙箱服務,而不需要自己合併兩個 Compose 檔案。代理只路由 n8n,沙箱服務保持在 Compose 網路內部,不需要 DNS 或防火牆更改,所以用外部 Nginx 替換 Caddy 在那裡沒有成本。在將其放在與 Odoo 相同的機器上之前值得瞭解:sandbox-runner-1 是特權 Docker-in-Docker,在主機上實際上是 root,Daytona 是真實部署的推薦沙箱提供者。

兩個頁面都沒有涵蓋的一件事是 Docker 外的代理:N8N_HOST 加上 N8N_PROTOCOL 不會建立正確的 webhook URL,因為 n8n 在內部提供 5678,而 Nginx 在 443 上應答。在 n8n 服務上設定這些,並從 Nginx 傳遞 X-Forwarded-For、X-Forwarded-Host 和 X-Forwarded-Proto:

N8N_WEBHOOK_URL=https://n8n.example.com/
N8N_PROXY_HOPS=1

N8N_WEBHOOK_URL 取代了 WEBHOOK_URL,Traefik 頁面仍在使用該 URL,現在會記錄棄用警告。

我剛注意到該指令碼從 https://raw.githubusercontent.com/n8n-io/n8n/master/docker/get-n8n-compose.yml 下載 compose.yml。我可以用這個作為基礎,根據我的需求進行精簡(或擴展)。謝謝!

我在評估 n8n 時發現我同時需要 N8N_WEBHOOK_URL 和 N8N_EDITOR_BASE_URL,因為我想為 webhook(公開可訪問)和 n8n 編輯器本身(僅通過 VPN 可訪問)使用不同的 URL。

後者很難弄清楚,因為我在文檔中找不到它。也許我只是沒有找到正確的頁面。

好的發現 - 我沒有意識到這一點。我會把它放在一個隔離的虛擬機上。

那這是否意味著 sysbox 或 daytona 不再需要了?
之前這是必需的

在此之前在 Oracle Linux 上與 sysbox 的問題相當困擾

@kjooleng Compose 指南建構的堆疊都不需要這些。它以純 Docker-in-Docker 的方式執行 sandbox-runner-1,使用 privileged: true,沒有 sysbox-runc 也沒有 Daytona 金鑰,所以它可以在 sysbox 無法安裝的 Oracle Linux 上執行。AI 助手頁面現在列出了三個設定:單行設定的捆綁沙箱、手動建構的相同堆疊,以及 Daytona,sysbox 不在其中任何一個。
你失去的是 sysbox 原本的用途。沙箱服務儲存庫仍然預期執行器在 sysbox-runc 下執行,沒有它的話,該容器在主機上具有 root 等效權限。Daytona 仍然是生產環境的建議做法,也是唯一避免 sysbox 安裝和特權容器的路徑。

在隔離的虛擬機上執行 sandbox-runner 是一種支援的部署技術嗎?從安全角度來看似乎很有價值,而且我不想依賴於像 Daytona 這樣的第三方服務。我還需要使用 Docker-in-Docker 嗎,還是可以直接在虛擬機上執行?

如果你使用單行設定,一切都已準備好

我不想在與 n8n 相同的系統上運行沙箱,因為我在該伺服器上還有其他服務在運行,而在同一系統上運行特權容器很令人擔憂 :slight_smile:

@Daniel 那如果你有另一個系統,你可以在那裡運行它並把它連結到第一個!用同一個系統會更簡單,但如果你把沙箱加強安全防護,你應該就沒問題!我自己在一個單一伺服器上運行很多項目,claude agents、hermes agents、n8n、searxng,我安裝並運行了一堆東西,但我從來沒有遇過任何問題!

我認為如果你已經在同一個伺服器上執行 AI 相關的東西,這就沒問題了,因為執行 n8n sandbox 可能不會比執行 Hermes Agent 帶來額外的風險。但在我的情況下,這是一個生產伺服器,用於商業用途,所以執行特權容器是不允許的。

看起來在隔離的虛擬機上透過 Docker 執行 sandbox-api 和 sandbox-runner-1 應該不會很困難。基本上我只需要將 compose.yml 分成兩個。

不過文件很令人困惑,而且似乎已經過時了。設定 AI 助理文件說要使用 N8N_INSTANCE_AI_SANDBOX_API_URL 來指定 sandbox-api URL,但我在程式碼中看不到有人使用它。現在看起來叫做 N8N_SANDBOX_SERVICE_URL。

等我有時間時,我會嘗試使用單獨的虛擬機,以程式碼作為參考而不是文件。我也想試著讓 Docker in Docker 以無根模式執行(即外層和內層 Docker 都以無根模式執行)。一旦我把事情搞好了,我可以試著更新文件,除非已經有人計畫更新它們。

這應該是最新的更新。記住,預覽中的內容會不斷變化。期待一路上的變動

謝謝——我本週早些時候進行研究時,那篇公告文章還不存在。我會看一下!