Skip to content

访问受限

正在验证访问权限

自部署企业版 + Task Runners

本文为自托管 n8nTask Runners(Python)的示例流程:Docker、自定义 Runner 镜像、n8n-task-runners.jsondocker-compose.yml。文中版本号、镜像名仅作示例,请按你实际环境替换。

WARNING

n8n 企业版为商业授权。部署前请确认所用镜像、环境变量与授权方式符合 n8n 许可条款 及镜像提供方说明;生产环境应使用合法授权,勿依赖未经验证的「绕过」配置。

企业版相关能力(以官方说明为准)

以下为官方文档中常与企业版/高级能力一起提及的能力方向,具体以当前版本文档为准:

能力说明
Custom Variables自定义变量
Environments多环境(开发 / 预发 / 生产等)
External Secrets外部密钥存储(如 HashiCorp Vault)
Projects项目与 RBAC
SSOSAML、LDAP 等单点登录
Sharing工作流与凭证共享(社区版访问范围更窄)
Git 版本控制与工作流结合的 Git 集成类能力

1. 前置要求:安装 Docker

若已安装 Docker 可跳过。

bash
curl -fsSL https://get.docker.com | sh

2. 项目目录

bash
mkdir -p /opt/n8n
cd /opt/n8n

3. 编写 Dockerfile

/opt/n8n 下新建 Dockerfile(示例基于 n8nio/runners 某版本,请与 n8n 主版本对齐):

dockerfile
# 版本号建议与 n8n 主体一致,示例为 2.9.2
FROM n8nio/runners:2.9.2
USER root

# 使用 uv 在 venv 中安装 Python 依赖,示例:bilibili-api-python
RUN cd /opt/runners/task-runner-python && uv pip install --python .venv/bin/python bilibili-api-python

TIP

若需多个库,可在同一条 uv pip install 中空格分隔追加,例如:bilibili-api-python DrissionPage pillow

4. 构建自定义 Runner 镜像

bash
docker build --no-cache -t n8nio/runners:custom .

构建约 2~5 分钟;出现 naming to docker.io/n8nio/runners:custom 即表示完成。

5. 配置 Runners

5.1 导出默认配置

bash
docker run --rm --entrypoint cat n8nio/runners:custom /etc/n8n-task-runners.json > /opt/n8n/n8n-task-runners.json

5.2 编辑 n8n-task-runners.json

在文件末尾环境变量区按需修改,例如:

json
"N8N_RUNNERS_STDLIB_ALLOW": "*",
"N8N_RUNNERS_EXTERNAL_ALLOW": "bilibili-api-python DrissionPage pillow"
参数说明
N8N_RUNNERS_STDLIB_ALLOW示例为 * 表示允许标准库范围由 Runner 策略解析;生产建议收紧
N8N_RUNNERS_EXTERNAL_ALLOW与 Dockerfile 中安装的第三方包一致;生产建议显式列出,慎用 *

6. Docker Compose

/opt/n8n 创建 docker-compose.yml。下表示例使用社区中常见的中文构建镜像标签,请按你信任的源与版本替换

yaml
services:
  postgres:
    image: postgres:16
    container_name: n8n-postgres
    environment:
      - POSTGRES_USER=root
      # 请改为强密码
      - POSTGRES_PASSWORD=your_password
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped
    networks:
      - infra_shared

  n8n:
    image: ghcr.io/deluxebear/n8n:2.9.2-chs
    container_name: n8n-main
    ports:
      - "5678:5678"
    volumes:
      - n8n_data:/home/node/.n8n
    environment:
      - N8N_DEFAULT_LOCALE=zh-CN
      - N8N_ENTERPRISE_MOCK=true
      - NODE_ENV=development
      - N8N_SECURE_COOKIE=false
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=n8n-postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=root
      - DB_POSTGRESDB_PASSWORD=your_password
      - N8N_RUNNERS_ENABLED=true
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
      # 与 task-runners 中一致,可用 openssl rand -hex 32 生成
      - N8N_RUNNERS_AUTH_TOKEN=your_token
      - N8N_NATIVE_PYTHON_RUNNER=true
      - TZ=Asia/Shanghai
      - GENERIC_TIMEZONE=Asia/Shanghai
    depends_on:
      - postgres
      - task-runners
    restart: unless-stopped
    networks:
      - infra_shared

  task-runners:
    image: n8nio/runners:custom
    container_name: n8n-runners
    environment:
      - N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679
      - N8N_RUNNERS_AUTH_TOKEN=your_token
    volumes:
      - /opt/n8n/n8n-task-runners.json:/etc/n8n-task-runners.json
    depends_on:
      - postgres
    restart: unless-stopped
    networks:
      - infra_shared

volumes:
  postgres_data:
  n8n_data:

networks:
  infra_shared:
    external: true

WARNING

N8N_ENTERPRISE_MOCKNODE_ENV=developmentN8N_SECURE_COOKIE=false 等仅适合验证/内网;公网生产请改为 HTTPS、安全 Cookie 与正式数据库口令,并关闭不必要的调试项。

7. 启动

bash
cd /opt/n8n
docker compose up -d

8. 访问

浏览器打开:http://<服务器公网 IP>:5678(若前面已配置反向代理与 HTTPS,则使用你的域名)。