跳到主要内容

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 EngineDocker 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 镜像:

Docker Desktop

你也可以使用命令行拉取最新版本或特定版本:

# 拉取最新(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 devpnpm start 在本地运行 n8n,可以将 cloudflared 作为独立服务启动:

# 终端 1:启动 cloudflared 隧道服务
pnpm --filter n8n-containers services --services cloudflared

# 终端 2:本地启动 n8n
pnpm dev

services 命令的作用:

  1. 启动 cloudflared,指向 host.docker.internal:5678(你本地的 n8n)。
  2. 从 cloudflared 的指标端点获取公共隧道 URL。
  3. 将包含 WEBHOOK_URLN8N_PROXY_HOPS=1.env 文件写入 packages/cli/bin/.env
  4. pnpm devpnpm start 会通过 dotenv 自动读取该 .env 文件。

完成后清理:

pnpm --filter n8n-containers services:clean

后续步骤

  • Docker 镜像 的 README 文件中了解更多 Docker 配置信息。
  • 了解如何配置和扩展 n8n。
  • 或探索 n8n 的使用方法:尝试快速入门指南。