N8N 本地部署完整教程
本文提供N8N开源工作流自动化工具的本地部署完整教程。N8N支持400+应用集成,具有可视化操作界面和AI原生支持。教程涵盖Docker部署(推荐)和npm/node.js部署两种方式,详细说明系统要求、安装步骤、访问初始化及高级配置。内容包括Docker环境安装、镜像源配置、docker-compose参数说明,以及常见问题解决方案。适用于Windows/macOS/Linux系统,帮助用户快速
N8N 本地部署完整教程
目录
1. N8N 简介
1.1 什么是 N8N
N8N 是一款强大的开源工作流自动化工具,采用公平代码(Fair-code)许可模式。它允许用户通过可视化拖拽界面,将不同的应用程序、服务和数据源连接起来,创建复杂的自动化工作流。
1.2 核心特点
| 特点 | 说明 |
|---|---|
| 开源免费 | 代码开源,可自行托管,无使用限制 |
| 400+ 应用集成 | 支持 Google、Slack、GitHub、Trello 等主流服务 |
| 可视化操作 | 无需编程,通过拖拽节点即可创建工作流 |
| AI 原生支持 | 内置 AI 节点,可集成 DeepSeek、OpenAI 等大模型 |
| 数据安全可控 | 本地部署,数据完全由自己掌控 |
| 高度可定制 | 支持自定义节点和插件开发 |
1.3 适用场景
- 🤖 客服机器人
- 📧 智能邮件助手
- ✍️ 内容生成
- 📊 CRM 自动化
- 📈 数据分析
- 🔔 监控告警
2. 系统要求
2.1 硬件要求
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 1 核 | 2 核及以上 |
| 内存 | 1 GB | 2 GB 及以上 |
| 存储 | 1 GB 可用空间 | 5 GB 及以上 |
| 网络 | 稳定网络连接 | 宽带网络 |
2.2 软件要求
| 软件 | 版本要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10+/macOS/Linux | 支持主流操作系统 |
| Docker | 20.10+ | 推荐使用 Docker Desktop |
| Docker Compose | 2.0+ | 用于编排多容器部署 |
| Node.js | 18.x 或更高 | npm 部署方式需要 |
| npm | 8.x+ | 随 Node.js 自动安装 |
2.3 操作系统支持
| 操作系统 | 支持情况 | 备注 |
|---|---|---|
| Windows 10/11 | ✅ 完全支持 | 推荐使用 Docker Desktop |
| macOS | ✅ 完全支持 | 支持 Intel 和 Apple Silicon |
| Ubuntu | ✅ 完全支持 | 推荐使用 Docker Engine |
| CentOS | ✅ 完全支持 | 需要手动安装 Docker |
| Debian | ✅ 完全支持 | 推荐使用 Docker Engine |
| Fedora | ✅ 完全支持 | 需要手动安装 Docker |
3. Docker 部署(推荐)
Docker 部署是 N8N 官方推荐的方式,具有环境隔离、部署简单、易于管理等优点。
3.1 安装 Docker 环境
3.1.1 Windows/macOS
步骤 1:下载 Docker Desktop
- 访问 Docker 官网
- 根据操作系统选择对应版本:
- Windows:Docker Desktop for Windows(.exe 安装包)
- macOS:Docker Desktop for Mac(.dmg 安装包)
步骤 2:安装 Docker Desktop
- Windows:双击下载的
.exe文件,按照向导一路"下一步"完成安装 - macOS:将下载的
.dmg文件拖拽到 Applications 文件夹
步骤 3:启用 WSL 2(仅 Windows)
Windows 安装 Docker Desktop 时会自动安装 WSL 2,如果没有自动安装,可手动执行:
:: 管理员权限打开命令提示符
:: 启用 WSL 功能
wsl --install
:: 设置 WSL 2 为默认版本
wsl --set-default-version 2
:: 更新 WSL 内核
wsl --update
步骤 4:验证安装
打开终端或命令提示符,执行:
# 查看 Docker 版本
docker --version
# 输出示例:Docker version 24.0.7, build afdd53b
# 查看 Docker Compose 版本
docker-compose --version
# 输出示例:Docker Compose version v2.21.0
# 验证 Docker 服务状态
docker info
步骤 5:配置 Docker Desktop(可选)
- 打开 Docker Desktop
- 点击右上角齿轮图标(Settings)
- 进入 Docker Engine 配置页面
- 配置镜像加速(见 3.1.4 节)
- 配置资源限制(推荐 CPU 2核+、内存 4GB+)
3.1.2 Linux (Ubuntu/Debian)
步骤 1:移除旧版本
# 移除不兼容或过时的 Docker 实现
sudo apt-get remove docker.io docker-compose docker-doc containerd runc
步骤 2:安装必要软件包
# 更新软件包索引
sudo apt-get update
# 安装必要软件包
sudo apt-get install -y ca-certificates curl gnupg lsb-release
步骤 3:添加 Docker 官方 GPG 密钥
# 创建目录存放密钥
sudo install -m 0755 -d /etc/apt/keyrings
# 下载并添加 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg
步骤 4:添加 Docker 仓库
# 添加 Docker 官方 APT 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤 5:安装 Docker 引擎
# 更新软件包索引
sudo apt-get update
# 安装 Docker 引擎、CLI 和 Docker Compose 插件
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
步骤 6:启动 Docker 服务
# 启动 Docker 服务
sudo systemctl start docker
# 设置开机自启动
sudo systemctl enable docker
# 验证 Docker 服务状态
sudo systemctl status docker
步骤 7:配置当前用户(免 sudo 运行 Docker)
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 应用组变更(需要重新登录或执行以下命令)
newgrp docker
# 验证
docker ps
3.1.3 Linux (CentOS/RHEL)
# 卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装必要软件包
sudo yum install -y yum-utils
# 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并设置开机自启动
sudo systemctl start docker
sudo systemctl enable docker
# 添加用户到 docker 组
sudo usermod -aG docker $USER
3.1.4 Docker 镜像源配置(国内用户)
如果拉取 Docker 镜像速度慢或失败,可以配置国内镜像加速器。
方法一:Docker Desktop 配置(Windows/macOS)
- 打开 Docker Desktop
- 点击右上角齿轮图标 → Settings
- 选择 Docker Engine
- 在 JSON 配置中添加:
{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
- 点击 Apply & restart
方法二:Linux 系统配置
# 编辑 daemon.json 文件
sudo vim /etc/docker/daemon.json
# 添加以下内容
{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://dockerproxy.com",
"https://mirror.aliyuncs.com"
]
}
# 重启 Docker 服务
sudo systemctl restart docker
# 验证配置
docker info | grep "Registry Mirrors"
常用国内镜像加速器
| 镜像源 | 地址 |
|---|---|
| 阿里云 | https://<your-id>.mirror.aliyuncs.com |
| 网易 | https://hub-mirror.c.163.com |
| 百度云 | https://mirror.baidubce.com |
| DaoCloud | https://docker.m.daocloud.io |
| 华为云 | https://<your-id>.mirror.swr.myhuaweicloud.com |
3.2 创建 N8N 部署目录
# 创建部署目录
mkdir -p ~/n8n
# 进入目录
cd ~/n8n
# 创建数据存储目录
mkdir -p data
3.3 Docker Compose 部署
3.3.1 快速部署(标准版)
创建 docker-compose.yml 文件:
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://localhost:5678/
- TZ=Asia/Shanghai
- GENERIC_TIMEZONE=Asia/Shanghai
volumes:
- n8n_data:/home/node/.n8n
- ./data:/data
volumes:
n8n_data:
external: false
启动服务:
# 在后台启动
docker-compose up -d
# 查看启动状态
docker-compose ps
# 查看日志
docker-compose logs -f n8n
3.3.2 中文版本部署(含汉化)
如果需要中文界面,可以使用社区维护的中文镜像:
version: '3.8'
services:
n8n:
image: deluxebear/n8n:2.0.0-chs
container_name: n8n2x
restart: unless-stopped
ports:
- "5678:5678"
environment:
- TZ=Asia/Shanghai
- GENERIC_TIMEZONE=Asia/Shanghai
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://localhost:5678/
# 解除 Execute Command 组件限制
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
volumes:
- n8n_data:/home/node/.n8n
- ./data:/files
volumes:
n8n_data:
external: false
3.3.3 单命令快速启动(临时测试)
如果只是临时测试,可以使用 docker run 命令直接启动:
# 创建数据卷
docker volume create n8n_data
# 启动容器
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
-e TZ=Asia/Shanghai \
-e N8N_HOST=0.0.0.0 \
docker.n8n.io/n8nio/n8n
参数说明:
| 参数 | 说明 |
|---|---|
-it |
交互模式运行,分配伪终端 |
--rm |
容器退出后自动删除 |
--name n8n |
指定容器名称为 n8n |
-p 5678:5678 |
将容器的 5678 端口映射到宿主机的 5678 端口 |
-v n8n_data:/home/node/.n8n |
将数据卷挂载到容器内的 .n8n 目录 |
-e TZ=Asia/Shanghai |
设置时区为上海时区 |
-e N8N_HOST=0.0.0.0 |
允许从外部访问 |
4. npm/node.js 部署
npm 部署方式适合开发者进行调试、自定义开发或快速原型验证。
4.1 安装 Node.js
4.1.1 Windows/macOS
- 访问 Node.js 官网
- 下载 LTS 版本(推荐 v20.x 或 v22.x)
- 运行安装程序,按照提示完成安装
4.1.2 Linux (Ubuntu/Debian)
# 使用 NodeSource 仓库安装指定版本
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs
# 验证安装
node -v
npm -v
4.1.3 Linux (CentOS/RHEL)
# 使用 NodeSource 仓库
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
# 安装 Node.js
sudo yum install -y nodejs
# 验证安装
node -v
npm -v
4.2 安装并启动 N8N
4.2.1 全局安装方式
# 全局安装 n8n
npm install n8n -g
# 启动 n8n
n8n
4.2.2 本地安装方式
# 创建项目目录
mkdir n8n-project
cd n8n-project
# 初始化 npm 项目
npm init -y
# 安装 n8n
npm install n8n
# 使用 npx 启动
npx n8n
4.2.3 使用 PM2 管理进程(生产环境推荐)
# 全局安装 PM2
npm install pm2 -g
# 启动 n8n
pm2 start n8n --name n8n --interpreter node -- restart
# 设置开机自启动
pm2 startup
pm2 save
# 查看状态
pm2 status
# 查看日志
pm2 logs n8n
# 重启
pm2 restart n8n
# 停止
pm2 stop n8n
4.3 环境变量配置
创建 .env 文件配置环境变量:
# 基础配置
N8N_HOST=localhost
N8N_PORT=5678
N8N_PROTOCOL=http
WEBHOOK_URL=http://localhost:5678/
# 时区配置
TZ=Asia/Shanghai
GENERIC_TIMEZONE=Asia/Shanghai
# 安全配置
N8N_ENCRYPTION_KEY=your_random_encryption_key_at_least_32_chars
# 执行配置
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=336
# 数据库配置(可选)
# DB_TYPE=postgresdb
# DB_POSTGRESDB_HOST=localhost
# DB_POSTGRESDB_PORT=5432
# DB_POSTGRESDB_DATABASE=n8n
# DB_POSTGRESDB_USER=n8n
# DB_POSTGRESDB_PASSWORD=your_password
启动时加载环境变量:
# Linux/macOS
export $(cat .env | xargs) && n8n
# Windows (PowerShell)
Get-Content .env | ForEach-Object -Process {$_.Split('=')} -Begin {$h = @{}} -End {$h}
$env:N8N_HOST = "localhost"
n8n
5. 访问与初始化
5.1 访问 N8N
部署完成后,打开浏览器访问:
- 本地访问:http://localhost:5678
- 局域网访问:http://:5678
5.2 初始化设置
步骤 1:创建账户
- 在登录页面点击 “Sign up” 或 “注册”
- 填写以下信息:
- Email:你的邮箱地址
- First Name:名字
- Last Name:姓氏
- Password:设置密码(至少 8 位)
步骤 2:跳过引导教程
- 点击 “Skip” 跳过引导教程(可以后续再学习)
步骤 3:进入主界面
- 现在你可以看到 N8N 的主界面
- 点击 “Add Workflow” 开始创建第一个工作流
5.3 首次工作流示例
创建一个简单的工作流:定时发送 HTTP 请求
- 点击 “Add Workflow” 创建新工作流
- 点击 “+” 添加节点
- 搜索 “Schedule” 节点(定时触发器)
- 配置触发间隔(例如:每 5 分钟)
- 再次点击 “+” 添加 “HTTP Request” 节点
- 配置请求 URL 和方法
- 点击 “Save” 保存工作流
- 点击 “Active” 激活工作流
6. docker-compose.yml 完整参数说明
以下是 docker-compose.yml 的完整配置参数说明:
6.1 version
version: '3.8'
| 参数 | 说明 |
|---|---|
| version | Docker Compose 文件版本号。推荐使用 ‘3.8’,支持 Docker Compose 的大部分功能 |
6.2 services
services:
n8n:
# 服务配置
6.3 image
services:
n8n:
image: docker.n8n.io/n8nio/n8n
| 参数 | 说明 |
|---|---|
| image | Docker 镜像名称和标签 |
可用镜像版本:
| 镜像标签 | 说明 | 适用场景 |
|---|---|---|
latest |
最新稳定版 | 推荐 - 生产环境使用 |
next |
下一个版本 | 测试最新功能(可能不稳定) |
1.x.x |
指定版本号 | 需要特定版本时使用 |
deluxebear/n8n:2.0.0-chs |
中文汉化版 | 需要中文界面时使用 |
6.4 container_name
services:
n8n:
container_name: n8n
| 参数 | 说明 | 默认值 |
|---|---|---|
| container_name | 指定容器名称,方便管理和识别 | 自动生成(格式:目录名-服务名-序号) |
6.5 restart
services:
n8n:
restart: unless-stopped
| 参数 | 说明 |
|---|---|
| restart | 容器重启策略 |
可选值:
| 值 | 说明 |
|---|---|
no |
不自动重启(默认) |
always |
总是重启,包括容器退出和 Docker 守护进程重启 |
unless-stopped |
除非手动停止,否则总是重启 |
on-failure |
仅在容器因错误退出时重启 |
推荐设置:unless-stopped
6.6 ports
services:
n8n:
ports:
- "5678:5678"
- "5679:5678" # 可以映射多个端口
| 参数 | 说明 |
|---|---|
| ports | 端口映射列表,格式:宿主机端口:容器端口 |
详细说明:
| 映射 | 说明 |
|---|---|
"5678:5678" |
将宿主机的 5678 端口映射到容器的 5678 端口 |
注意事项:
- 端口号必须是数字,且范围在 1-65535 之间
- 宿主机端口不能与其他服务冲突
- 如果 5678 端口已被占用,可以改为其他端口,如
"5680:5678"
6.7 environment
services:
n8n:
environment:
# 基础配置
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://localhost:5678/
# 时区配置
- TZ=Asia/Shanghai
- GENERIC_TIMEZONE=Asia/Shanghai
# 安全配置
- N8N_ENCRYPTION_KEY=your_encryption_key_here
# 数据库配置(可选)
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=your_password
# 执行配置
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
# 功能配置
- EXECUTIONS_DATA_SAVE_ON_PROGRESS=all
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_password
6.7.1 基础配置参数
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
| N8N_HOST | N8N 服务绑定的地址 | localhost | localhost 或 0.0.0.0 |
| N8N_PORT | N8N 服务监听端口 | 5678 | 5678 |
| N8N_PROTOCOL | 访问协议 | http | http 或 https |
| WEBHOOK_URL | Webhook 回调 URL | - | http://your-domain.com/ |
详细说明:
-
N8N_HOST:localhost:仅允许本地访问0.0.0.0:允许所有网络接口访问(推荐用于服务器部署)
-
N8N_PROTOCOL:http:使用 HTTP 协议https:使用 HTTPS 协议(需要配合反向代理或 SSL 证书)
-
WEBHOOK_URL:- 用于接收来自外部服务的 Webhook 请求
- 必须是可以从外部访问的完整 URL
- 格式:
http://<域名或IP>:<端口>/
6.7.2 时区配置参数
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
| TZ | 容器时区 | UTC | Asia/Shanghai |
| GENERIC_TIMEZONE | 通用时区设置 | UTC | Asia/Shanghai |
时区值参考:
| 值 | 时区 | 说明 |
|---|---|---|
| `Asia/Shanghai** | UTC+8 | 中国标准时间(CST) |
| `Asia/Tokyo** | UTC+9 | 日本标准时间(JST) |
| `Europe/London** | UTC+0/UTC+1 | 英国时间 |
| `America/New_York** | UTC-5/UTC-4 | 美国东部时间 |
| `UTC** | UTC+0 | 协调世界时 |
6.7.3 安全配置参数
| 参数 | 说明 | 默认值 |
|---|---|---|
| N8N_ENCRYPTION_KEY | 用于加密敏感数据的密钥 | 自动生成 |
| N8N_BASIC_AUTH_ACTIVE | 是否启用基础认证 | false |
| N8N_BASIC_AUTH_USER | 基础认证用户名 | - |
| N8N_BASIC_AUTH_PASSWORD | 基础认证密码 | - |
详细说明:
-
N8N_ENCRYPTION_KEY:- 用于加密存储的凭证、API 密钥等敏感信息
- 建议使用至少 32 字符的随机字符串
- 重要:一旦设置,不建议更改,否则已加密的数据将无法解密
- 生成随机密钥:
openssl rand -hex 24
-
基础认证配置示例:
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_secure_password
6.7.4 数据库配置参数
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
| DB_TYPE | 数据库类型 | sqlite | postgresdb、sqlite、mysqldb |
| DB_POSTGRESDB_HOST | PostgreSQL 主机 | - | postgres、localhost、host.docker.internal |
| DB_POSTGRESDB_PORT | PostgreSQL 端口 | 5432 | 5432 |
| DB_POSTGRESDB_DATABASE | 数据库名称 | - | n8n |
| DB_POSTGRESDB_USER | 数据库用户名 | - | n8n |
| DB_POSTGRESDB_PASSWORD | 数据库密码 | - | your_password |
| DB_POSTGRESDB_SSL_ENABLED | 是否启用 SSL | false | true、false |
| DB_POSTGRESDB_SSL_CA | SSL CA 证书路径 | - | /path/to/ca.crt |
| DB_POSTGRESDB_SSL_CERT | SSL 证书路径 | - | /path/to/client.crt |
| DB_POSTGRESDB_SSL_KEY | SSL 密钥路径 | - | /path/to/client.key |
| DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED | 是否拒绝未授权连接 | true | true、false |
数据库类型说明:
| 类型 | 说明 | 适用场景 |
|---|---|---|
| `sqlite** | 轻量级数据库,文件存储 | 单用户、开发测试环境 |
| `postgresdb** | PostgreSQL | 推荐 - 生产环境 |
| `mysqldb** | MySQL/MariaDB | 需要使用 MySQL 时 |
PostgreSQL 配置示例:
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=your_secure_password
6.7.5 执行配置参数
| 参数 | 说明 | 默认值 | 可选值 |
|---|---|---|---|
| EXECUTIONS_DATA_SAVE_ON_ERROR | 失败时保存执行数据 | - | all、none |
| EXECUTIONS_DATA_SAVE_ON_SUCCESS | 成功时保存执行数据 | - | all、none |
| EXECUTIONS_DATA_SAVE_ON_PROGRESS | 执行过程中保存数据 | - | all、none |
| EXECUTIONS_DATA_PRUNE | 是否自动清理历史执行 | true | true、false |
| EXECUTIONS_DATA_MAX_AGE | 执行记录保留时间(小时) | 336 | 数字 |
| EXECUTIONS_DATA_MAX_AGE_HISTORY | 历史记录保留时间(小时) | - | 数字 |
| EXECUTIONS_PROCESS | 执行模式 | main | main、own |
详细说明:
-
EXECUTIONS_DATA_SAVE_ON_ERROR:all:保存所有失败执行的完整数据none:不保存失败执行数据
-
EXECUTIONS_DATA_SAVE_ON_SUCCESS:all:保存所有成功执行的完整数据none:不保存成功执行数据
-
EXECUTIONS_DATA_PRUNE:true:自动清理超过EXECUTIONS_DATA_MAX_AGE时间的执行记录false:手动管理执行记录
-
EXECUTIONS_DATA_MAX_AGE:- 执行记录保留时间(小时)
- 默认 336 小时 = 14 天
- 设置为
-1表示永久保留
-
EXECUTIONS_PROCESS:main:在主进程执行(资源占用少,但影响主服务)own:在独立进程执行(资源占用多,但不会影响主服务)
6.7.6 功能配置参数
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
| EXECUTIONS_MODE | 执行模式 | regular | regular、trigger、eval |
| N8N_EDITOR_BASE_URL | 编辑器基础 URL | - | http://localhost:5678 |
| N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTT | 关闭时跳过 Webhook 注销 | false | true、false |
| N8N_ALLOW_IFRAME | 是否允许 iframe 嵌入 | false | true、false |
| N8N_FRAME_ANCESTORS | Frame 嵌入策略 | - | none、self、* |
6.7.7 邮件配置参数
| 参数 | 说明 | 默认值 |
|---|---|---|
| N8N_SMTP_HOST | SMTP 服务器地址 | - |
| N8N_SMTP_PORT | SMTP 端口 | 587 |
| N8N_SMTP_USER | SMTP 用户名 | - |
| N8N_SMTP_PASS | SMTP 密码 | - |
| N8N_SMTP_SENDER | 发件人邮箱 | - |
| N8N_SMTP_SSL | 是否启用 SSL | false |
邮件配置示例:
environment:
- N8N_SMTP_HOST=smtp.gmail.com
- N8N_SMTP_PORT=587
- N8N_SMTP_USER=your-email@gmail.com
- N8N_SMTP_PASS=your-app-password
- N8N_SMTP_SENDER=n8n@your-domain.com
6.8 volumes
services:
n8n:
volumes:
- n8n_data:/home/node/.n8n
- ./data:/files
- ./workflows:/workflows
- /local/path:/container/path:ro
| 参数 | 说明 | 类型 |
|---|---|---|
| volumes | 数据卷挂载配置 | 数组 |
挂载类型:
| 类型 | 语法 | 说明 |
|---|---|---|
| 命名卷 | n8n_data:/home/node/.n8n |
Docker 管理的持久化存储 |
| 绑定挂载 | ./data:/files |
挂载本地目录到容器 |
| 只读挂载 | ./config:/app/config:ro |
以只读方式挂载 |
预定义数据卷:
| 数据卷路径 | 说明 | 用途 |
|---|---|---|
| `/home/node/.n8n** | N8N 主数据目录 | 存储配置、工作流、凭证等 |
| `/files** | 文件存储目录 | 存储上传的文件 |
| `/workflows** | 工作流目录 | 导入/导出工作流 |
完整 volumes 配置示例:
volumes:
# 命名数据卷:存储 N8N 配置和工作流
n8n_data:
external: false
# 本地绑定挂载:存储上传的文件
- ./data:/files
# 本地绑定挂载:导入导出工作流
- ./workflows:/workflows
# 只读挂载:配置文件
- ./n8n.conf:/home/node/.n8n/n8n.conf:ro
6.9 depends_on
services:
n8n:
depends_on:
- postgres
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
postgres:
image: postgres:15-alpine
# PostgreSQL 配置...
| 参数 | 说明 |
|---|---|
| depends_on | 指定服务依赖关系,确保依赖服务先启动 |
注意事项:
depends_on只确保启动顺序,不等待服务就绪- 对于需要等待数据库就绪的场景,建议添加健康检查
6.10 healthcheck
services:
n8n:
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
| test | 健康检查命令 | - | ["CMD", "curl", "-f", "http://localhost:5678/"] |
| interval | 检查间隔 | 30s | 30s、1m |
| timeout | 检查超时时间 | 30s | 10s、5s |
| retries | 重试次数 | 3 | 3、5 |
| start_period | 启动等待时间 | 0s | 10s、30s |
健康检查命令示例:
# 方法 1:使用 wget
test: ["CMD", "wget", "--spider", "-q", "http://localhost:5678/healthz"]
# 方法 2:使用 curl
test: ["CMD", "curl", "-f", "http://localhost:5678/healthz"]
# 方法 3:使用 nc(netcat)
test: ["CMD", "nc", "-z", "localhost", "5678"]
# 方法 4:直接检查进程
test: ["CMD", "pgrep", "-f", "n8n"]
6.11 networks
services:
n8n:
networks:
- n8n-network
networks:
n8n-network:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
| 参数 | 说明 | 默认值 |
|---|---|---|
| networks | 指定容器连接的网络 | default bridge |
网络模式说明:
| 模式 | 说明 |
|---|---|
| bridge | 桥接网络,容器间可通信 |
| host | 使用宿主机网络栈 |
| none | 禁用网络 |
6.12 deploy(仅 Swarm 模式)
services:
n8n:
deploy:
replicas: 1
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
| 参数 | 说明 |
|---|---|
| deploy | Docker Swarm 部署配置 |
| replicas | 副本数量 |
| resources.limits | 资源限制 |
| resources.reservations | 资源预留 |
| restart_policy | 重启策略 |
7. 高级配置
7.1 PostgreSQL 数据库配置
生产环境强烈建议使用 PostgreSQL 作为数据库。
7.1.1 创建 docker-compose.yml
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
# 基础配置
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://localhost:5678/
# 时区配置
- TZ=Asia/Shanghai
- GENERIC_TIMEZONE=Asia/Shanghai
# 安全配置
- N8N_ENCRYPTION_KEY=your_32_char_minimum_encryption_key
# PostgreSQL 数据库配置
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=your_strong_password_here
# 执行配置
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
networks:
- n8n-network
postgres:
image: postgres:15-alpine
container_name: n8n-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=your_strong_password_here
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
networks:
- n8n-network
networks:
n8n-network:
driver: bridge
volumes:
n8n_data:
postgres_data:
7.1.2 初始化数据库
# 启动服务
docker-compose up -d
# 等待几秒钟让 PostgreSQL 初始化完成
# 验证 PostgreSQL 连接
docker exec -it n8n-postgres psql -U n8n -d n8n -c "\dt"
# 查看 N8N 日志
docker logs n8n
7.2 MySQL/MariaDB 配置
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- DB_TYPE=mysqldb
- DB_MYSQLDB_HOST=mysql
- DB_MYSQLDB_PORT=3306
- DB_MYSQLDB_DATABASE=n8n
- DB_MYSQLDB_USER=n8n
- DB_MYSQLDB_PASSWORD=your_password
- TZ=Asia/Shanghai
volumes:
- n8n_data:/home/node/.n8n
depends_on:
mysql:
condition: service_healthy
mysql:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=n8n
MYSQL_USER=n8n
MYSQL_PASSWORD=your_password
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot_password"]
interval: 10s
timeout: 5s
retries: 5
volumes:
n8n_data:
mysql_data:
7.3 HTTPS 配置
使用 Nginx 反向代理实现 HTTPS 访问。
7.3.1 安装 Nginx
Ubuntu/Debian:
sudo apt update
sudo apt install -y nginx
CentOS/RHEL:
sudo yum install -y nginx
7.3.2 Nginx 配置文件
创建 /etc/nginx/sites-available/n8n.conf:
server {
listen 80;
server_name your-domain.com; # 替换为你的域名或 IP
# 重定向到 HTTPS(需要 SSL 证书后启用)
# return 301 https://$server_name$request_uri;
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
# 基础代理配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-N8N-Base-URL $scheme://$host/;
# WebSocket 支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 缓冲设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
}
7.3.3 启用配置
# 创建软链接
sudo ln -s /etc/nginx/sites-available/n8n.conf /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
# 设置开机自启动
sudo systemctl enable nginx
7.3.4 SSL 证书配置
使用 Let’s Encrypt 免费获取 SSL 证书:
# 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
# 获取并自动配置 SSL 证书
sudo certbot --nginx -d your-domain.com
7.4 配置外部数据库
7.4.1 使用云数据库
如果使用云数据库(如阿里云 RDS、AWS RDS),只需修改环境变量:
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=rm-bp1xxxxx.rds.aliyuncs.com # RDS 地址
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=your_password
- DB_POSTGRESDB_SSL_ENABLED=true
- DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false
7.5 高可用配置
7.5.1 使用 Redis 消息队列
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- N8N_HOST=0.0.0.0
- TZ=Asia/Shanghai
volumes:
- n8n_data:/home/node/.n8n
depends_on:
redis:
condition: service_healthy
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
n8n_data:
redis_data:
7.6 多节点部署
version: '3.8'
services:
n8n-main:
image: docker.n8n.io/n8nio/n8n
container_name: n8n-main
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=password
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- TZ=Asia/Shanghai
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
n8n-worker-1:
image: docker.n8n.io/n8nio/n8n
container_name: n8n-worker-1
restart: unless-stopped
command: n8n worker
environment:
- N8N_HOST=0.0.0.0
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=password
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- TZ=Asia/Shanghai
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
postgres:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_USER=n8n
POSTGRES_PASSWORD=password
POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7
restart: unless-stopped
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
n8n_data:
postgres_data:
redis_data:
8. 管理与维护
8.1 常用 Docker 命令
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看容器状态
docker-compose ps
# 查看实时日志
docker-compose logs -f n8n
# 查看最近 100 行日志
docker-compose logs --tail=100 n8n
# 重启服务
docker-compose restart n8n
# 重启所有服务
docker-compose restart
# 重新创建容器(会删除旧容器)
docker-compose up -d --force-recreate
# 更新镜像并重启
docker-compose pull
docker-compose up -d
# 停止并删除数据卷(危险!会丢失所有数据)
docker-compose down -v
# 进入容器内部
docker exec -it n8n /bin/sh
# 查看容器资源使用情况
docker stats n8n
# 查看容器 IP 地址
docker inspect n8n | grep '"IPAddress"'
8.2 日志管理
# 查看所有日志
docker-compose logs
# 查看特定服务的日志
docker-compose logs n8n
# 实时查看日志
docker-compose logs -f n8n
# 按时间过滤日志(过去 1 小时的日志)
docker-compose logs --since 1h n8n
# 导出日志到文件
docker-compose logs n8n > n8n.log
# 日志轮转配置(创建 /etc/logrotate.d/docker-compose)
/home/user/n8n/*.log {
daily
rotate 7
compress
delaycompress
missingok
ifempty
create 0644 root root
}
8.3 备份与恢复
8.3.1 备份数据卷
# 方法一:使用 alpine 镜像备份
docker run --rm \
-v n8n_n8n_data:/data \
-v $(pwd):/backup \
alpine \
tar czf /backup/n8n-backup-$(date +%Y%m%d).tar.gz \
-C /data .
# 方法二:使用 rsync 备份到远程服务器
docker run --rm \
-v n8n_n8n_data:/data \
alpine \
tar czf - -C /data . \
| ssh user@remote-server "cat > n8n-backup-$(date +%Y%m%d).tar.gz"
8.3.2 备份 PostgreSQL 数据库
# 备份数据库
docker exec n8n-postgres pg_dump -U n8n n8n > n8n-db-backup-$(date +%Y%m%d).sql
# 压缩备份
docker exec n8n-postgres pg_dump -U n8n n8n | gzip > n8n-db-backup-$(date +%Y%m%d).sql.gz
# 远程备份
docker exec n8n-postgres pg_dump -U n8n n8n | ssh user@remote-server "cat > n8n-db-$(date +%Y%m%d).sql"
8.3.3 恢复数据
# 恢复数据卷备份
docker run --rm \
-v n8n_n8n_data:/data \
-v $(pwd):/backup \
alpine \
sh -c "cd /data && tar xzf /backup/n8n-backup-*.tar.gz --strip-components=1"
# 恢复 PostgreSQL 数据库
docker exec -i n8n-postgres psql -U n8n -d n8n < n8n-db-backup.sql
# 恢复压缩的数据库备份
gunzip -c n8n-db-backup-*.sql.gz | docker exec -i n8n-postgres psql -U n8n -d n8n
8.3.4 自动化备份脚本
创建 /home/user/n8n/backup.sh:
#!/bin/bash
# 备份配置
BACKUP_DIR="/home/user/n8n/backups"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据卷
echo "Backing up n8n data volume..."
docker run --rm \
-v n8n_n8n_data:/data \
-v $BACKUP_DIR:/backup \
alpine \
tar czf /backup/n8n-data-$DATE.tar.gz \
-C /data .
# 备份 PostgreSQL 数据库
echo "Backing up PostgreSQL database..."
docker exec n8n-postgres pg_dump -U n8n n8n | gzip > $BACKUP_DIR/n8n-db-$DATE.sql.gz
# 清理旧备份
echo "Cleaning up old backups..."
find $BACKUP_DIR -name "n8n-*.tar.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "n8n-*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "Backup completed: $DATE"
添加定时任务:
# 编辑 crontab
crontab -e
# 添加每天凌晨 3 点执行备份
0 3 * * * /home/user/n8n/backup.sh >> /home/user/n8n/backup.log 2>&1
8.4 更新 N8N
8.4.1 Docker 方式更新
# 停止当前服务
docker-compose down
# 拉取最新镜像
docker-compose pull
# 重新启动
docker-compose up -d
# 验证版本
docker exec n8n n8n --version
8.4.2 指定版本更新
# 修改 docker-compose.yml 中的 image 版本
image: docker.n8n.io/n8nio/n8n:1.95.3
# 重新启动
docker-compose up -d
8.4.3 npm 方式更新
# 更新全局安装
npm update n8n -g
# 或重新安装
npm uninstall n8n -g
npm install n8n -g
# 查看版本
n8n --version
8.5 性能优化
8.5.1 Docker 资源限制
services:
n8n:
image: docker.n8n.io/n8nio/n8n
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '0.5'
memory: 512M
8.5.2 PostgreSQL 优化
创建 postgresql.conf 配置文件:
# 内存配置
shared_buffers = 512MB
effective_cache_size = 1GB
work_mem = 64MB
maintenance_work_mem = 256MB
# 连接配置
max_connections = 100
# 日志配置
log_statement = 'none'
log_min_duration_statement = 1000
# 写入优化
wal_buffers = 64MB
checkpoint_completion_target = 0.9
8.6 监控告警
8.6.1 健康检查端点
N8N 提供了以下健康检查端点:
| 端点 | 说明 |
|---|---|
http://localhost:5678/healthz |
基础健康检查 |
http://localhost:5678/api |
API 健康检查 |
8.6.2 Prometheus 监控配置
services:
n8n:
image: docker.n8n.io/n8nio/n8n
environment:
- N8N_METRICS=true
- N8N_METRICS_ENDPOINT=/metrics
9. 常见问题
9.1 Docker 相关问题
Q1:Docker 镜像拉取失败
问题描述:Error response from daemon: pull access denied
解决方案:
# 检查 Docker 服务状态
sudo systemctl status docker
# 重启 Docker 服务
sudo systemctl restart docker
# 检查网络连接
curl -I https://hub.docker.com
# 配置镜像加速(见 3.1.4 节)
sudo vim /etc/docker/daemon.json
# 重启 Docker
sudo systemctl restart docker
Q2:端口已被占用
问题描述:Bind for 0.0.0.0:5678 failed: port is already allocated
解决方案:
# 查看占用端口的进程
lsof -i :5678
# 或
netstat -tlnp | grep 5678
# 修改 docker-compose.yml 中的端口映射
ports:
- "5680:5678" # 改为其他端口
# 如果需要停止占用端口的进程
kill $(lsof -t -i:5678)
Q3:Docker 内存不足
问题描述:Docker failed to allocate memory
解决方案:
# 查看 Docker 使用情况
docker system df
# 清理未使用的资源
docker system prune -a
# 清理特定资源
docker image prune -a
docker container prune
docker volume prune
9.2 N8N 启动问题
Q4:容器启动后立即退出
问题描述:容器启动后状态为 Exited
解决方案:
# 查看详细日志
docker logs n8n
# 检查端口是否正确配置
docker exec n8n env | grep -E "N8N_PORT|WEBHOOK_URL"
# 检查数据卷权限
docker exec n8n ls -la /home/node/.n8n
Q5:无法访问 Webhook
问题描述:外部服务无法调用 Webhook
解决方案:
environment:
- N8N_HOST=0.0.0.0
- WEBHOOK_URL=http://your-public-ip:5678/
或使用域名配置:
environment:
- WEBHOOK_URL=https://n8n.your-domain.com/
Q6:Execute Command 节点不可用
问题描述:2.0+ 版本中 Execute Command 节点默认受限
解决方案:
environment:
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
或使用中文汉化镜像:
image: deluxebear/n8n:2.0.0-chs
9.3 数据库相关问题
Q7:无法连接 PostgreSQL
问题描述:ECONNREFUSED 或 Connection refused
解决方案:
# 检查 PostgreSQL 服务状态
docker-compose ps postgres
# 查看 PostgreSQL 日志
docker logs n8n-postgres
# 检查网络连接
docker exec n8n ping postgres
docker exec n8n nc -zv postgres 5432
# 验证数据库凭证
docker exec -it n8n-postgres psql -U n8n -d n8n
Q8:数据丢失
问题描述:重启容器后工作流消失
解决方案:
确保正确配置数据持久化:
volumes:
- n8n_data:/home/node/.n8n # 命名数据卷
# 检查数据卷
docker volume ls | grep n8n
# 查看数据卷详情
docker volume inspect n8n_n8n_data
9.4 性能相关问题
Q9:工作流执行缓慢
问题描述:工作流执行时间过长
解决方案:
# 查看容器资源使用情况
docker stats
# 增加容器资源限制
# 修改 docker-compose.yml
deploy:
resources:
limits:
cpus: '2'
memory: 2G
Q10:内存占用过高
问题描述:Docker 内存使用持续增长
解决方案:
environment:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=72 # 减少保留时间
- DB_TYPE=postgresdb # 使用独立数据库
9.5 安全相关问题
Q11:忘记加密密钥
问题描述:无法解密存储的凭证
解决方案:
重要提示:N8N_ENCRYPTION_KEY 一旦设置,不建议更改。如果密钥丢失,已加密的数据将无法恢复。
最佳实践:
- 将密钥存储在安全的地方(如密码管理器)
- 在部署时使用密钥管理服务
- 在 docker-compose.yml 中使用环境变量引用
environment:
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
Q12:安全漏洞修复
解决方案:
# 定期更新 N8N
docker-compose pull
docker-compose up -d
# 关注 N8N 安全公告
# https://docs.n8n.io/hosting/installation/updating/
10. 参考链接
10.1 官方文档
| 链接 | 说明 |
|---|---|
| N8N 官方文档 | N8N 官方文档首页 |
| N8N 自托管文档 | 自托管部署指南 |
| N8N GitHub | N8N 开源代码仓库 |
| N8N 社区论坛 | 用户交流社区 |
10.2 Docker 相关
| 链接 | 说明 |
|---|---|
| Docker 官方文档 | Docker 官方文档 |
| Docker Compose 文档 | Docker Compose 文档 |
| Docker Hub n8n 镜像 | N8N 官方镜像页面 |
10.3 相关工具
| 工具 | 用途 |
|---|---|
| Let’s Encrypt | 免费 SSL 证书 |
| Certbot | SSL 证书自动管理 |
| Nginx | 反向代理服务器 |
| PostgreSQL | 关系型数据库 |
10.4 社区资源
| 资源 | 说明 |
|---|---|
| N8N 中文社区 | N8N 中文社区 |
| N8N 模板库 | 官方工作流模板 |
| Awesome n8n | N8N 资源集合 |
附录
附录 A:完整 docker-compose.yml 示例(生产环境)
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
# 基础配置
- N8N_HOST=0.0.0.0
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://localhost:5678/
# 时区配置
- TZ=Asia/Shanghai
- GENERIC_TIMEZONE=Asia/Shanghai
# 安全配置
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
# PostgreSQL 数据库配置
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- DB_POSTGRESDB_SSL_ENABLED=false
# 执行配置
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
# 功能配置
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=${N8N_ADMIN_PASSWORD}
volumes:
- n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
networks:
- n8n-network
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '1'
memory: 1G
postgres:
image: postgres:15-alpine
container_name: n8n-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
networks:
- n8n-network
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
networks:
n8n-network:
driver: bridge
volumes:
n8n_data:
external: false
postgres_data:
external: false
附录 B:环境变量模板文件(.env)
# N8N 配置
N8N_ENCRYPTION_KEY=your_minimum_32_character_encryption_key
N8N_ADMIN_PASSWORD=your_secure_admin_password
# PostgreSQL 配置
POSTGRES_PASSWORD=your_secure_postgres_password
# SMTP 配置(可选)
# SMTP_HOST=smtp.gmail.com
# SMTP_PORT=587
# SMTP_USER=your-email@gmail.com
# SMTP_PASS=your-app-password
# 备份配置(可选)
# BACKUP_ENABLED=true
# BACKUP_RETENTION_DAYS=7
附录 C:常用端口说明
| 端口 | 服务 | 说明 |
|---|---|---|
| 5678 | N8N | N8N Web 界面和 API 端口 |
| 5432 | PostgreSQL | PostgreSQL 数据库端口 |
| 3306 | MySQL | MySQL 数据库端口 |
| 6379 | Redis | Redis 缓存端口 |
| 80 | HTTP | HTTP 服务端口 |
| 443 | HTTPS | HTTPS 服务端口 |
附录 D:密钥生成命令
# 生成加密密钥(推荐 32 字符以上)
openssl rand -hex 32
# 生成随机密码
openssl rand -base64 32
# 生成强密码
tr -dc 'A-Za-z0-9!@#$%^&*()_+' < /dev/urandom | head -c 32
更多推荐



所有评论(0)