下面给你一套可直接照抄、可跑通的「n8n 2.x + Task Runners + 原生 Python」自托管完整部署示例 。
这是目前唯一官方认可的、真正"在 Code 节点里直接写 Python"的方式。
我会按 原理 → 部署 → 验证 → 常见坑 的顺序来,避免你踩雷。
一、先明确一件事(非常关键)
在 n8n 2.x 中:
Python Code Node ≠ 主 n8n 容器执行
Python Code Node = Task Runner 容器执行
也就是说:
-
n8n 主服务:不跑 Python
-
Python:只在 Task Runner 里跑
-
两者通过 内部 RPC 通信
二、整体架构(你部署后会是这样)
┌──────────────┐
│ n8n main │ (UI / Workflow / Orchestration)
│ │
│ Code Node │
└──────┬───────┘
│ Task execution
┌──────▼──────────────────┐
│ n8n Task Runner │
│ (Python / JS sandbox) │
│ │
│ ✔ Python 3.x │
│ ✔ 执行 Code Node(Python)│
└──────────────────────────┘
三、完整 Docker Compose(可直接用)
1️⃣ 目录结构建议
n8n/
├─ docker-compose.yml
├─ .env
2️⃣ .env 文件
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin123
N8N_ENCRYPTION_KEY=change_this_to_random_string
DB_TYPE=sqlite
(你可以后面再换 Postgres)
3️⃣ docker-compose.yml(重点)
version: "3.9"
services:
n8n:
image: n8nio/n8n:2
container_name: n8n
restart: always
ports:
- "5678:5678"
env_file:
- .env
environment:
# 开启 task runners
- N8N_RUNNERS_ENABLED=true
# 使用 external 模式(必须)
- N8N_RUNNERS_MODE=external
# runner 通信
- N8N_RUNNERS_AUTH_TOKEN=super-secret-token
- N8N_RUNNERS_TIMEOUT=300
# 基本设置
- GENERIC_TIMEZONE=Asia/Shanghai
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- n8n-runner
n8n-runner:
image: n8nio/runners:latest
container_name: n8n-runner
restart: always
environment:
- N8N_RUNNERS_AUTH_TOKEN=super-secret-token
- N8N_RUNNERS_GRACEFUL_SHUTDOWN_TIMEOUT=30
volumes:
- runner_data:/data
volumes:
n8n_data:
runner_data:
⚠️ token 必须一致,否则 Code Node 无法执行
4️⃣ 启动
docker compose up -d
浏览器访问:
http://localhost:5678
四、在 Code Node 中使用 Python(验证)
1️⃣ 新建 Workflow → 添加 Code 节点
2️⃣ Language 选择:
👉 Python (Native)
(如果你看不到 Python,说明 Runner 没连上)
3️⃣ 示例 Python 代码(100% 可跑)
items = []
for item in _items:
value = item["json"].get("value", 0)
items.append({
"json": {
"original": value,
"result": value * 2
}
})
return items
4️⃣ 输入示例(Set Node)
{
"value": 10
}
5️⃣ 输出结果
{
"original": 10,
"result": 20
}
✔️ 这是原生 Python,不是 Pyodide,不是 CLI
五、Python Code Node 的重要规则(必须知道)
1️⃣ 可用变量
| 名称 | 含义 |
|---|---|
_items |
输入 items |
item["json"] |
JSON 数据 |
return items |
输出 |
❌ 不支持 $json.xxx
❌ 不支持 JS 写法
2️⃣ Python 标准库
-
支持大多数 标准库
-
❌ 默认 不带第三方库(pandas / numpy)
六、如何支持第三方 Python 库(进阶)
方式:自定义 Runner 镜像(官方推荐)
1️⃣ Dockerfile
FROM n8nio/runners:latest
RUN pip install pandas numpy
2️⃣ 构建
docker build -t n8n-runner-python:latest .
3️⃣ compose 中替换
n8n-runner:
image: n8n-runner-python:latest
七、常见问题(90% 卡在这里)
❌ 看不到 Python 选项
-
Runner 没启动
-
Token 不一致
-
N8N_RUNNERS_MODE不是external
❌ 报 No runner available
-
runner 容器未连上
-
防火墙 / 网络问题
❌ pandas / numpy import error
-
runner 镜像没装库
-
不支持运行时 pip install
八、你现在到底"能做到什么程度"
你现在已经可以:
-
✅ 在 Code Node 直接写 Python
-
✅ 不用 HTTP
-
✅ 不用 Execute Command
-
✅ 不污染 n8n 主容器
-
✅ 官方支持、可升级
但仍要注意:
-
❌ 不适合长时间任务
-
❌ 不适合重 ML / GPU
-
❌ Runner 是"受控执行环境"
九、给你的真实建议(结合你的使用深度)
-
轻数据处理 / Schema / 逻辑判断 → Python Code Node ✅
-
pandas / AI / 批处理 → Python Service + HTTP
-
大规模 AI / 向量 / GPU → 完全独立服务