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.镜像拉取

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

2.创建docker-compose.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文件

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文件

{"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.启动运行

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文件内容是否正确。

参考链接:

  • https://jishuzhan.net/article/2007720869788434434
  • https://community.n8n.io/t/libraries-desallowed-in-n8n-code-node-n8n-cloud/203666/12

Read more

Flutter 组件 flutter_sheet_localization 的适配 鸿蒙Harmony 实战 - 驾驭云端词典自动化、实现鸿蒙端国际化词条无感更新与多语言 Key 生成方案

Flutter 组件 flutter_sheet_localization 的适配 鸿蒙Harmony 实战 - 驾驭云端词典自动化、实现鸿蒙端国际化词条无感更新与多语言 Key 生成方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 flutter_sheet_localization 的适配 鸿蒙Harmony 实战 - 驾驭云端词典自动化、实现鸿蒙端国际化词条无感更新与多语言 Key 生成方案 前言 在鸿蒙(OpenHarmony)生态的全球化应用开发中,面对上百个涉及金融支付、法律协议以及动态营销文案的多语言(i18n)词条映射。如果仅仅依靠传统的本地 intl 方案 手动修改 .arb 或 .json 文件。那么不仅会导致开发与翻译团队之间的“沟通断层”。更会因为频繁的手动拷贝错误引发严重的生产事故。 我们需要一种“云端协同、本地免维护”的翻译生产艺术。 flutter_sheet_localization 是一套专注于将 Google Sheets(或是兼容的 CSV 系统)

By Ne0inhk
Docker运行hello-world镜像失败或超时:Unable to find image ‘hello-world:latest‘ locally Trying to pull reposi

Docker运行hello-world镜像失败或超时:Unable to find image ‘hello-world:latest‘ locally Trying to pull reposi

Docker运行hello-world镜像失败或超时,报错:Unable to find image ‘hello-world:latest’ locally Trying to pull repository docker.io/library/hello-world … /usr/bin/docker-current: missing signature key. See ‘/usr/bin/docker-current run --help’. 如下图: 在安装 Docker 并尝试运行 hello-world 时,遇到连接超时的问题,这通常是因为默认的 Docker 镜像源访问速度较慢或不稳定所导致的。为了加速 Docker 镜像的下载和提升稳定性,解决这个问题的一种有效方法就是更换镜像源。 可以参考官方文档(阿里云)解决步骤: https://cr.console.aliyun.

By Ne0inhk

OpenClaw之Memory配置成本地模式,Ubuntu+CUDA+cuDNN+llama.cpp

文章目录 * 背景:Memory不生效的问题 * OpenClaw的Memory配置 * Ubuntu24.04安装CUDA和cuDNN * 编译llama.cpp * 验证方案1: * 验证方案2:下载并运行Llama-2 7B模型 * 安装node-llama-cpp * 验证Memory * sqlite-vec unavailable * 踩过的坑 * 安装node-llama-cpp的一些提示 * 安装node-llama-cpp的前置条件 * Using `node-llama-cpp` With Vulkan 承接上文:Windows11基于WSL2首次运行Openclaw,并对接飞书应用,我已经在电脑上安装了OpenClaw,接下来解决Memory问题。走了很多弯路,下面主要讲我总结的正确的安装过程。 总结来说:针对Memory不生效的问题,又不想用OpenAI或Gemini,或者只想单纯的节省token,可以按照如下的方式,设置为local模式: * 修改openclaw.json配置 * 安装CUDA和cu

By Ne0inhk
连接管理模块和服务器模块

连接管理模块和服务器模块

1. 封装连接管理类 向用户提供一个用于实现网络通信的 Connection 对象,从其内部可创建出粒度更轻的Channel 对象,用于与客户端进行网络通信。 1. 成员信息: * 连接关联的信道管理句柄(实现信道的增删查) * 连接关联的实际用于通信的 muduo::net::Connection 连接 * protobuf 协议处理的句柄(ProtobufCodec 对象) * 消费者管理句柄 * 虚拟机句柄 * 异步工作线程池句柄 2. 连接操作: * 提供创建 Channel 信道的操作 * 提供删除 Channel 信道的操作 3. 连接管理: * 连接的增删查 为什么需要这些成员和操作? 1. 信道管理句柄:因为AMQP协议允许在一个连接上创建多个信道,每个信道可以独立进行操作(如声明队列、发布消息等)。所以连接管理模块需要能够管理这些信道,包括创建、删除和查找。 2. muduo::net::Connection:这是实际进行网络通信的对象,

By Ne0inhk