Docker-Compose 部署
如果您已经安装了 Docker 和 Docker-Compose,可以直接从步骤 3 开始。
您可以在 n8n-hosting 仓库 中找到针对不同架构的 Docker Compose 配置方案。
/// 注意 | 自托管知识前提条件
自托管 n8n 需要具备以下技术知识:
- 服务器和容器的设置与配置
- 管理应用程序资源和扩展
- 服务器和应用程序的安全防护
- 配置 n8n
n8n 建议仅由专业用户进行自托管。配置不当可能导致数据丢失、安全问题和服务中断。如果您缺乏服务器管理经验,n8n 推荐使用 n8n Cloud。
///
/// 注意 | 最新版和下一版本
n8n 每周都会发布新的次要版本。latest
版本用于生产环境,next
是最新发布的版本。您应该将 next
视为测试版:它可能不稳定。如需报告问题,请使用论坛。
当前 latest
版本: 1.95.3
当前 next
版本: 1.97.1
///
1. 安装 Docker 和 Docker Compose
Docker 和 Docker Compose 的安装方法因您使用的 Linux 发行版而异。您可以在 Docker 和 Docker Compose 的安装文档中找到详细说明。以下示例适用于 Ubuntu 系统:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | # 移除不兼容或过时的 Docker 实现(如果存在)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 安装必备软件包
sudo apt-get update
sudo apt-get install ca-certificates curl
# 下载仓库签名密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 配置软件仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新并安装 Docker 和 Docker Compose
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
通过以下命令验证 Docker 和 Docker Compose 是否可用:
| docker --version
docker compose version
|
2. 可选:非 root 用户访问权限
您可以选择授予用户无需使用 sudo
命令即可运行 Docker 的权限。
要为当前登录用户授予权限(假设该用户拥有 sudo
权限),请运行:
| sudo usermod -aG docker ${USER}
# 将 `docker` 组成员身份注册到当前会话,而不更改主组
exec sg docker newgrp
|
要为其他用户授予权限,请运行以下命令,并将 <USER_TO_RUN_DOCKER>
替换为相应的用户名:
| sudo usermod -aG docker <USER_TO_RUN_DOCKER>
|
您需要从该用户的任何现有会话中运行 exec sg docker newgrp
命令,才能访问新的组权限。
可以通过以下命令验证当前会话是否识别 docker
组:
3. DNS 设置
要在线上或网络中托管 n8n,请创建一个指向您服务器的专用子域名。
添加 A 记录以相应路由子域名:
- 类型: A
- 名称:
n8n
(或所需的子域名)
- IP 地址: (您的服务器 IP 地址)
4. 创建 .env
文件
创建一个项目目录来存储您的 n8n 环境配置和 Docker Compose 文件,并进入该目录:
| mkdir n8n-compose
cd n8n-compose
|
在 n8n-compose
目录中,创建一个 .env
文件来自定义您的 n8n 实例详情。根据您的实际情况修改以下内容:
.env 文件 |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | # DOMAIN_NAME 和 SUBDOMAIN 共同决定 n8n 的访问地址
# 顶级域名
DOMAIN_NAME=example.com
# 子域名
SUBDOMAIN=n8n
# 以上示例将在以下地址提供服务: https://n8n.example.com
# 可选时区设置,用于 Cron 和其他调度节点
# 如果未设置,默认使用纽约时区
GENERIC_TIMEZONE=Europe/Berlin
# 用于 TLS/SSL 证书创建的电子邮件地址
SSL_EMAIL=user@example.com
|
5. 创建本地文件目录
在您的项目目录内,创建一个名为 local-files
的目录,用于在 n8n 实例与主机系统之间共享文件(例如使用从磁盘读写文件节点):
下方的 Docker Compose 文件可以自动创建此目录,但手动创建能确保目录具有正确的所有权和权限。
6. 创建 Docker Compose 文件
创建一个 compose.yaml
文件,将以下内容粘贴到文件中:
compose.yaml 文件 |
---|
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
48
49
50
51
52
53
54
55
56 | services:
traefik:
image: "traefik"
restart: always
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
- "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
- "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- traefik_data:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "127.0.0.1:5678:5678"
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
- traefik.http.routers.n8n.tls=true
- traefik.http.routers.n8n.entrypoints=web,websecure
- traefik.http.routers.n8n.tls.certresolver=mytlschallenge
- traefik.http.middlewares.n8n.headers.SSLRedirect=true
- traefik.http.middlewares.n8n.headers.STSSeconds=315360000
- traefik.http.middlewares.n8n.headers.browserXSSFilter=true
- traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
- traefik.http.middlewares.n8n.headers.forceSTSHeader=true
- traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
- traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
- traefik.http.middlewares.n8n.headers.STSPreload=true
- traefik.http.routers.n8n.middlewares=n8n@docker
environment:
- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
volumes:
- n8n_data:/home/node/.n8n
- ./local-files:/files
volumes:
n8n_data:
traefik_data:
|
上述 Docker Compose 文件配置了两个容器:一个用于运行 n8n,另一个用于运行 traefik(一个用于管理 TLS/SSL 证书和处理路由的应用代理)。
该文件还创建并挂载了两个 Docker 卷,并挂载了之前创建的 local-files
目录:
名称 |
类型 |
容器挂载点 |
描述 |
n8n_data |
卷 |
/home/node/.n8n |
n8n 保存其 SQLite 数据库文件和加密密钥的位置 |
traefik_data |
卷 |
/letsencrypt |
traefik 保存 TLS/SSL 证书数据的位置 |
./local-files |
绑定挂载 |
/files |
在 n8n 实例和主机之间共享的本地目录。在 n8n 中,使用 /files 路径来读写此目录。 |
7. 启动 Docker Compose
现在可以通过以下命令启动 n8n:
| sudo docker compose up -d
|
要停止容器,请输入:
8. 完成
现在您可以使用在 .env
文件配置中定义的子域名+域名组合访问 n8n。以上示例将生成 https://n8n.example.com
访问地址。
n8n 仅支持通过安全的 HTTPS 协议访问,不支持普通 HTTP 协议。
后续步骤
- 了解更多关于 配置 和 扩展 n8n 的信息
- 或者探索如何使用 n8n:尝试 快速入门