关于n8n的一些部署和迁移的小知识
评论
收藏

关于n8n的一些部署和迁移的小知识

经验分享
violet’伊芙加登
2026-01-08 15:49·浏览量:721
violet’伊芙加登
影刀中级开发者
发布于 2026-01-08 15:49721浏览

那么这期简单用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



收藏2
全部评论1
最新
发布评论
评论