n8n部署安装(docker)、支持Code in Python (Native)节点

n8n部署安装(docker)、支持Code in Python (Native)节点

前提条件:

docker、docker compose已部署安装,可参考docker和docker compose部署安装

文件目录结构:

复制代码
n8n/
├─ docker-compose.yaml
├─ .env
├─ n8n-task-runners.json

一、部署安装

1.镜像拉取

sh 复制代码
docker pull docker.n8n.io/n8nio/n8n #如果下载不下来,可用国内镜像,但是这个镜像名字要和国内镜像网址上的名字一致,比如国内轩辕镜像用的是 docker pull n8nio/n8n 

2.创建docker-compose.yaml配置文件

yaml 复制代码
version: '3'

services:
  n8n:
    image: n8nio/n8n
    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
      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
      - N8N_NATIVE_PYTHON_RUNNER=true

      # 基本设置
      - GENERIC_TIMEZONE=Asia/Shanghai
      - N8N_SECURE_COOKIE=false
    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
      - N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679
      - N8N_RUNNERS_STDLIB_ALLOW=*
    volumes:
      - runner_data:/data
      - ./n8n-task-runners.json:/etc/n8n-task-runners.json

volumes:
  n8n_data:
  runner_data:

3.创建.env文件

sh 复制代码
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=admin123

# change_this_to_random_string需要进行替换,生成方式:在宿主机执行openssl rand -hex 16即可得到
N8N_ENCRYPTION_KEY=change_this_to_random_string

4.创建n8n-task-runners.json文件

json 复制代码
{
        "task-runners": [
                {
                        "runner-type": "javascript",
                        "workdir": "/home/runner",
                        "command": "/usr/local/bin/node",
                        "args": [
                                "--disallow-code-generation-from-strings",
                                "--disable-proto=delete",
                                "/opt/runners/task-runner-javascript/dist/start.js"
                        ],
                        "health-check-server-port": "5681",
                        "allowed-env": [
                                "PATH",
                                "GENERIC_TIMEZONE",
                                "NODE_OPTIONS",
                                "N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT",
                                "N8N_RUNNERS_TASK_TIMEOUT",
                                "N8N_RUNNERS_MAX_CONCURRENCY",
                                "N8N_SENTRY_DSN",
                                "N8N_VERSION",
                                "ENVIRONMENT",
                                "DEPLOYMENT_NAME"
                        ],
                        "env-overrides": {
                                "NODE_FUNCTION_ALLOW_BUILTIN": "crypto",
                                "NODE_FUNCTION_ALLOW_EXTERNAL": "moment",
                                "N8N_RUNNERS_HEALTH_CHECK_SERVER_HOST": "0.0.0.0"
                        }
                },
                {
                        "runner-type": "python",
                        "workdir": "/home/runner",
                        "command": "/opt/runners/task-runner-python/.venv/bin/python",
                        "args": [
                                "-m",
                                "src.main"
                        ],
                        "health-check-server-port": "5682",
                        "allowed-env": [
                                "PATH",
                                "N8N_RUNNERS_LAUNCHER_LOG_LEVEL",
                                "N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT",
                                "N8N_RUNNERS_TASK_TIMEOUT",
                                "N8N_RUNNERS_MAX_CONCURRENCY",
                                "N8N_RUNNERS_STDLIB_ALLOW",
                                "N8N_SENTRY_DSN",
                                "N8N_VERSION",
                                "ENVIRONMENT",
                                "DEPLOYMENT_NAME"
                        ],
                        "env-overrides": {
                                "PYTHONPATH": "/opt/runners/task-runner-python",
                                "N8N_RUNNERS_EXTERNAL_ALLOW": ""
                        }
                }
        ]
}

5.启动运行

sh 复制代码
docker compose up -d

浏览器访问:http://ip:5678

二、FAQ

1.Error: Mismatching encryption keys. The encryption key in the settings file /home/node/.n8n/config does not match the N8N_ENCRYPTION_KEY env var. Please make sure both keys match

原因:新配置的 N8N_ENCRYPTION_KEY 和 n8n 已存储在配置文件中的旧密钥不匹配,导致 n8n 启动失败。这是因为你之前未配置密钥时,n8n 自动生成了临时密钥并保存在 /home/node/.n8n/config 文件中,现在新密钥和旧密钥冲突了。

步骤 1:找到旧加密密钥

进入 n8n 数据卷目录,查看配置文件中的旧密钥:

复制代码
# 1. 找到 n8n 数据卷的实际挂载路径
docker volume inspect n8n_n8n_data | grep Mountpoint
# 输出示例:"Mountpoint": "/var/lib/docker/volumes/n8n_n8n_data/_data"

# 2. 进入该目录,查看 config 文件(替换为你查到的 Mountpoint 路径)
cd /var/lib/docker/volumes/n8n_n8n_data/_data
cat config

config 文件中找到 encryptionKey 字段,示例:

复制代码
{
  "encryptionKey": "abc123def456ghi789jkl000mnop111qrs",
  "instanceId": "xxx"
}

复制 encryptionKey 后的字符串(这就是旧密钥)。

步骤 2:将旧密钥配置为 N8N_ENCRYPTION_KEY

修改.env文件的此处配置,重启即可。

2.Problem in node 'Code in Python (Native)' Security violations detected

这个报错 "Security violations detected" 的原因是:n8n 的 Python Code 节点默认禁用了外部模块的导入,属于安全限制。

解决方法:

检查docker-compose.yaml文件是否有N8N_RUNNERS_STDLIB_ALLOW=*./n8n-task-runners.json:/etc/n8n-task-runners.json配置

n8n-task-runners.json文件内容是否正确。

参考链接:

相关推荐
有风听风有雨看雨20 小时前
【Critical】docker unauthorized 2375
docker·容器·eureka
喵手21 小时前
Python爬虫零基础入门【第九章:实战项目教学·第15节】搜索页采集:关键词队列 + 结果去重 + 反爬友好策略!
爬虫·python·爬虫实战·python爬虫工程化实战·零基础python爬虫教学·搜索页采集·关键词队列
Suchadar21 小时前
if判断语句——Python
开发语言·python
ʚB҉L҉A҉C҉K҉.҉基҉德҉^҉大21 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
喵手21 小时前
Python爬虫零基础入门【第九章:实战项目教学·第14节】表格型页面采集:多列、多行、跨页(通用表格解析)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·表格型页面采集·通用表格解析
0思必得01 天前
[Web自动化] 爬虫之API请求
前端·爬虫·python·selenium·自动化
莫问前路漫漫1 天前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程
木头左1 天前
Backtrader框架下的指数期权备兑策略资金管理实现与风险控制
python
玄同7651 天前
LangChain 核心组件全解析:构建大模型应用的 “乐高积木”
人工智能·python·语言模型·langchain·llm·nlp·知识图谱
喵手1 天前
Python爬虫实战:从零构建 Hacker News 数据采集系统:API vs 爬虫的技术抉择!(附CSV导出 + SQLite 存储)!
爬虫·python·爬虫实战·hacker news·python爬虫工程化实战·零基础python爬虫教学·csv导出