N8N 本地部署完整教程

目录

  1. N8N 简介
  2. 系统要求
  3. Docker 部署(推荐)
  4. npm/node.js 部署
  5. 访问与初始化
  6. docker-compose.yml 完整参数说明
  7. 高级配置
  8. 管理与维护
  9. 常见问题
  10. 参考链接

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

  1. 访问 Docker 官网
  2. 根据操作系统选择对应版本:
    • 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(可选)

  1. 打开 Docker Desktop
  2. 点击右上角齿轮图标(Settings)
  3. 进入 Docker Engine 配置页面
  4. 配置镜像加速(见 3.1.4 节)
  5. 配置资源限制(推荐 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)

  1. 打开 Docker Desktop
  2. 点击右上角齿轮图标 → Settings
  3. 选择 Docker Engine
  4. 在 JSON 配置中添加:
{
  "registry-mirrors": [
    "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}
  1. 点击 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
  1. 访问 Node.js 官网
  2. 下载 LTS 版本(推荐 v20.x 或 v22.x)
  3. 运行安装程序,按照提示完成安装
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:创建账户

  1. 在登录页面点击 “Sign up” 或 “注册”
  2. 填写以下信息:
    • Email:你的邮箱地址
    • First Name:名字
    • Last Name:姓氏
    • Password:设置密码(至少 8 位)

步骤 2:跳过引导教程

  • 点击 “Skip” 跳过引导教程(可以后续再学习)

步骤 3:进入主界面

  • 现在你可以看到 N8N 的主界面
  • 点击 “Add Workflow” 开始创建第一个工作流

5.3 首次工作流示例

创建一个简单的工作流:定时发送 HTTP 请求

  1. 点击 “Add Workflow” 创建新工作流
  2. 点击 “+” 添加节点
  3. 搜索 “Schedule” 节点(定时触发器)
  4. 配置触发间隔(例如:每 5 分钟)
  5. 再次点击 “+” 添加 “HTTP Request” 节点
  6. 配置请求 URL 和方法
  7. 点击 “Save” 保存工作流
  8. 点击 “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 localhost0.0.0.0
N8N_PORT N8N 服务监听端口 5678 5678
N8N_PROTOCOL 访问协议 http httphttps
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 postgresdbsqlitemysqldb
DB_POSTGRESDB_HOST PostgreSQL 主机 - postgreslocalhosthost.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 truefalse
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 truefalse

数据库类型说明

类型 说明 适用场景
`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 失败时保存执行数据 - allnone
EXECUTIONS_DATA_SAVE_ON_SUCCESS 成功时保存执行数据 - allnone
EXECUTIONS_DATA_SAVE_ON_PROGRESS 执行过程中保存数据 - allnone
EXECUTIONS_DATA_PRUNE 是否自动清理历史执行 true truefalse
EXECUTIONS_DATA_MAX_AGE 执行记录保留时间(小时) 336 数字
EXECUTIONS_DATA_MAX_AGE_HISTORY 历史记录保留时间(小时) - 数字
EXECUTIONS_PROCESS 执行模式 main mainown

详细说明

  • 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 regulartriggereval
N8N_EDITOR_BASE_URL 编辑器基础 URL - http://localhost:5678
N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTT 关闭时跳过 Webhook 注销 false truefalse
N8N_ALLOW_IFRAME 是否允许 iframe 嵌入 false truefalse
N8N_FRAME_ANCESTORS Frame 嵌入策略 - noneself*
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 30s1m
timeout 检查超时时间 30s 10s5s
retries 重试次数 3 35
start_period 启动等待时间 0s 10s30s

健康检查命令示例

# 方法 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

问题描述ECONNREFUSEDConnection 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
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