「n8n 2.x + Task Runners + 原生 Python」自托管完整部署示例

下面给你一套可直接照抄、可跑通的「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 → 完全独立服务

相关推荐
nvd111 天前
如何使用 curl 命令行测试 FastMCP (SSE 模式)
python
深紫色的三北六号1 天前
基于 ContextCapture SDK 的 Python 自动化三维建模
python·点云·三维建模·contextcapture·las
郑泰科技1 天前
python虚拟环境:如何使用Literal类型来限制函数参数的取值范围?
开发语言·python
weixin_440730501 天前
java异常Exception
java·开发语言
余生H1 天前
2026编程语言趋势分析-Javascript将统治客户端开发-分析其在开发效率、AI 兼容性与跨平台性能上的优势和不可替代性
开发语言·javascript·人工智能·客户端开发
w-w0w-w1 天前
友元函数,友元类,内部类
开发语言·c++
Kratzdisteln1 天前
【Python】配置LLM API Key
java·服务器·python
默默前行的虫虫1 天前
Python轻松实现某德地图可视化
python
剑之所向1 天前
C# Modbus 从机探测:核心报文 + 极简实现
开发语言·c#