【AI工作流搭建n8n】—— Docker + PostgreSQL 生产环境部署全攻略:MCP 集成与 Skills 技能实战

【n8n】------ Docker + PostgreSQL 生产环境部署全攻略:MCP 集成与 Skills 技能实战

本文基于实际部署经验,详细记录 n8n 工作流自动化平台的生产环境部署过程,涵盖 MCP 集成配置、Skills 技能系统、Docker + PostgreSQL 架构、备份恢复策略及运维避坑指南。


为什么选 n8n?

说白了,市面上的自动化工具不少------Zapier、Make、Activepieces 都能用。但 n8n 有几个点特别戳我:

  • 开源自托管:数据不出内网,合规部门不会找你麻烦
  • 400+ 集成节点:主流 SaaS 基本都覆盖了
  • 原生 AI 支持:LangChain、OpenAI 节点开箱即用
  • MCP 协议支持:让 Claude、GPT 等 AI 直接调用你的工作流
  • 代码灵活性:复杂逻辑用 JavaScript/Python 写,不被低代码框死

实际用下来,n8n 最大的优势是可扩展性。社区节点生态活跃,遇到官方没覆盖的场景,装个社区包或者自己写个节点就解决了。


一、架构选型:为什么是 Docker + PostgreSQL?

本章小结

方案 适用场景 优势 劣势
Docker + SQLite 本地测试、Demo 零配置,开箱即用 单文件数据库,并发差
Docker + PostgreSQL 生产环境 稳定、支持并发、易于备份 需要额外配置
Kubernetes + PostgreSQL 大规模部署 高可用、自动扩缩容 复杂度高

生产环境直接上 PostgreSQL,别犹豫。SQLite 在并发写入时会锁表,工作流一多就卡。


二、环境准备

前置条件

组件 版本要求 用途
Docker 20.10+ 容器运行时
Docker Compose 2.0+ 编排服务
操作系统 Linux/macOS/Windows WSL2 宿主机
内存 4GB+(推荐 8GB) 运行 n8n + PostgreSQL

安装 Docker(macOS)

bash 复制代码
# 使用 Homebrew 安装
brew install --cask docker

# 或者从 Docker Desktop 官网下载
# https://www.docker.com/products/docker-desktop/

验证安装:

bash 复制代码
docker --version
docker compose version

三、Docker Compose 部署配置

项目结构

复制代码
n8n/
├── docker-compose.yml    # 服务编排
├── .env                  # 环境变量(敏感信息)
├── local-files/          # 本地文件挂载目录
├── backups/              # 备份目录
├── backup.sh             # 备份脚本
└── restore.sh            # 恢复脚本

docker-compose.yml

yaml 复制代码
services:
  postgres:
    image: postgres:15
    container_name: n8n-postgres
    restart: always
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-n8n_password}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      # 基础配置
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - GENERIC_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
      - NODE_ENV=production

      # 功能解锁配置
      - NODE_EXCLUDE=[]
      - N8N_ENABLE_EXECUTE_COMMAND=true
      - N8N_BLOCK_ENV_VARS_IN_EXECUTE_COMMAND=false
      - N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true

      # 数据库配置
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD:-n8n_password}
      - DB_POSTGRESDB_SCHEMA=public

      # 安全配置
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD:-secure_password}

      # MCP 配置
      - N8N_MCP_MANAGED_BY_ENV=true
      - N8N_MCP_ACCESS_ENABLED=true
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files
    depends_on:
      postgres:
        condition: service_healthy

volumes:
  postgres_data:
    driver: local
  n8n_data:
    driver: local

.env 环境变量

env 复制代码
# PostgreSQL 配置(必须修改)
POSTGRES_PASSWORD=your_secure_password_here

# n8n 管理员密码(必须修改)
N8N_PASSWORD=your_n8n_password_here

# 时区配置
GENERIC_TIMEZONE=Asia/Shanghai
TZ=Asia/Shanghai

启动服务

bash 复制代码
# 创建必要目录
mkdir -p local-files backups

# 启动服务
docker compose up -d

# 查看服务状态
docker compose ps

# 查看实时日志
docker compose logs -f n8n

成功标志 :访问 http://localhost:5678,看到 n8n 登录界面。


四、MCP 集成:让 AI 直接操控你的工作流

什么是 MCP?

MCP(Model Context Protocol)是 Anthropic 提出的协议,让 AI 助手(如 Claude)能够调用外部工具和服务。n8n 原生支持 MCP,意味着你可以:

  • 让 Claude 直接触发你的 n8n 工作流
  • 通过 AI 对话完成复杂的数据处理流程
  • 构建 AI Agent,自动调用 400+ 集成服务

配置步骤

Step 1:启用 MCP 服务

在 docker-compose.yml 中添加环境变量:

yaml 复制代码
- N8N_MCP_MANAGED_BY_ENV=true
- N8N_MCP_ACCESS_ENABLED=true
Step 2:创建 MCP Trigger 节点

