背景
n8n 是一款开源的工作流自动化工具,支持 400+ 集成节点,可替代 Zapier/Make 等 SaaS 平台。本文记录生产环境 Docker Compose 部署方案,包含数据持久化、安全认证与性能优化配置。
架构设计
Docker Compose → n8n 工作流自动化平台
├── 数据持久化: /data/docker/n8n_app/data → /home/node/.n8n
├── 文件存储: /data/docker/n8n_app/files → /home/node/files
└── 安全认证: Basic Auth + 文件访问限制
环境信息
| 组件 | 版本 | 节点 | 备注 |
|---|---|---|---|
| n8n | latest | 10.6.241.250 | docker.n8n.io 官方镜像 |
| Docker Compose | 3.8 | 宿主机 | |
| 数据卷 | host bind | /data/docker/n8n_app/data | 配置/凭证持久化 |
| 文件卷 | host bind | /data/docker/n8n_app/files | 工作流文件存储 |
部署步骤
1. 创建目录
mkdir -p /data/docker/n8n_app/{data,files}
cd /data/docker/n8n_app
2. docker-compose.yaml
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true
# 安全认证
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=changeme123
- N8N_SECURE_COOKIE=false
# 性能优化
- N8N_PAYLOAD_SIZE_MAX=16
- N8N_METRICS=true
# 文件访问限制(必须与挂载路径一致)
- N8N_RESTRICT_FILE_ACCESS_TO=/home/node/files
volumes:
- /data/docker/n8n_app/data:/home/node/.n8n
- /data/docker/n8n_app/files:/home/node/files
3. 权限设置(关键)
# 容器中 node userid 为 1000
chown -R 1000:1000 /data/docker/n8n_app/
4. 启动服务
# 启动
docker-compose up -d
# 查看日志
docker-compose logs -f n8n
# 停止
docker-compose down
# 停止并删除数据(谨慎)
docker-compose down -v
关键配置说明
| 环境变量 | 说明 | 建议值 |
|---|---|---|
GENERIC_TIMEZONE | 时区 | Asia/Shanghai |
N8N_BASIC_AUTH_ACTIVE | 启用基础认证 | true |
N8N_BASIC_AUTH_USER | 用户名 | 生产环境修改 |
N8N_BASIC_AUTH_PASSWORD | 密码 | 生产环境修改 |
N8N_RESTRICT_FILE_ACCESS_TO | 文件访问限制路径 | 与 volumes 挂载路径一致 |
N8N_PAYLOAD_SIZE_MAX | 最大负载(MB) | 16 |
N8N_METRICS | 启用指标 | true |
N8N_RUNNERS_ENABLED | 启用 runners | true |
生产注意事项
- 权限:宿主机目录必须属主 1000:1000(容器内 node 用户),否则启动失败
- 文件访问:
N8N_RESTRICT_FILE_ACCESS_TO必须与 volumes 挂载路径严格一致 - 安全:生产环境务必修改默认密码,建议启用 HTTPS 反向代理
- 备份:定期备份
/data/docker/n8n_app/data目录(含工作流定义与凭证) - 监控:
N8N_METRICS=true开启后,可通过/metrics端点采集 Prometheus 指标
故障排查
| 问题 | 现象 | 解决 |
|---|---|---|
| 权限拒绝 | 容器启动失败,日志报 Permission denied | chown -R 1000:1000 /data/docker/n8n_app/ |
| 文件访问受限 | 工作流无法读写文件,报 Access denied | 检查 N8N_RESTRICT_FILE_ACCESS_TO 与挂载路径一致性 |
| 时区错误 | 定时触发器时间不准 | 确认 GENERIC_TIMEZONE=Asia/Shanghai |
复盘
问题根因:初次部署未设置目录属主,容器内 node 用户 (uid=1000) 无法写入数据卷
解决:chown -R 1000:1000 修正权限
改进措施:
- 文档化权限要求,部署脚本自动设置
- 增加健康检查与自动重启策略
- 配置日志轮转,防止磁盘占满
本文首发于 wr.mrchi.cn,转载请注明出处。