使用 Docker 的 n8n:安装并自行托管 免费地
使用 Docker 部署 n8n,是获得一个能经受重启和更新的自托管自动化实例的最简便方式。本指南有意止步于基础部分:一个 Docker Compose 文件、一个用于存储数据的卷、一把由您控制的加密密钥、一套备份与更新流程,以及谨慎启用 HTTPS。AI 节点和连接 Ollama 的内容将在另一篇指南中介绍;这里的目标是完成一次无需反复重做的干净安装。
#为什么使用 Docker 而不是 npm 安装 n8n
n8n 是一个 Node.js 应用。可以使用 npm 或 npx 启动它,文档也建议用这种方式进行快速试用。对于持续运行的实例,项目推荐使用官方 Docker 镜像:它包含正确版本的 Node.js,将 n8n 与机器的其他部分隔离开来,并且只需更换镜像即可轻松完成更新。这也是 n8n 托管文档描述其所有服务器示例时采用的格式。
第二个优势是可复现性。docker-compose.yml 文件描述了完整配置:镜像、端口、环境变量和数据卷。你可以将其纳入版本控制、复制到另一台机器,或在六个月后重新查看,以准确了解正在运行的内容。使用 npm 安装时,这些信息分散在系统、用户配置文件和服务管理器之间。
- 本指南涵盖的内容
- 本地安装或安装在小型服务器上、数据持久化、加密密钥、备份、更新、HTTPS 访问。
- 它不涵盖的内容
- n8n 的 AI 节点、连接 Ollama、MCP 服务器,以及队列模式下的扩展。前两个主题各有单独的指南,链接位于文章末尾。
- 我们没有声称的内容
- 没有安装时长、没有测得的资源消耗,也没有固定的版本号。这些值会随每个 release 变化,应在安装时从官方来源中查看。
#社区版的许可证与限制
在你的机器上执行操作的智能体:具备智能体能力的 Cline、MCP、n8n + Ollama、本地自动化。
- 在线空间,终身可用
- PDF + 文件
- 30 天内退款
按照 OSI 的定义,n8n 并不采用开源许可证。其代码发布在 Sustainable Use License 下,发布方称之为“fair-code”模式。概括来说,您可以自由地将 n8n 用于内部、个人或企业自身需求,也可以修改和自行托管。受限制的是转售:将 n8n 作为托管服务提供给第三方,或将其集成到商业产品中,都需要获得发布方的许可。完整文本及其 FAQ 位于 docs.n8n.io/sustainable-use-license/;如果您的用途超出内部自动化范围,请阅读这些内容。
使用 Docker 安装的是社区版。它包含完整编辑器、数百个集成节点、webhook、计划触发器、AI 节点和用户管理。某些功能仅限于付费的自托管方案:单点登录(SSO)、带 Git 同步的环境、外部密钥、将日志发送到外部工具,以及部分协作功能。此外,发布方还提供一种称为“已注册社区”的免费密钥,只需在设置中填写电子邮件地址即可获取,并可解锁一些额外功能。具体列表会变化:应以 docs.n8n.io/hosting/community-edition-features/ 页面为准。
#先决条件
- Docker 和 Docker Compose
- Linux 上带有 Compose 插件的 Docker Engine,或 Windows 和 macOS 上的 Docker Desktop。请使用 docker compose version 验证:该命令应返回版本号,并且命令由两个单词组成(docker compose),而不是旧工具所使用的连字符形式。
- 一台持续开机的机器
- n8n 会在预定时间或收到 webhook 时执行工作流。晚上关机的电脑无法看到夜间触发。迷你电脑、兼容 Docker 的 NAS 或小型 VPS 都可以;对于几个简单工作流,内存需求仍然不高。
- 一个空闲端口
- n8n 在容器内部监听 5678 端口。我们将主机侧也发布到相同端口;如果该端口已被其他服务占用,请更改它。
- 仅用于 HTTPS 步骤
- 一个指向该机器的域名,以及可从互联网访问的 80 和 443 端口。否则,请使用本地访问,或改用 VPN:HTTPS 部分会详细介绍这两个选项。
#使用 Docker Compose 分步安装 n8n
n8n 文档首先给出一行式 docker run 命令,适合试用。我们直接使用 Compose:文件只稍微长一些,却会成为安装配置的基准。下面的所有值都来自 n8n 文档;只有时区和端口值是本指南的选择。
- 01创建项目目录专用目录包含 Compose 文件、.env 文件,以及之后的备份。n8n 本身的数据将存储在一个命名的 Docker 卷中,而不是这个目录里。
- 02生成加密密钥首次启动前,生成一个随机密钥并将其放入 .env 文件中。下一节将解释为什么顺序很重要。
- 03编写 docker-compose.yml复制下面的文件。它会将 n8n 发布到本机的 5678 端口,并限制为本地地址 127.0.0.1;同时将 n8n_data 卷挂载到容器中的 /home/node/.n8n 目录。n8n 会在此处存储其 SQLite 数据库、配置和文件。
- 04开始docker compose up -d télécharge l'image et lance le conteneur en arrière-plan. La première exécution prend le temps du téléchargement de l'image ; les suivantes sont immédiates.
- 05创建所有者账户在浏览器中打开 http://localhost:5678。n8n 会要求创建第一个账户,该账户将成为实例所有者。从 1.0 版开始,正是这个账户负责保护访问权限;以前通过环境变量实现的基本身份验证已不复存在。
下面对这些变量作一些说明。GENERIC_TIMEZONE 设置 Schedule Trigger 节点和日期表达式使用的时区;TZ 则使容器内的系统时钟保持一致。N8N_RUNNERS_ENABLED 启用任务运行器,这是让 Code 节点代码在独立进程中执行的机制;文档建议启用它,近期版本在缺少该变量时也会显示警告。N8N_DIAGNOSTICS_ENABLED=false 会停止向编辑器发送遥测数据。两个 EXECUTIONS_DATA_* 变量要求 n8n 清理超过 336 小时,也就是十四天的执行历史,以避免数据库无限增长。
./local-files:/files 挂载是可选的。它会为 n8n 提供一个与宿主机共享的目录,适合读取或写入文件的节点。如果您不需要使用它,请删除这一行。
#加密密钥:绝不能丢失的变量
n8n 会加密您在界面中保存的所有凭据,也就是集成所使用的 API 令牌、密码和 OAuth 密钥。使用的加密密钥是 N8N_ENCRYPTION_KEY。如果未设置该密钥,n8n 会在首次启动时生成一个,并将其写入 /home/node/.n8n 目录中的 config 文件,也就是写入卷中。这种方式可以正常工作,但密钥随后只存在于该卷中:如果卷丢失,或您在没有它的情况下重新创建实例,每个凭据都会变得无法读取,必须重新输入。
因此,本指南会在首次启动前将密钥固定在 .env 文件中。密钥始终由您控制,会随 Compose 文件一起备份,并且可以在另一台机器上恢复数据库而不会丢失凭据。由此产生两条规则。
- 事后绝不要更改密钥
- 与用于加密的密钥不同的密钥会使所有现有凭据无法使用。如果必须更换密钥,请先使用 export:credentials 命令导出已解密的凭据,然后在更换后重新导入。
- 单独备份 .env 文件
- 请在密码管理器中另存一份密钥。没有密钥的卷备份对凭据毫无价值,即使工作流仍然可读。
#数据持久化与备份
n8n 需要保留的所有内容都位于 /home/node/.n8n:包含工作流、加密凭据和执行历史的 SQLite 数据库、config 文件、已安装的社区节点,以及磁盘存储模式下的二进制文件。命名卷 n8n_data 在执行 docker compose down 和删除容器后仍会保留。但执行 docker compose down -v 或 docker volume rm 后不会保留:这两个命令都会删除数据。
备份可以采用两种互补的方法。第一种归档整个卷:复制文件时先停止 n8n,以避免捕获正在写入的 SQLite 数据库。第二种使用 n8n 的命令行工具,将工作流和凭据导出为 JSON,以便单独读取和重新导入。
导出命令的 --backup 选项会组合各项选项,为每个元素生成一个可读格式的文件。导出的凭据仍使用你的密钥加密,除非添加 --decrypted;在这种情况下,应将该文件视为机密。恢复时,import:workflow 和 import:credentials 命令接受同一个目录,并使用 --separate 选项。CLI 的完整参考位于 docs.n8n.io/hosting/cli-commands/。
要在另一台机器上进行完整恢复:使用相同的 docker-compose.yml 和相同的 .env 重新创建目录,运行 docker compose up -d 后再运行 docker compose stop 创建空卷,用与备份相反的命令将压缩包解压到卷中,然后重启。要恢复凭据,必须使用同一把加密密钥。
#更新 n8n 而不破坏实例
n8n 会频繁发布版本。镜像的 latest 标签指向最新稳定版本,next 标签指向测试版本;带编号的标签则可以固定到特定版本。使用 Compose 时,更新只需三条命令:获取新镜像、停止旧容器、使用相同配置重新创建容器。数据保留在卷中,不会受到影响。如果存在数据库架构迁移,会在启动时自动执行。
三项预防措施可以避免大多数意外。先进行备份:数据库迁移无法回滚。请阅读 github.com/n8n-io/n8n/releases 上的发行说明和文档中的更新页面 docs.n8n.io/hosting/installation/updating/:主要版本会移除环境变量或更改默认行为,文档还专门记录了不兼容变更。最后,如果实例对你很重要,最好使用带编号的标签,而不是 latest:这样可以由你选择升级时机,而不是在下次 pull 时被动升级。
#谨慎地通过 HTTPS 暴露 n8n
只要您是在运行 n8n 的机器上或从本地网络使用它,前面的安装就足够了。当需要暴露服务时,通常是因为 webhook:第三方服务需要调用您的实例,或您需要从外部访问它。有两条路径,第一条通常就是正确选择。
- 使用 VPN,而不是公开暴露
- Tailscale、WireGuard 或路由器的 VPN 可以让您从任何地方访问 n8n,而无需在 Internet 上开放端口。对于不使用公共 webhook 的个人用途,这是最安全、最简单的方案。实例在私有网络中仍使用 HTTP;如果通过 VPN 地址访问,则必须将 N8N_SECURE_COOKIE=false。
- 带证书的反向代理
- 要接收公共 Webhook,需要域名、负责终止 TLS 的反向代理以及证书。n8n 的官方示例使用 Traefik;我们展示 Caddy,其配置只需三行,并且会自行获取 Let's Encrypt 证书。
在下面的配置中,n8n 不再发布任何端口:只有 Caddy 可通过 80 和 443 访问,并通过 Compose 的内部网络将请求转发给 n8n 容器。N8N_HOST、N8N_PROTOCOL 和 WEBHOOK_URL 变量会告知 n8n 对外提供服务时使用的公共地址;没有这些变量,编辑器中显示的 webhook URL 会指向 localhost,OAuth 重定向也会失败。
在运行 docker compose up -d 之前,n8n.votre-domaine.fr 的 DNS 记录必须指向该机器的公网地址,并且 80 和 443 端口必须转发到该地址。随后,Caddy 会向 Let's Encrypt 申请证书,并自动续期。caddy_data 和 caddy_config 卷会在重启之间保留证书和状态。
#故障排除:常见阻塞问题
- 打开时显示的安全 Cookie 消息
- 您通过 HTTP 从非 localhost 地址访问 n8n。您可以改用 HTTPS,或者仅在私有网络中添加 N8N_SECURE_COOKIE=false。
- /home/node/.n8n 的权限错误
- 容器以 node 用户而非 root 用户运行。当您将命名卷替换为权限不匹配的主机目录时,就会出现这种情况。请保留命名卷,或将目录所有者对齐到用户 ID 1000,也就是镜像中的 node 用户。
- 计划任务工作流在错误的时间运行
- GENERIC_TIMEZONE 缺失或拼写错误。预期值应为 IANA 时区名称,例如 Europe/Paris。每个工作流也可以在其设置中指定自己的时区。
- Webhook 显示 localhost 地址
- WEBHOOK_URL 未定义,或与第三方服务联系你的地址不一致。该值必须以斜杠结尾,并包含协议。
- 数据库无限膨胀
- 执行记录清理已禁用或时间设置过长。请检查 EXECUTIONS_DATA_PRUNE 和 EXECUTIONS_DATA_MAX_AGE,也要留意保留成功执行记录数据的选项;该选项可以针对每个工作流单独禁用。
- 更新后,n8n 拒绝启动
- 使用 docker compose logs n8n 查看日志:其中的消息通常会指出某个变量已被移除,或某次迁移失败。请与版本说明进行比较,必要时恢复备份。
- n8n 在同一台机器上看不到 Ollama
- 在容器中,localhost 指的是容器本身,而不是主机。应使用的地址取决于系统以及 Ollama 的启动方式;下面引用的 n8n 指南和 Ollama 将对此进行说明。
对于文档中找不到答案的问题,community.n8n.io 论坛很活跃,开发方也会在那里答复。请注明确切版本、安装方式和日志行:这是他们首先会询问的三项信息。
#深入了解
实例已经部署、完成备份并保持最新。下一步自然是将其连接到本地模型,然后集成到更大的技术栈中。本指南参考的官方来源包括:n8n 文档的托管部分(docs.n8n.io/hosting/)、Docker 安装页面(docs.n8n.io/hosting/installation/docker/)、更新页面、许可证页面以及社区版功能页面。这些页面会随版本变化:如果它们与本指南存在差异,应以这些页面为准。
- n8n + Ollama:使用 100 % 本地 AI 实现自动化
- 后续指南:AI 节点、从容器连接到 Ollama,以及首批翻译和摘要工作流。https://quelllm.fr/guide/n8n-ollama-automatisation-workflow
- 通过 Docker 运行 Ollama
- 如果你还想让 Ollama 以容器形式运行在 n8n 旁边,并访问 GPU。https://quelllm.fr/guide/ollama-docker-installation-guide
- 使用 Docker Compose 在生产环境中部署 LLM
- 完整技术栈 Ollama、Open WebUI、Qdrant、n8n 和 Traefik 都放在同一个 Compose 文件中,用于超越单独实例的场景。https://quelllm.fr/guide/deployer-llm-docker-compose-production
- 保护你的 Ollama 服务器
- 身份验证、防火墙、反向代理:这些暴露规则适用于所有自托管服务,包括 n8n。https://quelllm.fr/guide/securiser-serveur-ollama
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。