

那么这期简单用n8n来做示例,讲一下关于n8n的简单部署,因为在我的使用情况下来看,n8n的自由度还是很高的,可以向下兼容dify
由于新换了服务器,老服务器的n8n在迁移的时候也是出现了各种问题,这里只能从头开始
太难了,查阅了官方文档看了两天最后解决了
文档写的真是一坨,外部python真是难搞
先说部署
我是centos7的环境docker部署
在任务管理这里有两个方式

如果你想要使用code节点并且导入第三方包,最好使用外部,因为内部使用code节点编写python很恶心
那么你需要一下三个文件
1:docker-compose.yml
2: Dockerfile.runner
3: n8n-task-runners.json(外部模式下的文件控制)
如果你不用的话只需要
docker-compose.yml 文件全部控制
这里我给出官方的一些示例:
1: n8n-task-runners.json:在github找到了,中文文档里面写的依托,缺少太多东西了,恶心死我了,注意在n8n的代码节点里是支持
js和python(原生),这里你最好在这个基础上改,因为我之前没看到自己在中文文档里的模板改,出了很多错
{
"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",
"HOME"
],
"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_SENTRY_DSN",
"N8N_VERSION",
"ENVIRONMENT",
"DEPLOYMENT_NAME"
],
"env-overrides": {
"PYTHONPATH": "/opt/runners/task-runner-python",
"N8N_RUNNERS_STDLIB_ALLOW": "",
"N8N_RUNNERS_EXTERNAL_ALLOW": ""
}
}
]
}接着
2:Dockerfile.runner
{
FROM n8nio/runners:latest #最好是最新版,这个外部环境支持1.13x版本以上
USER root
# 1. 确保目录存在 (这是修复 chdir 报错的关键)
# 官方镜像可能自带了这些目录,但如果用 mkdir -p 不会报错
RUN mkdir -p /opt/runners/task-runner-python /opt/runners/task-runner-javascript
# 2. 安装 Python 库
# 注意:文档里是 cd 到目录然后安装,这说明它可能利用目录下的 .venv
# 我们加上清华源
WORKDIR /opt/runners/task-runner-python
RUN uv pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas numpy requests beautifulsoup4
# 3. 复制配置文件 (文档要求 /etc/n8n-task-runners.json)
COPY n8n-task-runners.json /etc/n8n-task-runners.json
# 4. 修正权限 (必须给 runner 用户,不能给 node)
RUN chown -R runner:runner /opt/runners /etc/n8n-task-runners.json
# 5. 切回 runner 用户 (文档明确要求)
USER runner
}最后
docker-compose.yml
version: "3.8"
services:
n8n:
image: n8nio/n8n:latest#最新镜像
container_name: n8n_new_main#容器名称
restart: always
security_opt:
- seccomp:unconfined#centos7,需要加一下
environment:
- TZ=
- N8N_HOST=“”域名
- N8N_PORT=“”端口
- N8N_PROTOCOL=“”
- WEBHOOK_URL=“”
- N8N_ENCRYPTION_KEY=#迁移的时候注意这个,一定要和老服务器的对上
# External 模式配置
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=external #外部,内部是internal
- N8N_RUNNERS_AUTH_TOKEN=#和runner容器对上
- N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0#沟通接口和run的
# 其他配置
- N8N_PROXY_HOPS=1
- N8N_EXPRESS_TRUST_PROXY=true
- N8N_SECURE_COOKIE=false
- DB_TYPE=sqlite
- DB_SQLITE_POOL_SIZE=10
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
ports:
- "5"
volumes:
- /home/n8n_deploy/data:/home/node/.n8n#挂载数据位置
- /home/n8n_deploy/libs:/data/my_libs#挂载数据位置
depends_on:
- n8n_vector_db#我挂了postgre数据库
# --- Runner 节点 ---
n8n_runners:
build:
context: .
dockerfile: Dockerfile.runner
container_name: n8n_runners
restart: always
security_opt:
- seccomp:unconfined
environment:
- TZ=
- N8N_RUNNERS_AUTH_TOKEN=和上面的对上
# 连接地址
- N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679#官方的,在容器内的
volumes:
- /home/n8n_deploy/libs:/data/my_libs#挂载地址
depends_on:
- n8n
#postgre的数据库配置
n8n_vector_db:
image: pgvector/pgvector:pg16
container_name: n8n_vector_db
restart: always
environment:
- POSTGRES_DB=
- POSTGRES_USER=
- POSTGRES_PASSWORD=
ports:
- ""
volumes:
- /data/n8n_postgres:/var/lib/postgresql/data#挂载地址
这里的三个文件搞定了
假如不需要依赖这些,不做这么麻烦
就直接简单的构建docker-compose.yml(上面的简单修改就行)
启动命令:docker-compose up -d --build
记得给docker的内部配置加速镜像(这一点问ai 吧)就是一个命令进入配置文件,复制一下几个镜像源
部署就是这样了,如果你想用dockerfile和docker-compose配合,在dockerfile里最好使用npm命令拉取构建,这里我也试过,但是代码节点依旧不好用,应该是我当时外部json没有配置好,核心就是这三个文件写好就行
迁移
一定要找到两个东西:
1:老服务器的
N8N_ENCRYPTION_KEY=#迁移的时候注意这个,一定要和老服务器的对上,一般在config里,全局搜索就行
2:假如你用的sqlite
一定要把所有文件都拷贝过去,全都拷贝,不然真的很麻烦会加载不出来老服务器的工作流,卡这里卡了很久,内部直接改用户啥的
示例:

如果对n8n感兴趣可以尝试一下,除了这个dify,coze都是很好的选择,包括在阿里百炼云也有这一类的工作流
其实我是喜欢它的触发方式,可以自定义,但是相对于知识库检索没有dify好。
最后:主要部署方式
1:外部环境:docker-compose.yml,Dockerfile.runner, n8n-task-runners.json
2:简单方式:docker-compose.yml
3:docker-compose.yml和Dockerfile配合,使用npm拉取类似:(npm install -g n8n@0.126.1),最好直接不要使用:FROM:n8nio/n8n:latest
真的会有一些问题。
官方中文网址: https://docs.n8ncn.io/hosting/installation/docker/#_3