Docker 安装
n8n 建议在大多数自托管场景中使用 Docker。它提供了一个干净、隔离的环境,避免了操作系统和工具链的不兼容问题,并使数据库和环境管理更加简单。
你也可以使用 Docker Compose 在 Docker 中运行 n8n。你可以在 n8n-hosting 仓库中找到适用于各种架构的 Docker Compose 配置文件。
自托管前提知识
自托管 n8n 需要具备一定的技术知识,包括:
- 服务器和容器的搭建与配置
- 应用资源管理与扩展
- 服务器和应用的安全加固
- n8n 的配置管理
n8n 推荐有经验的用户进行自托管。操作失误可能导致数据丢失、安全问题和服务中断。如果你不具备服务器管理经验,n8n 推荐使用 n8n Cloud。
你也可以参照我们的视频指南操作:
前提条件
开始之前,请先安装 Docker:
- Docker Desktop 适用于 Mac、Windows 和 Linux。Docker Desktop 包含 Docker Engine 和 Docker Compose。
- Docker Engine 和 Docker Compose 也可作为独立软件包在 Linux 上安装。适用于没有图形界面的 Linux 服务器,或者不希望使用 Docker Desktop UI 的场景。
稳定版与 Beta 版
n8n 几乎每周发布一个新的次版本。stable 版本适用于生产环境,beta 是最新发布版本,可能不够稳定。如需反馈问题,请使用社区论坛。
当前 stable 版本:2.10.2 当前 beta 版本:2.11.1
启动 n8n
在终端中运行以下命令,将 <YOUR_TIMEZONE> 占位符替换为你的时区:
docker volume create n8n_data
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e GENERIC_TIMEZONE="`<YOUR_TIMEZONE>`" \
-e TZ="`<YOUR_TIMEZONE>`" \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
此命令会创建一个用于存储持久化数据的卷,下载所需的 n8n 镜像,并使用以下设置启动容器:
- 将容器的
5678端口映射并暴露到宿主机。 - 为容器设置时区:
TZ环境变量设置系统时区,控制date等脚本和命令的返回值。GENERIC_TIMEZONE环境变量为 Schedule Trigger 节点等以调度为导向的节点设置正确的时区。
- 强制对 n8n 配置文件使用安全的文件权限。
- 启用任务执行器,这是 n8n 中执行任务的推荐方式。
- 将
n8n_data卷挂载到/home/node/.n8n目录,以在容器重启时持久保存数据。
启动后,打开浏览器访问 http://localhost:5678 即可使用 n8n。
使用 PostgreSQL
默认情况下,n8n 使用 SQLite 保存凭据、历史执行记录和工作流。n8n 也支持 PostgreSQL,可通过环境变量进行配置,具体如下。
仍建议持久化 .n8n 目录
使用 PostgreSQL 时,n8n 不再需要使用 .n8n 目录存放 SQLite 数据库文件。但该目录仍然包含其他重要数据,如加密密钥、实例日志和源代码控制功能资产。虽然你可以通过某些方法绕过部分需求(例如设置 N8N_ENCRYPTION_KEY 环境变量),但最好还是继续为该目录映射一个持久化卷,以避免潜在问题。
要配合 PostgreSQL 使用 n8n,执行以下命令,将尖括号内的占位符(如 <数据库名>)替换为实际值:
docker volume create n8n_data
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e GENERIC_TIMEZONE="`<YOUR_TIMEZONE>`" \
-e TZ="`<YOUR_TIMEZONE>`" \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-e DB_TYPE=postgresdb \
-e DB_POSTGRESDB_DATABASE=<数据库名> \
-e DB_POSTGRESDB_HOST=<主机地址> \
-e DB_POSTGRESDB_PORT=<端口号> \
-e DB_POSTGRESDB_USER=<用户名> \
-e DB_POSTGRESDB_SCHEMA=<模式名> \
-e DB_POSTGRESDB_PASSWORD=<密码> \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
你可以在 n8n hosting 仓库中找到适用于 PostgreSQL 的完整 docker-compose 文件。
更新
要更新 n8n,在 Docker Desktop 中导航到 Images 标签页,从上下文菜单中选择 Pull 来下载最新的 n8n 镜像:

你也可以使用命令行拉取最新版本或特定版本:
# 拉取最新(stable)版本
docker pull docker.n8n.io/n8nio/n8n
# 拉取特定版本
docker pull docker.n8n.io/n8nio/n8n:1.81.0
# 拉取 next(不稳定)版本
docker pull docker.n8n.io/n8nio/n8n:next
拉取更新的镜像后,停止你的 n8n 容器并重新启动。你也可以使用命令行操作。在以下命令中,将 <容器ID> 替换为第一条命令查到的容器 ID:
# 查找你的容器 ID
docker ps -a
# 停止带有 <容器ID> 的容器
docker stop <容器ID>
# 移除带有 <容器ID> 的容器
docker rm <容器ID>
# 启动容器
docker run --name=<容器名> [选项] -d docker.n8n.io/n8nio/n8n
使用 Docker Compose 更新
如果你使用 Docker Compose 文件运行 n8n,请按以下步骤更新 n8n:
# 切换到包含 docker compose 文件的目录
cd <你的目录>
# 拉取最新版本
docker compose pull
# 停止并移除旧版本
docker compose down
# 启动容器
docker compose up -d
带隧道的 n8n 使用
危险
仅用于本地开发和测试,不适合在生产环境中使用。
开发工具
隧道功能是本地开发的便捷工具,其底层实现可能随 n8n 版本更新而变化。
为了让 GitHub 等外部服务的触发节点能够使用 Webhook,n8n 必须能够从互联网访问。n8n 通过 cloudflared 提供隧道服务,将网络请求重定向到你本地的 n8n 实例。隧道功能需要安装 Docker。
根据你运行 n8n 的方式,有两种使用隧道的方法:
完整栈(Full stack)
这种方式将 n8n 和 cloudflared 一起在容器中运行。隧道 URL 会在启动时打印出来,并且所有内容都会自动连接:
pnpm stack --tunnel
仅服务(Services only)
如果你更倾向于使用 pnpm dev 或 pnpm start 在本地运行 n8n,可以将 cloudflared 作为独立服务启动:
# 终端 1:启动 cloudflared 隧道服务
pnpm --filter n8n-containers services --services cloudflared
# 终端 2:本地启动 n8n
pnpm dev
services 命令的作用:
- 启动 cloudflared,指向
host.docker.internal:5678(你本地的 n8n)。 - 从 cloudflared 的指标端点获取公共隧道 URL。
- 将包含
WEBHOOK_URL和N8N_PROXY_HOPS=1的.env文件写入packages/cli/bin/.env。 pnpm dev和pnpm start会通过 dotenv 自动读取该.env文件。
完成后清理:
pnpm --filter n8n-containers services:clean
后续步骤
- 在 Docker 镜像 的 README 文件中了解更多 Docker 配置信息。
- 了解如何配置和扩展 n8n。
- 或探索 n8n 的使用方法:尝试快速入门指南。