Docker快速部署n8n
使用Docker快速部署n8n,适合喜欢容器化部署的用户
Docker快速部署n8n
为什么使用Docker?
- 环境隔离,避免冲突
- 快速部署,易于迁移
- 便于管理,易于扩展
部署步骤
n8n 官方文档 https://docs.n8n.io/hosting/installation/docker/
n8n 版本:2.6.1
使用Docker Compose(推荐)
8n 官方提供了 Docker 直接启动的案例,也提供了编排工具 docker compose 和 k8s 的部署脚本。
本文采用 docker compose 的方式进行快速部署。
n8n 部署脚本地址 → https://github.com/n8n-io/n8n-hosting
本文直接参考 withPostgres的方式进行部署。
即部署 n8n ,并将运行数据存储到 postgres 中。
step1、克隆代码仓库到本地
git clone https://github.com/n8n-io/n8n-hosting.git
step2、查看部署脚本
version: '3.8'
volumes:
db_storage:
n8n_storage:
services:
postgres:
image: postgres:16
restart: always
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
volumes:
- db_storage:/var/lib/postgresql/data
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
ports:
- 5678:5678
links:
- postgres
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
部署脚本启动了两个服务:postgres 16 服务和 n8n 服务。
启动脚本前,先手动拉取镜像,也可以直接启动时自动拉取脚本,本文先拉取镜像,然后再启动服务。
## 拉取 n8n 最后一个版本镜像
docker pull n8nio/n8n:latest
## 拉取 postgres 16 版本的镜像
docker pull postgres:16
亦或者可以直接使用 docker compose pull 拉取镜像。
step3、部署脚本修改(可选)
修改后的部署脚本如下:
version: '3.8'
services:
postgres:
image: postgres:16
restart: always
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
volumes:
- ./data/postgres:/var/lib/postgresql/data
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: n8nio/n8n:1.107.4
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
ports:
- 5678:5678
links:
- postgres
volumes:
- ./data/n8n:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
主要是修改了
1.数据存存储位置,显式决定 postgres 和 n8n 运行数据存储位置,分别是
- postgres 存储在 ./data/postgres
- n8n 存储在 ./data/n8n
./data/n8n 需要执行 chmod 777 data/n8n 命令赋予权限,否则会出现 Error: Command "start" not found 报错
2.修改了镜像名称
step4、修改 .env 设置postgres 账号密码
.env 中用来存放postgres 的账号密码。
文件内容如下:
POSTGRES_USER=changeUser
POSTGRES_PASSWORD=changePassword
POSTGRES_DB=n8n
POSTGRES_NON_ROOT_USER=changeUser
POSTGRES_NON_ROOT_PASSWORD=changePassword
# n8n 加密密钥(必需!32字符)
N8N_ENCRYPTION_KEY=1111111111111111111111111111111
step5、docker compose 启动服务
当前所在目录及文件结构
# pwd
/opt/docker/n8n-hosting/docker-compose/withPostgres
# ls -l
data ## 用来存放 n8n 和 postgres 的数据
docker-compose.yml ## 部署脚本
init-data.sh ## postgres 初始化脚本
README.md
启动服务:
docker compose up -d

step6、访问 n8n 界面
访问 http://ip:5678 ,第一次访问需要进行注册,以及自定义配置,