在 n8n 中创建工作流,添加 MCP Trigger 节点:

  1. 打开 n8n 界面
  2. 创建新工作流
  3. 搜索并添加 "MCP Trigger" 节点
  4. 配置认证方式(推荐使用 Access Token)
Step 3:配置 Claude Desktop 连接

编辑 claude_desktop_config.json

json 复制代码
{
  "mcpServers": {
    "n8n": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:5678/mcp-server/http",
        "--header",
        "Authorization: Bearer YOUR_MCP_TOKEN"
      ],
      "env": {
        "AUTH_TOKEN": "YOUR_MCP_TOKEN"
      }
    }
  }
}
Step 4:配置 Claude CLI 连接
bash 复制代码
claude mcp add --transport http n8n-mcp http://localhost:5678/mcp-server/http \
  --header "Authorization: Bearer YOUR_MCP_TOKEN"

验证 MCP 连接

在 Claude 中输入:

复制代码
请列出我所有的 n8n 工作流

如果返回工作流列表,说明 MCP 集成成功。

避坑提醒

🔴 重点 :MCP Token 需要在 n8n 界面中生成,路径为 Settings > API > Access Tokens

⚠️ 注意 :本地开发环境使用 http://localhost:5678,生产环境必须配置 HTTPS。


五、Skills 技能系统:社区节点扩展

社区节点是什么?

n8n 内置 400+ 官方节点,但总有覆盖不到的场景。社区节点(Community Nodes)是第三方开发的扩展包,通过 npm 安装后即可在 n8n 中使用。

安装方式

方式一:GUI 安装(推荐)
  1. 打开 n8n 界面
  2. 进入 Settings > Community Nodes
  3. 点击 Install
  4. 输入 npm 包名(如 n8n-nodes-xxx
  5. 点击 Install
方式二:命令行安装
bash 复制代码
# 进入 n8n 容器
docker compose exec n8n sh

# 安装社区节点
npm i n8n-nodes-nodeName

# 退出容器
exit

# 重启 n8n 服务
docker compose restart n8n
方式三:环境变量安装(生产环境推荐)

在 docker-compose.yml 中配置:

yaml 复制代码
- N8N_COMMUNITY_PACKAGES_MANAGED_BY_ENV=true
- N8N_COMMUNITY_PACKAGES='[{"name":"n8n-nodes-foo","version":"1.2.3"}]'

推荐的社区节点

包名 功能 场景
n8n-nodes-redis Redis 操作 缓存、队列
n8n-nodes-csv CSV 处理 数据导入导出
n8n-nodes-pdf PDF 生成 报表生成
n8n-nodes-wechat 微信集成 消息推送

功能解锁配置

为了让社区节点能使用系统能力(如执行命令、访问文件),需要配置:

yaml 复制代码
# 取消所有节点限制
- NODE_EXCLUDE=[]

# 开启 execute command
- N8N_ENABLE_EXECUTE_COMMAND=true
- N8N_BLOCK_ENV_VARS_IN_EXECUTE_COMMAND=false

# 允许社区包使用系统能力
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true

六、备份与恢复策略

备份内容

数据类型 存储位置 重要性
PostgreSQL 数据库 postgres_data ⭐⭐⭐ 核心数据
n8n 配置和工作流 n8n_data ⭐⭐⭐ 核心数据
本地文件 ./local-files ⭐⭐ 用户文件

自动备份脚本

创建 backup.sh

bash 复制代码
#!/bin/bash

BACKUP_DIR="./backups"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# 备份 PostgreSQL
docker compose exec -T postgres pg_dump -U n8n n8n > "$BACKUP_DIR/n8n_db_$DATE.sql"

# 备份 n8n 数据卷
docker run --rm -v n8n_n8n_data:/source -v $(pwd)/$BACKUP_DIR:/backup alpine tar czf /backup/n8n_data_$DATE.tar.gz -C /source .

# 备份本地文件
if [ -d "./local-files" ]; then
    tar czf "$BACKUP_DIR/local_files_$DATE.tar.gz" ./local-files
fi

# 删除 30 天前的备份
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "备份完成: $BACKUP_DIR"

设置定时备份

bash 复制代码
# 添加执行权限
chmod +x backup.sh

# 添加到 crontab(每天凌晨 2 点)
crontab -e
# 添加以下行:
0 2 * * * cd /path/to/n8n && ./backup.sh >> ./backups/backup.log 2>&1

恢复数据

创建 restore.sh

bash 复制代码
#!/bin/bash

if [ -z "$1" ]; then
    echo "使用方法: ./restore.sh <备份日期>"
    echo "例如: ./restore.sh 20260610_020000"
    exit 1
fi

BACKUP_DATE=$1

# 停止 n8n
docker compose stop n8n

# 恢复数据库
docker compose exec -T postgres psql -U n8n n8n < "./backups/n8n_db_$BACKUP_DATE.sql"

# 恢复数据卷
docker run --rm -v n8n_n8n_data:/target -v $(pwd)/backups:/backup alpine tar xzf /backup/n8n_data_$BACKUP_DATE.tar.gz -C /target

# 重启服务
docker compose start n8n

echo "恢复完成"

数据安全保障

操作 数据安全 说明
docker compose restart ✅ 安全 只重启容器
docker compose down ✅ 安全 删除容器,保留卷
docker compose down && docker compose up -d ✅ 安全 重建容器,保留卷
docker compose down -v ❌ 危险 会删除数据卷!

七、运维管理

常用命令速查

bash 复制代码
# 服务管理
docker compose up -d          # 启动
docker compose down           # 停止
docker compose restart        # 重启
docker compose ps             # 查看状态

# 日志查看
docker compose logs -f n8n    # n8n 实时日志
docker compose logs -f postgres  # PostgreSQL 日志

# 进入容器
docker compose exec n8n sh
docker compose exec postgres psql -U n8n -d n8n

# 资源监控
docker stats n8n n8n-postgres

更新服务

bash 复制代码
# 拉取最新镜像
docker compose pull

# 备份(更新前必须备份!)
./backup.sh

# 重建容器
docker compose down && docker compose up -d

# 验证版本
docker compose logs n8n | grep Version

环境变量生效规则

修改内容 是否需要重建容器 命令
环境变量 ✅ 需要 docker compose down && docker compose up -d
端口映射 ✅ 需要 docker compose down && docker compose up -d
卷挂载 ✅ 需要 docker compose down && docker compose up -d
应用内部配置 ❌ 不需要 docker compose restart

八、常见问题排查

问题 1:无法访问 n8n 界面

症状 :浏览器打不开 http://localhost:5678

排查步骤

bash 复制代码
# 检查容器状态
docker compose ps

# 检查端口占用
lsof -i :5678

# 查看日志
docker compose logs n8n

常见原因:端口被占用、容器启动失败、防火墙拦截。

问题 2:数据库连接失败

症状 :日志显示 ECONNREFUSEDconnection refused

排查步骤

bash 复制代码
# 检查 PostgreSQL 是否就绪
docker compose exec postgres pg_isready -U n8n

# 检查数据库配置
docker compose exec n8n env | grep DB_

常见原因:PostgreSQL 未启动完成、密码配置错误。

问题 3:Python Task Runner 警告

症状 :日志显示 Failed to start Python task runner

解决方案:这个警告不影响核心功能。n8n 主要使用 JavaScript,Python 是可选的。如果需要 Python 支持,配置外部模式:

yaml 复制代码
- N8N_RUNNERS_MODE=external

问题 4:社区节点安装失败

症状:安装社区节点时提示权限错误

解决方案

bash 复制代码
# 确保配置了以下环境变量
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
- N8N_ENABLE_EXECUTE_COMMAND=true

九、生产环境检查清单

  • ⭐ 已修改所有默认密码(PostgreSQL、n8n 管理员)
  • ⭐ 已配置时区(GENERIC_TIMEZONETZ
  • ⭐ 已启用文件权限强制(N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
  • ⭐ 已配置数据持久化(Docker 卷)
  • ⭐ 已设置服务自动重启(restart: always
  • ⭐ 已配置 PostgreSQL 健康检查
  • ⭐ 已创建备份脚本并设置定时任务
  • ⭐ 已测试备份恢复流程
  • 已配置 MCP 访问权限
  • 已安装必要的社区节点
  • 已配置 HTTPS(生产环境必须)
  • 已配置防火墙规则
  • 已配置日志轮转

十、总结

n8n 是一个强大的工作流自动化平台,结合 Docker + PostgreSQL 可以构建稳定可靠的生产环境。关键要点:

  1. 数据库选 PostgreSQL:别用 SQLite 上生产
  2. 备份必须做:自动化备份 + 定期验证恢复
  3. MCP 集成是亮点:让 AI 直接操控工作流
  4. 社区节点扩展能力:官方没覆盖的场景,社区包来补
  5. 环境变量管理配置:修改配置后需要重建容器

部署就这么回事,配置写好,一键启动。真正花时间的是后续的工作流设计和调试------但那又是另一个话题了。


参考资源

相关推荐
doiito1 小时前
【Agent Harness实战】我让 Agent 的上下文“瘦身”成功,Token 省了,记忆反而更好了
人工智能·架构
意图共鸣1 小时前
技术视角:意图共鸣科技《AI记忆链商业化白皮书3.0》中的第二大脑与AI参谋架构
人工智能
正经教主1 小时前
【docker基础】 第七课:Docker Compose 多容器实战
运维·docker·容器
大模型最新论文速读1 小时前
06-10 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理
小二·1 小时前
PostgreSQL 高级特性与性能调优
数据库·postgresql
梦想三三1 小时前
矿物智能识别项目实战(一):从零开始清洗工业矿物数据
大数据·人工智能·数据挖掘
雨水的早晨1 小时前
什么是SKill
人工智能·skill
gis分享者1 小时前
AI数字营销实测体验,产品推广创作体验
人工智能·csdn·产品推广·数字营销·体验
下班走回家1 小时前
RAG 技术的进化:从朴素检索到 Agentic RAG
开发语言·人工智能·python