本指南整理并统一了在 Ubuntu 服务器上使用 Docker Compose 部署 n8n 的完整流程,包含出站 HTTP/HTTPS 代理的正确配置方法(如 Mihomo/Clash,默认端口 7890),以及常见问题的排查与更新维护建议。按照本文一步一步执行即可完成部署。
目录导航
- 入口与最小部署:快速开始
- 出站代理设置与原理:代理配置与原理
- 代理容器化部署:Mihomo代理容器部署
- 合并一键部署示例:联合部署示例
- 生产环境实践建议:生产环境建议
- 常见问题与排查:常见问题与排查
- 更新与备份策略:更新与备份
- 安全与合规:安全与合规
阅读顺序建议
- 首次部署:先读“快速开始”,再读“代理配置与原理”
- 需要本机代理:参考“Mihomo 代理容器部署”或“联合部署示例”
- 上线前:务必阅读“生产环境建议”与“安全与合规”
- 维护:参考“更新与备份”和“常见问题与排查”
前提条件
- 已安装并可用的
docker与docker compose(或docker-compose) - 一台可访问的服务器 IP 或域名,放行外部访问端口(默认
5678) - 如需开启登录保护:准备一组用户名与强密码
- 如需代理:服务器本机或容器中已有代理服务(常用端口
7890)
快速部署(一步到位)
- 创建目录并进入
mkdir -p ~/n8n && cd ~/n8n
- 创建
docker-compose.yml(按需替换占位符)
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: always
ports:
- "5678:5678"
environment:
# 基本网络与时区
- N8N_HOST=<你的服务器域名或IP>
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://<你的服务器域名或IP>:5678/
- GENERIC_TIMEZONE=Asia/Shanghai
- N8N_SECURE_COOKIE=false
- N8N_COOKIE_SAMESITE=lax
# 登录保护(建议开启并设置强密码)
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=<用户名>
- N8N_BASIC_AUTH_PASSWORD=<强密码>
# 执行数据清理策略(避免数据库无限增长)
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # 最近7天
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_SUCCESS=none
# 出站代理(如需)
- N8N_USE_PROXY=true
- HTTP_PROXY=http://172.17.0.1:7890
- HTTPS_PROXY=http://172.17.0.1:7890
- NO_PROXY=localhost,127.0.0.1,<你的服务器IP>,mirror.ccs.tencentyun.com
volumes:
- ~/.n8n:/home/node/.n8n # 数据持久化(SQLite/凭据等)
- 启动服务
docker-compose up -d
- 访问与登录
- 浏览器打开:
http://<你的服务器域名或IP>:5678 - 如启用 Basic Auth:使用上述用户名与密码登录
代理验证与原理
若你在宿主机运行了 Mihomo/Clash 监听 7890 端口,可按如下方式验证:
- 宿主机验证代理连通性
curl -I -x http://127.0.0.1:7890 https://example.com
出现 HTTP/1.1 200 OK 表示宿主机代理通。
- 容器内验证(n8n 已设置环境代理)
docker exec -it n8n bash
curl -I https://example.com
exit
若也返回 200,表示容器内代理生效。
为什么使用 172.17.0.1:
- 该地址是 Docker 默认网桥
docker0在宿主机侧的 IP,充当容器访问宿主机的“网关” - 在容器内使用
127.0.0.1只会指向容器自身,不会访问到宿主机上的代理 - 使用宿主机公网 IP 易受安全组与防火墙影响,且流量绕公网效率低 如不确定,可运行:
ip addr show docker0
在 inet 后即为容器访问宿主机应使用的地址(通常是 172.17.0.1)。
部署 Mihomo 代理容器
如果你的服务器上还没有运行代理服务,可以直接以容器方式部署 Mihomo 代理服务。
- 准备订阅并生成
config.yaml
mkdir -p ~/mihomo && cd ~/mihomo
curl -L -o config.yaml "https://api.v1.mk/sub?target=clash&url=<你的原始订阅链接>"
ls -lh config.yaml
确保文件大小为几 KB 或几十 KB,非 0。
如转换文件未包含必要字段,请在 config.yaml 顶部检查或补充:
mixed-port: 7890
allow-lan: true
external-controller: 0.0.0.0:9090
- 使用 Docker Compose 部署 Mihomo
在
~/mihomo目录下创建或追加一个docker-compose.yml:
version: '3.8'
services:
mihomo:
image: ghcr.io/MetaCubeX/mihomo:latest
container_name: mihomo
restart: always
ports:
- "7890:7890" # 代理端口
- "9090:9090" # 控制端口(可选)
volumes:
- ./config.yaml:/config.yaml:ro
command: -f /config.yaml
启动并查看日志:
docker-compose up -d
docker-compose logs -f mihomo
若日志显示节点可用、端口监听成功,即表示代理容器部署完成。
- 联合部署示例(n8n + mihomo) 你也可以将两者写在同一个 Compose 文件中,保证一键拉起:
version: '3.8'
services:
mihomo:
image: ghcr.io/MetaCubeX/mihomo:latest
container_name: mihomo
restart: always
ports:
- "7890:7890"
volumes:
- ./config.yaml:/config.yaml:ro
command: -f /config.yaml
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: always
depends_on:
- mihomo
ports:
- "5678:5678"
environment:
- N8N_HOST=<你的服务器域名或IP>
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://<你的服务器域名或IP>:5678/
- GENERIC_TIMEZONE=Asia/Shanghai
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=<用户名>
- N8N_BASIC_AUTH_PASSWORD=<强密码>
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_SAVE_SUCCESS=none
- N8N_USE_PROXY=true
- HTTP_PROXY=http://172.17.0.1:7890
- HTTPS_PROXY=http://172.17.0.1:7890
- NO_PROXY=localhost,127.0.0.1,<你的服务器IP>,mirror.ccs.tencentyun.com
volumes:
- ~/.n8n:/home/node/.n8n
在该目录执行:
docker-compose up -d
随后按照前文“代理验证与原理”进行连通性测试。
生产环境建议
- 反向代理与 HTTPS:使用 Nginx/Traefik 等将外部域名指向 n8n,并在配置中将
N8N_PROTOCOL设置为https,WEBHOOK_URL也改为https://<域名>/ - 数据库:生产建议改用 PostgreSQL 以获得更好的性能与可靠性(此文先用默认 SQLite)
- 凭据加密:为安全起见,建议配置
N8N_ENCRYPTION_KEY(请自行生成并妥善保管)
常见问题与排查
- 服务无法启动
- 检查端口
5678是否被占用,或修改ports映射 - 查看日志定位错误:
docker-compose logs -f n8n - 确认 Docker 与 Compose 正常:
docker --version && docker-compose version
- 检查端口
- 忘记登录密码
- 修改
docker-compose.yml中的N8N_BASIC_AUTH_PASSWORD,然后docker-compose up -d使其生效
- 修改
- 代理不生效
- 宿主机先用
curl -I -x http://127.0.0.1:7890 https://example.com验证 - 容器内再验证;如失败,检查
HTTP_PROXY/HTTPS_PROXY/NO_PROXY/N8N_USE_PROXY
- 宿主机先用
- 端口映射冲突
- 修改外部端口,例如:
"8080:5678",访问http://<host>:8080
- 修改外部端口,例如:
更新与备份
- 更新到最新 n8n
docker-compose pull
docker-compose up -d
- 数据持久化与备份
- 数据目录
~/.n8n已通过卷挂载持久化,建议定期备份
- 数据目录
腾讯云 / Mihomo 订阅要点
- 订阅转换:Mihomo 需要 Clash 格式,使用如下命令转换(替换你的订阅链接)
curl -L -o config.yaml "https://api.v1.mk/sub?target=clash&url=<你的原始订阅链接>"
ls -lh config.yaml # 确认文件尺寸非 0(通常几 KB 或几十 KB)
- 重新拉起与清理缓存
docker-compose down
docker-compose up -d
- 再次验证代理
curl -I -x http://127.0.0.1:7890 https://example.com
修订记录
- 版本号:v1.2
- 修改时间:2025-12-20
- 修改要求:保留 readme.md 为导航与总览文档,指向分章内容
- 修改内容:新增“目录导航”与“阅读顺序建议”,链接至 8 个分章