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文件内容是否正确。
参考链接: