【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 节点:
- 打开 n8n 界面
- 创建新工作流
- 搜索并添加 "MCP Trigger" 节点
- 配置认证方式(推荐使用 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 安装(推荐)
- 打开 n8n 界面
- 进入 Settings > Community Nodes
- 点击 Install
- 输入 npm 包名(如
n8n-nodes-xxx) - 点击 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:数据库连接失败
症状 :日志显示 ECONNREFUSED 或 connection 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_TIMEZONE、TZ) - ⭐ 已启用文件权限强制(
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true) - ⭐ 已配置数据持久化(Docker 卷)
- ⭐ 已设置服务自动重启(
restart: always) - ⭐ 已配置 PostgreSQL 健康检查
- ⭐ 已创建备份脚本并设置定时任务
- ⭐ 已测试备份恢复流程
- 已配置 MCP 访问权限
- 已安装必要的社区节点
- 已配置 HTTPS(生产环境必须)
- 已配置防火墙规则
- 已配置日志轮转
十、总结
n8n 是一个强大的工作流自动化平台,结合 Docker + PostgreSQL 可以构建稳定可靠的生产环境。关键要点:
- 数据库选 PostgreSQL:别用 SQLite 上生产
- 备份必须做:自动化备份 + 定期验证恢复
- MCP 集成是亮点:让 AI 直接操控工作流
- 社区节点扩展能力:官方没覆盖的场景,社区包来补
- 环境变量管理配置:修改配置后需要重建容器
部署就这么回事,配置写好,一键启动。真正花时间的是后续的工作流设计和调试------但那又是另一个话题了。