自部署企业版 + Task Runners
本文为自托管 n8n 与 Task Runners(Python)的示例流程:Docker、自定义 Runner 镜像、n8n-task-runners.json 与 docker-compose.yml。文中版本号、镜像名仅作示例,请按你实际环境替换。
WARNING
n8n 企业版为商业授权。部署前请确认所用镜像、环境变量与授权方式符合 n8n 许可条款 及镜像提供方说明;生产环境应使用合法授权,勿依赖未经验证的「绕过」配置。
企业版相关能力(以官方说明为准)
以下为官方文档中常与企业版/高级能力一起提及的能力方向,具体以当前版本文档为准:
| 能力 | 说明 |
|---|---|
| Custom Variables | 自定义变量 |
| Environments | 多环境(开发 / 预发 / 生产等) |
| External Secrets | 外部密钥存储(如 HashiCorp Vault) |
| Projects | 项目与 RBAC |
| SSO | SAML、LDAP 等单点登录 |
| Sharing | 工作流与凭证共享(社区版访问范围更窄) |
| Git 版本控制 | 与工作流结合的 Git 集成类能力 |
1. 前置要求:安装 Docker
若已安装 Docker 可跳过。
bash
curl -fsSL https://get.docker.com | sh2. 项目目录
bash
mkdir -p /opt/n8n
cd /opt/n8n3. 编写 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-pythonTIP
若需多个库,可在同一条 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.json5.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: trueWARNING
N8N_ENTERPRISE_MOCK、NODE_ENV=development、N8N_SECURE_COOKIE=false 等仅适合验证/内网;公网生产请改为 HTTPS、安全 Cookie 与正式数据库口令,并关闭不必要的调试项。
7. 启动
bash
cd /opt/n8n
docker compose up -d8. 访问
浏览器打开:http://<服务器公网 IP>:5678(若前面已配置反向代理与 HTTPS,则使用你的域名)。
