描述問題/錯誤/問題
有兩份不同的文件說明如何使用 Docker Compose 設定 n8n:
這兩份設定差異很大。
我應該按照哪一份進行?
嘿 @Daniel
兩者都是最新的,只是解決不同的問題。
要遵循哪一個取決於你想要什麼。如果是公開伺服器並需要網域,選擇第一個。如果是本地機器並想要 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 從測試版移至穩定版之前是必需的。
如果你採用伺服器路線,這涵蓋了大小調整和供應商選擇:
那想要兩者的人呢?![]()
我想我會把它們合併成一個 compose.yml 文件。我已經有 Nginx 在容器外運行,所以我會省略 Traefik。
我不喜歡設置腳本,因為我不信任它們不會搞亂我現有的配置,我更喜歡手動編寫我的 compose.yml,這樣我就能理解一切是如何設置的。不過我會看一下那個腳本做了什麼。
我已經有一個 10GB RAM 和 100GB NVMe 的 VPS,目前只運行 Odoo 和 Swetrix,應該沒問題。如果有任何問題,我會把它移到我的其中一個 16GB RAM 系統上 ![]()
該組合已經寫好了。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 相同的系統上運行沙箱,因為我在該伺服器上還有其他服務在運行,而在同一系統上運行特權容器很令人擔憂 ![]()
@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 都以無根模式執行)。一旦我把事情搞好了,我可以試著更新文件,除非已經有人計畫更新它們。
這應該是最新的更新。記住,預覽中的內容會不斷變化。期待一路上的變動
謝謝——我本週早些時候進行研究時,那篇公告文章還不存在。我會看一下!