n8n 自部署环境搭建(docker)
关注AI 相关内容的朋友,一定对Dify和n8n不陌生。它们都是优秀的开源 “AI 应用构建平台”。
之前在 自部署Dify 那篇文章里,介绍了使用docker工具快速搭建Dify平台的全过程。
今天赶紧把另一道菜:< n8n 自部署环境搭建> 端出来。 后续可以导入其他人制作好的工作流,进一步学习&使用。
话不多说,先看效果
登录后界面:
工作流界面:
双击某个节点,其中 INPUT 和 OUTPUT信息 是突出显示的:
与Dify不同的是,n8n中没有知识库的组件。可以认为 当前它更强调的是 “生产环境”下工作流全流程搭建与使用上。
个人自部署方式
个人部署n8n用到的docker 镜像不多,这里有两种自部署方式,供大家参考:
-
在“1panle” 和“宝塔”的应用市场里就提供了App,直接图形化点击、安装——
-
使用一个 docker-compose.yml 文件搞定所有 镜像和环境变量,额外还需要一个脚本完成数据库的初始化配置。
使用第二种方式
和dify 一样我们还是在 群晖的docker 工具 内完成部署 。
配置文件参考:
https://github.com/n8n-io/n8n-hosting/blob/main/docker-compose/withPostgres/docker-compose.yml
docker-compose 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
version: '3.8'
services:
postgres:
image: postgres:16
restart: always
environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=qbcvLY7zJzdHk4Fk
- POSTGRES_DB=n8n
- POSTGRES_NON_ROOT_USER=n8n
- POSTGRES_NON_ROOT_PASSWORD=Szk3hpR3fqBJAYWv
volumes:
- ./n8n-data/db:/var/lib/postgresql/data
- ./n8n-data/init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U admin -d n8n']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: n8nio/n8n:1.108.2
restart: always
environment:
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=admin
- DB_POSTGRESDB_PASSWORD=qbcvLY7zJzdHk4Fk
- N8N_HOST=n8n.host
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true
- N8N_ENCRYPTION_KEY=y4jfzyUix57aRZeV
- N8N_PROTOCOL=https
#- N8N_SECURE_COOKIE=false
- NODE_ENV=production
volumes:
- ./n8n-data/app:/home/node/.n8n
ports:
- 5678:5678
depends_on:
postgres:
condition: service_healthy
|
0. 准备工作
照例,还是先检查下群晖中 的docker管理组件工作正常。
以及镜像仓库可以正常访问。
此外,还需要多准备一个脚本:init-data.sh 内容如下——
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/bin/bash
set -e;
if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
GRANT CREATE ON SCHEMA public TO ${POSTGRES_NON_ROOT_USER};
EOSQL
else
echo "SETUP INFO: No Environment variables given!"
fi
|
1. 导入yaml 配置文件
新增一个n8n_pj 的项目,路径放置在docker应用数据目录下(我这里是 /docker/n8n ),粘贴上面配置文件后点击 “下一步”。
此时还没有创建持久化数据的目录,不要勾选 “立即启动”。
最后,点击“完成”。
2. 添加持久化存储路径和数据库脚本
数据库,配置,插件等数据都持久化 的数据,所以在doker-compose 配置文件中已经指定了数据存放路径( /docker/n8n/n8n-data )。
需要在 /docker/n8n/n8n-data 下,手动创建两个空文件夹“app” 和 “db”,并上传之前的数据库初始化脚本文件“init-data.sh”——
3. 修改app 目录所属用户和用户组
因为 n8n docker 镜像访问数据目录权限问题,需要把 /docker/n8n/n8n-data/app 文件夹的用户属性改为 1000:1000。
具体操作为:
1)先ssh 登录到 群晖NAS 上
2)执行命令:"sudo chown 1000:1000 /volume1/docker/n8n/n8n-data/app"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
admin@NAS:~$
admin@NAS:~$ cd /volume1/docker/n8n/n8n-data/
admin@NAS:/volume1/docker/n8n/n8n-data$ ls -l
total 4
drwxrwxrwx+ 1 admin users 0 Sep 5 18:46 app
drwxrwxrwx+ 1 admin users 0 Sep 5 18:46 db
-rwxrwxrwx+ 1 admin users 494 Aug 19 10:43 init-data.sh
admin@NAS:/volume1/docker/n8n/n8n-data$
admin@NAS:/volume1/docker/n8n/n8n-data$ sudo chown 1000:1000 app
Password:
admin@NAS:/volume1/docker/n8n/n8n-data$ ls -l
total 4
drwxrwxrwx+ 1 1000 1000 0 Sep 5 18:46 app
drwxrwxrwx+ 1 admin users 0 Sep 5 18:46 db
-rwxrwxrwx+ 1 admin users 494 Aug 19 10:43 init-data.sh
admin@NAS:/volume1/docker/n8n/n8n-data$
|
4. 拉取镜像,启动项目
因为n8n 默认参数“N8N_SECURE_COOKIE=true” ,要求使用https协议,这里直接使用群晖自带的web station 实现https 访问代理——
没有使用群晖的小伙伴也不用担心,文末会提供关闭“N8N_SECURE_COOKIE”功能后的docker-compose 配置文件。
注意: 关闭后,因为cookie 不受加密通信的保护,存在安全风险。
上面步骤点击“保存”后。回到docker 管理界面,点击“操作” -> “构建”。拉取对应docker 镜像,生成相关docker 实例。
等待拉取镜像,n8n 的组件会逐个启动。

启动成功——
5. 追加 Hosts/DNS 解析
项目已经成功运行了,配置中指定了N8N_HOST=n8n.host ,这里需要把域名关联到NAS IP上。
两个地方应用这个域名,一个在之前创建的 web station 中——
还有一个 是在家里dns server上(一般是路由器)——
6. 登录web 界面完成初始化
以上都完成后,就可以登录n8n 进行最后的初始化工作啦。
浏览器中 访问 https://n8n.host ,跳出初始化界面——
激活免费功能,需要关联自己的邮箱——
另外,n8n 的中文文档支持很好,初步上手可以看下 官方的入门案例指南 。
企业自部署
参考
官方文档:
https://github.com/n8n-io/n8n/blob/master/packages/%40n8n/benchmark/scripts/n8n-setups/scaling-single-main/docker-compose.yml
总体上看,各个组件的模块和dify 差不多。
相同的是:
- 都是用了 redis 做缓存,postgres 做数据库
- 都是一个主节点带1-2 个worker
不同的是:
- 多了mockapi 用于API 验证—— “MockAPI顾名思义是一个模拟的API,它可以模拟真实API的请求并返回数据。MockAPI可用于前后端分离,在项目初期前端可使用MockAPI对系统进行开发,而不需要依赖后端开发好正式的API后才开始进行前端开发。"
- 多了一个 单节点性能测试组件——n8n-benchmark。用来评估 节点响应性能。
- 如一开始说的,n8n 没有知识库组件,所以也用不到向量数据库。
附:
关闭“N8N_SECURE_COOKIE” 后的docker-compose 配置文件,在本公众号(AI 热气球)中发送【906】获取。