📢 转载信息
原文链接:https://www.kdnuggets.com/how-to-self-host-n8n-on-docker-in-5-simple-steps
原文作者:Shittu Olumide
Image by Author
# 引言
自动化已成为结构良好业务运营的核心优势。世界各地的公司都在自动化重复性任务、整合多个应用程序并构建智能工作流,以节省时间和最大限度地减少人为错误。n8n是一款强大的开源工作流自动化工具,正在彻底改变团队处理自动化的方式,而且它完全可以免费自行托管。
与Zapier等昂贵的软件即服务(SaaS)解决方案不同,n8n让您完全控制自己的自动化基础设施。当您将n8n与Docker结合使用时,您将获得一个容器化、可扩展且可移植的自动化平台,可以部署在任何地方——从本地机器到亚马逊网络服务 (AWS)和微软 Azure等云提供商的生产服务器。
本教程将指导您完成在Docker上自托管n8n的完整过程,只需五个简单的步骤,并提供详细的解释和代码示例,无论您的技术背景如何。
# 了解 n8n
n8n(发音为“n-eight-n”)是一个公平代码许可的工作流自动化平台,它可以将几乎任何带有API的应用程序连接到任何其他应用程序。根据官方n8n文档,n8n可以帮助您使用少量或零代码连接应用程序,使其对技术用户和非技术用户都易于使用。
n8n的特点:
- 连接到流行服务,如Slack、Google Sheets、Airtable、HubSpot、Salesforce、GitHub以及数千种其他服务
- 直接在工作流中添加Python代码以实现复杂逻辑
- 使用拖放界面,使构建自动化直观
- 内置LangChain支持,用于人工智能(AI)驱动的工作流和智能自动化
- 可以选择托管在自己的服务器上或使用n8n Cloud
- 访问具有强大开源功能的免费社区版
使用n8n,您可以自动化以下任务:
- 在多个工具之间自动同步数据
- 处理来自外部服务的传入Webhooks
- 向Slack、电子邮件和其他平台发送通知
- 从外部API丰富客户数据
- 使用AI智能体创建智能工作流
- 以您需要的任何频率运行计划任务(cron jobs)
# 了解 Docker
Docker是一个容器化平台,它将您的整个应用程序(包括所有依赖项、库和配置)打包到一个轻量级、可移植的容器中。您可以将Docker容器视为一个自包含的盒子,其中包含n8n运行所需的一切,确保在不同机器和环境中的一致性。
为什么Docker非常适合n8n:
Docker在您的笔记本电脑、专用服务器或云基础设施上运行相同的容器。n8n独立运行,不会影响服务器上的其他应用程序。您只需一个命令即可升级n8n,而无需担心破坏依赖关系。您还可以运行多个n8n实例或工作负载容器来处理复杂的工作流,确保团队中的每个人都运行完全相同的环境。
# 步骤 1:安装 Docker 和 Docker Compose
第一步非常重要。在您可以在容器中运行n8n之前,必须在您的机器上安装Docker。在安装之前,了解Docker和Docker Compose之间的区别很重要。Docker是运行容器的核心容器化引擎。Docker Compose是一个用于通过YAML文件编排多个容器并简化配置的工具。
Docker Desktop适用于Windows、macOS和Linux,它同时包含了Docker和Docker Compose,使安装过程直截了当。
// 下载 Docker Desktop
→ 适用于 Windows 10/11
- 访问Docker官方网站
- 点击“Download for Windows”
- 选择您的处理器类型:Intel/AMD处理器或Apple Silicon (M1/M2/M3)
→ Windows 安装
- 双击下载的
Docker Desktop Installer.exe文件 - 将出现一个请求权限的提示;点击“Yes”
- 点击“Next”并按照提示操作
- 此过程可能需要几分钟时间
- 点击“Finish”
- 重新启动计算机以应用更改
重启后,您应该能在系统托盘中看到Docker鲸鱼图标。
Windows 注意事项:Docker Desktop要求启用Hyper-V或Windows Subsystem for Linux 2 (WSL2)。安装程序会自动启用这些功能,但您的计算机必须支持虚拟化。如果您使用的是较旧的Windows 10家庭版,您可能需要升级到Windows 10专业版才能获得Hyper-V支持。
// 验证 Docker 安装
无论您的操作系统如何,都可以通过打开终端(或Windows上的命令提示符)并运行以下命令来验证Docker是否正确安装:
docker --version
预期输出:
Docker version 28.5.2, build ecc6942
同时,验证Docker Compose:
docker compose version
预期输出:
Docker Compose version v2.40.3-desktop.1
如果您看到版本号,则Docker已正确安装。如果看到“command not found”,则Docker可能不在系统的PATH中。请重启终端或计算机后再试。
# 步骤 2:准备 n8n 目录结构
Docker准备就绪后,我们需要在计算机上为n8n创建一个存放位置。此步骤涉及创建文件夹,n8n将在此处存储其数据、配置文件和工作流信息。
Docker容器在隔离的环境中运行。为了能够访问宿主机器上的文件并持久化数据,以免容器重启时工作流丢失,我们需要在计算机上创建容器可以访问的卷挂载目录。可以将其想象成在您的计算机和Docker容器之间创建一个共享文件夹。
// 创建 n8n 项目目录
打开终端或命令提示符并运行以下命令:
导航到一个方便的位置;我们将使用用户的主目录:
cd ~
创建一个n8n项目目录:
mkdir n8n-docker
进入该目录:
cd n8n-docker
验证您是否在正确的位置:
pwd
这应该会显示您的n8n-docker路径。您的主目录下应该有一个名为n8n-docker的文件夹。这将是所有n8n配置和数据所在的项目的根目录。
// 创建数据存储目录
在n8n-docker文件夹内,我们需要为数据持久化创建子目录:
创建数据目录结构:
mkdir data mkdir data\workflows
验证目录是否已创建:
ls
目录结构的目的如下:
data/是n8n的数据库和配置的主存储位置data/workflows/是存储工作流文件的地方data/credentials/是存储集成加密凭据的地方
您现在已经创建了主要的n8n-docker项目目录,并设置了具有适当权限的子目录,以确保数据可以持久化访问。
# 步骤 3:创建 Docker Compose 配置文件
Docker Compose使用YAML,这是一种人类可读的数据格式。YAML使用缩进(空格)来显示关系,因此缩进必须精确。可以将其视为Python代码,其中缩进级别定义了结构。
// 创建 docker-compose.yml 文件
在您的n8n-docker目录中,按照以下步骤创建名为docker-compose.yml的新文件。
创建一个空文件:
New-Item -Path "docker-compose.yml" -ItemType File
使用记事本(或您喜欢的文本编辑器)打开它:
notepad docker-compose.yml
对于Linux用户,可以使用以下命令创建并打开文件:
nano docker-compose.yml
如果您使用的是nano,请粘贴以下内容,然后按Ctrl+X,再按Y,最后按Enter保存。
// 添加完整的 Docker Compose 配置
将此内容粘贴到您的docker-compose.yml文件中:
services: n8n: image: n8nio/n8n:latest container_name: n8n restart: always ports: - "5678:5678" environment: - N8N_HOST=0.0.0.0 - N8N_PORT=5678 - NODE_ENV=production - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=changeme123 - N8N_ENCRYPTION_KEY=your-secure-encryption-key volumes: - ./data:/home/node/.n8n networks: - n8n-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5678/healthz"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: n8n-network: driver: bridge
让我们分解一下此配置的每个部分:
services: n8n:
这声明我们正在定义一个名为“n8n”的服务。这是引用该容器的名称。
image: n8nio/n8n:latest container_name: n8n
image指令使用Docker Hub上的官方n8n镜像。:latest标签下载最新可用版本,而container_name将我们运行的容器命名为“n8n”。
重启策略
restart: always
这告诉Docker如果n8n崩溃或服务器重启,则自动重启容器。
端口映射
ports: - "5678:5678"
这对从浏览器访问n8n至关重要:
- 左边的数字 (5678): 您的主机计算机上的端口
- 右边的数字 (5678): 容器内部的端口
这意味着当您在计算机上访问http://localhost:5678时,它将连接到n8n容器内的5678端口。
环境变量
environment: - N8N_HOST=0.0.0.0 - N8N_PORT=5678 - NODE_ENV=production - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=changeme123 - N8N_ENCRYPTION_KEY=your-secure-encryption-key
环境变量配置n8n的行为:
N8N_HOST:n8n监听的网络接口。0.0.0.0表示“监听所有可用接口”。N8N_PORT:n8n在容器内部运行的端口。NODE_ENV:设置为production以进行安全加固和性能优化。N8N_BASIC_AUTH_ACTIVE:启用基本的用户名/密码身份验证。N8N_BASIC_AUTH_USER:访问n8n界面的用户名。N8N_BASIC_AUTH_PASSWORD:访问n8n界面的密码(请更改此项!)。N8N_ENCRYPTION_KEY:用于加密凭据和敏感数据的密钥。
重要的安全说明:请更改
N8N_BASIC_AUTH_PASSWORD和N8N_ENCRYPTION_KEY为强值!这些是保护您的自动化工作流和集成的凭据。
安全值示例:
N8N_BASIC_AUTH_PASSWORD=Pr0t3ctY0urN8n!D0sH3y7k@Secure N8N_ENCRYPTION_KEY=aB3xC9dE2fG4hI7jK5lM8nO1pQ4rS6tU9vW2xY5z$#@!%&
卷挂载:
volumes: - ./data:/home/node/.n8n
这将在您的计算机和容器之间创建一个桥梁。左侧(./data)是您宿主机上的目录,右侧(/home/node/.n8n)是n8n存储所有数据的容器内部目录。
这为什么重要?
如果容器被删除或更新,您的工作流和数据将保留在计算机的./data文件夹中。
networks: - n8n-network
这会将容器放置在一个Docker网络上,如果您将来添加更多服务(如专用数据库),这将很有用。
healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5678/healthz"] interval: 30s timeout: 10s retries: 3 start_period: 40s
这告诉Docker定期检查n8n是否仍在运行。它防止Docker在正常启动期间认为n8n已崩溃。
# 步骤 4:创建环境文件
虽然上述Docker Compose文件有效,但为管理敏感信息而使用单独的环境文件是一种最佳实践。在同一n8n-docker目录中,创建一个名为.env的文件。
New-Item -Path ".env" -ItemType File
使用记事本或集成开发环境(IDE)打开它:
notepad .env
// 添加您的配置变量
将此内容粘贴到您的.env文件中:
# n8n Configuration N8N_HOST=0.0.0.0 N8N_PORT=5678 NODE_ENV=production # Authentication N8N_BASIC_AUTH_ACTIVE=true N8N_BASIC_AUTH_USER=admin N8N_BASIC_AUTH_PASSWORD=your_secure_password_here_change_this N8N_ENCRYPTION_KEY=your_encryption_key_here_change_this
// 更新 Docker Compose 以使用 .env 文件
修改您的docker-compose.yml文件,使其引用.env文件。将environment:部分替换为:
env_file: - .env
// .env 文件的优势
使用.env文件有几个好处:敏感数据不会直接存储在编排文件中,并且您可以在不修改主docker-compose.yml文件的情况下更改配置。
如果您使用Git版本控制,切勿将.env文件提交到仓库中。在项目目录中创建一个.gitignore文件:
New-Item -Path ".gitignore" -ItemType File
将.env和data/添加到此文件中,以确保敏感数据和本地数据库文件被Git忽略。
# 步骤 5:启动 n8n 并访问它
打开终端,导航到您的n8n-docker目录,然后运行以下命令以在后台启动n8n:
docker compose up -d
-d命令以“分离”模式运行。如果这是您第一次运行,Docker将下载n8n映像,这可能需要几分钟时间。
// 监控 n8n 启动
查看日志以了解n8n是否成功启动:
docker compose logs -f n8n
// 在浏览器中访问 n8n
打开您的Web浏览器并导航到http://localhost:5678。您将看到一个设置屏幕;输入您在.env文件中设置的凭据。登录后,您将看到n8n工作流编辑器。
Image by Author
n8n界面包含所有可用的节点(Slack、Gmail、HTTP请求、逻辑节点等)、用于构建自动化的工作流区域以及所选节点的配置选项。
要验证您的n8n容器是否运行正常,请运行:
docker ps
# 管理您的 n8n 容器
n8n现在正在运行,以下是您将定期使用的重要命令:
- 查看实时日志:实时查看容器内部发生了什么。
docker compose logs -f n8n
按Ctrl+C退出。 - 停止 n8n:在保留数据的同时优雅地停止容器。
docker compose down - 更新 n8n:拉取最新的n8n映像并重启。
docker compose pull n8n docker compose up -d
# 构建您的第一个工作流
让我们创建一个简单的工作流,它侦听传入的Webhook请求,提取数据,然后向Slack发送消息。
在n8n界面中:
- 点击“+”按钮创建一个新工作流
- 点击“New Workflow”
// 添加 Webhook 节点
- 在左侧边栏搜索“Webhook”
- 将Webhook节点拖到画布上
- 在节点设置中,为方法选择
POST,并将路径输入为send-slack-message - 点击“Save”
// 添加 Slack 节点
- 搜索“Slack”并将节点拖到画布上
- 将Webhook节点连接到Slack节点
- 使用您的机器人令牌和目标频道配置Slack节点
// 激活工作流
- 点击“Execute”以测试连接
- 如果成功,将工作流切换为“Active”
- 复制Webhook URL以用作触发器
# 结论
您现在拥有一个完全功能的、在Docker中运行的n8n自动化平台。您已经学会了如何安装Docker和Docker Compose、为数据持久化创建适当的目录结构,以及配置n8n。您还设置了身份验证和安全性,访问了Web界面,并创建了您的第一个工作流。
这种设置的优点在于其可移植性和可扩展性。只需几个命令,您就可以将n8n移动到不同的服务器或升级到新版本。从这里开始,您的自动化之旅将充满无限可能。
Shittu Olumide是一位软件工程师和技术作家,热衷于利用尖端技术来构建引人入胜的故事,对细节有着敏锐的洞察力,并擅长简化复杂概念。您也可以在Twitter上找到Shittu。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区