跳到正文
SL Blog 技术探索 · 工程实践 · AI 时代思考
返回
⚙️ n8n Docker 部署 · 1 / 9 查看系列简介 →

n8n Docker 部署与出站代理指南:系列导读

文章目录
  1. 目录导航
  2. 阅读顺序建议
  3. 前提条件
  4. 快速部署(一步到位)
  5. 代理验证与原理
  6. 部署 Mihomo 代理容器
  7. 生产环境建议
  8. 常见问题与排查
  9. 更新与备份
  10. 腾讯云 / Mihomo 订阅要点
  11. 修订记录

本指南整理并统一了在 Ubuntu 服务器上使用 Docker Compose 部署 n8n 的完整流程,包含出站 HTTP/HTTPS 代理的正确配置方法(如 Mihomo/Clash,默认端口 7890),以及常见问题的排查与更新维护建议。按照本文一步一步执行即可完成部署。

目录导航

阅读顺序建议

  • 首次部署:先读“快速开始”,再读“代理配置与原理”
  • 需要本机代理:参考“Mihomo 代理容器部署”或“联合部署示例”
  • 上线前:务必阅读“生产环境建议”与“安全与合规”
  • 维护:参考“更新与备份”和“常见问题与排查”

前提条件

  • 已安装并可用的 docker 与 docker compose(或 docker-compose)
  • 一台可访问的服务器 IP 或域名,放行外部访问端口(默认 5678)
  • 如需开启登录保护:准备一组用户名与强密码
  • 如需代理:服务器本机或容器中已有代理服务(常用端口 7890)

快速部署(一步到位)

  1. 创建目录并进入
mkdir -p ~/n8n && cd ~/n8n
  1. 创建 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/凭据等)
  1. 启动服务
docker-compose up -d
  1. 访问与登录
  • 浏览器打开:http://<你的服务器域名或IP>:5678
  • 如启用 Basic Auth:使用上述用户名与密码登录

代理验证与原理

若你在宿主机运行了 Mihomo/Clash 监听 7890 端口,可按如下方式验证:

  1. 宿主机验证代理连通性
curl -I -x http://127.0.0.1:7890 https://example.com

出现 HTTP/1.1 200 OK 表示宿主机代理通。

  1. 容器内验证(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 代理服务。

  1. 准备订阅并生成 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
  1. 使用 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

若日志显示节点可用、端口监听成功,即表示代理容器部署完成。

  1. 联合部署示例(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 个分章

RAG 智能问答

针对本文继续提问:《n8n Docker 部署与出站代理指南:系列导读》