Docker 安装#
对于大多数自托管场景,n8n 推荐使用 Docker。它提供了一个干净且隔离的运行环境,避免了操作系统和工具链之间的兼容性问题,并简化了数据库和环境管理。
你也可以结合 Docker Compose 在 Docker 中运行 n8n。各种架构的 Docker Compose 配置可以在 n8n-hosting 仓库 中找到。
自托管知识前提
自托管 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 的场景。
Latest 与 Next 版本
n8n 每周通常会发布一个新的次要版本。latest 版本适用于生产环境。next 是最新的开发版本,应视为 beta 版本:可能存在不稳定情况。如遇问题,请通过 论坛 反馈。
当前 latest 版本:1.115.2
当前 next 版本:1.116.1
启动 n8n#
在终端中运行以下命令,将 <YOUR_TIMEZONE> 替换为你的 时区:
1
2
3
4
5
6
7
8
9
10
11| ```
docker
5678:5678
GENERIC_TIMEZONE="<YOUR_TIMEZONE>"
TZ="<YOUR_TIMEZONE>"
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
N8N_RUNNERS_ENABLED=true
\
---|---
该命令会创建一个用于存储持久化数据的卷,下载所需的 n8n 镜像,并使用以下配置启动容器:
* 映射并暴露主机上的端口 `5678`。
* 设置容器的时区:
* `TZ` 环境变量设置系统时区,以控制 `date` 等脚本和命令返回的时间。
* `GENERIC_TIMEZONE` 环境变量 为面向调度的节点(如 Schedule Trigger 节点)设置正确的时区。
* 强制执行安全的文件权限,保护 n8n 配置文件。
* 启用 任务运行器(task runners),这是在 n8n 中执行任务的推荐方式。
* 将 `n8n_data` 卷挂载到 `/home/node/.n8n` 目录,以便在容器重启后保留您的数据。
启动后,您可以通过访问以下地址使用 n8n:<http://localhost:5678>
## 与 PostgreSQL 一起使用#
默认情况下,n8n 使用 SQLite 来保存凭证(credentials)、历史执行记录和工作流。n8n 也支持 PostgreSQL,可通过环境变量进行配置,如下所述。
**仍建议持久化 `.n8n` 目录**
使用 PostgreSQL 时,n8n 不再需要使用 `.n8n` 目录中的 SQLite 数据库文件。但该目录仍包含其他重要数据,例如加密密钥、实例日志以及源代码管理功能的相关资源。虽然您可以绕过其中部分需求(例如通过设置 `N8N_ENCRYPTION_KEY` 环境变量),但为了防止潜在问题,最佳做法仍是继续为该目录映射一个持久化卷。
要将 n8n 与 PostgreSQL 一起使用,请执行以下命令,并将占位符(用尖括号表示,例如 `<POSTGRES_USER>`)替换为实际值:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ```
docker\
\
5678:5678\
GENERIC_TIMEZONE="<YOUR_TIMEZONE>"\
TZ="<YOUR_TIMEZONE>"\
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true\
N8N_RUNNERS_ENABLED=true\
DB_TYPE=postgresdb\
DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE>\
DB_POSTGRESDB_HOST=<POSTGRES_HOST>\
DB_POSTGRESDB_PORT=<POSTGRES_PORT>\
DB_POSTGRESDB_USER=<POSTGRES_USER>\
DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA>\
DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD>\
\---|---
你可以在 n8n 托管仓库 中找到完整的用于 PostgreSQL 的 docker-compose 文件。
更新#
要更新 n8n,在 Docker Desktop 中,进入 Images(镜像) 选项卡,从上下文菜单中选择 Pull(拉取),以下载最新的 n8n 镜像: Docker Desktop 你也可以使用命令行拉取最新版本或特定版本:
1
2
3
4
5
6
7
8| ```
拉取最新(稳定)版本
docker# 拉取特定版本 docker# 拉取下一个(不稳定)版本 docker
---|---
拉取更新后的镜像后,停止你的 n8n 容器并重新启动。你也可以使用命令行操作。将以下命令中的 `<container_id>` 替换为第一条命令中查到的容器 ID:1 2 3 4 5 6 7 8 9 10 11
| ```
# 查找你的容器 ID
docker# 停止具有 `<container_id>` 的容器
docker# 删除具有 `<container_id>` 的容器
docker# 启动容器
docker=<container_name>[options]---|---
使用 Docker Compose 更新#
如果你使用 Docker Compose 文件运行 n8n,请按照以下步骤更新 n8n:
1
2
3
4
5
6
7
8
9
10
11| ```
进入包含 docker compose 文件的目录
cd# 拉取最新版本 docker# 停止并删除旧版本 docker# 启动容器 docker
---|---
## 带隧道的 n8n#
警告
仅用于本地开发和测试。在生产环境中使用是不安全的。
为了使 GitHub 等外部服务的触发节点(trigger nodes)能够使用 webhook,n8n 必须可以从公网访问。n8n 内置了一个 隧道服务,可以将来自 n8n 服务器的请求转发到你的本地 n8n 实例。
通过运行以下命令并添加 `--tunnel` 参数来启动 n8n:1 2 3 4 5 6 7 8 9 10 11 12
| ```
docker\
\
5678:5678\
GENERIC_TIMEZONE="<YOUR_TIMEZONE>"\
TZ="<YOUR_TIMEZONE>"\
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true\
N8N_RUNNERS_ENABLED=true\
\
\---|---
下一步#
- 在 Docker 镜像 的 README 文件中查看更多关于 Docker 配置的信息。
- 进一步了解 配置 和 扩展 n8n 的方法。
- 或者开始探索使用 n8n:尝试 快速入门指南(Quickstarts)。