引言
上一章我们领略了n8n云端版的便捷,但真正的掌控感始于私有化部署。将自动化引擎握在自己手中,意味着数据安全、成本可控与无限定制。本章,我们将跨越环境配置这道坎,亲手搭建一个完全属于你的自动化沙盒。
核心理论:私有化部署的架构解析
n8n的架构清晰而高效,理解它有助于我们更好地部署和维护。
核心架构:应用层与数据层
-
应用层(Node.js):n8n本身是一个Node.js应用。你可以把它想象成一个功能强大的"加工厂",它负责解析、执行你设计的工作流,并调用各种节点(即API接口)来完成具体任务。
-
数据层(SQLite/PostgreSQL):这是"加工厂"的仓库和账本。它主要存储两类数据:
-
元数据:你创建的所有工作流、凭证(加密后)、项目设置等配置信息。
-
执行数据:工作流每次运行的日志、状态和中间数据(除非你特意配置节点不保存)。
-
默认与推荐:n8n默认使用轻量级的SQLite数据库,适合个人或轻量使用。对于团队或生产环境,强烈推荐使用更稳定、支持并发的PostgreSQL。
-
核心优势:数据安全与自由
安全与优势 :私有化部署的核心价值在于数据本地化。所有工作流配置、执行日志以及通过工作流处理的数据(除非节点明确发送到外部服务)都留存在你自己的服务器或电脑上。这彻底消除了SaaS服务的数据隐私、合规性顾虑,也让你摆脱了订阅费用的束缚。
实战演练:使用 Docker Compose 部署私有 n8n
我们将使用Docker Compose来部署n8n,这是目前最简洁、可复现的方式。请确保你的系统已安装Docker和Docker Compose。
步骤 1:创建项目目录与配置文件
在你的服务器或本地电脑上,创建一个新目录(如my-n8n-server),并进入该目录。
bash
mkdir my-n8n-server && cd my-n8n-server
创建一个名为docker-compose.yml的文件,并将以下配置粘贴进去。注释已详细说明了每个关键部分的作用。
XML
# docker-compose.yml
version: '3.8'
services:
# 定义n8n服务
n8n:
image: n8nio/n8n:latest # 使用官方最新镜像,也可指定如`1.40.0`版本
container_name: n8n_server
restart: unless-stopped # 确保容器意外退出时自动重启
ports:
- "5678:5678" # 将容器内端口5678映射到主机端口5678,可通过 http://localhost:5678 访问
environment:
# 核心配置:告诉n8n使用我们下面定义的postgres数据库
- N8N_DATABASE_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres # 服务名即数据库主机名,Docker网络内可解析
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=n8n_password # 【重要】请在生产环境中修改为强密码!
- N8N_HOST=localhost # 用于Webhook回调等,本地部署可设为localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
# 通用配置
- N8N_ENCRYPTION_KEY=your-encryption-key-here # 【极重要】用于加密凭证,必须自定义且保密!长度建议16+字符
- GENERIC_TIMEZONE=Asia/Shanghai # 设置默认时区
volumes:
# 持久化存储:将主机目录挂载到容器内,防止数据丢失
- n8n_data:/home/node/.n8n # 存储用户上传的文件、导出工作流等
- ./local_files:/files # 可选:将主机`local_files`目录挂载,便于工作流读写本地文件
depends_on:
- postgres # 确保先启动数据库
networks:
- n8n_network
# 定义PostgreSQL数据库服务
postgres:
image: postgres:16-alpine # 使用轻量Alpine版本的PostgreSQL 16
container_name: n8n_postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=n8n_password # 与上面n8n服务中的密码保持一致
- POSTGRES_DB=n8n
volumes:
# 持久化数据库数据
- postgres_data:/var/lib/postgresql/data
networks:
- n8n_network
# 定义命名卷和网络,便于管理
volumes:
n8n_data:
postgres_data:
networks:
n8n_network:
driver: bridge
步骤 2:启动你的私有 n8n 服务器
在包含docker-compose.yml文件的目录下,执行一条命令:
bash
docker-compose up -d
-d参数表示在后台运行。Docker会自动拉取镜像并启动两个容器。使用以下命令查看运行状态:
bash
docker-compose ps
当两个容器的状态均为"Up"时,部署完成。
步骤 3:访问与初始化
打开浏览器,访问 http://你的服务器IP:5678 或 http://localhost:5678。
-
你将看到n8n的初始化页面,创建你的第一个管理员账户。
-
登录后,界面与云端版完全一致,但地址栏显示的是你自己的域名或IP。
恭喜! 一个完全由你掌控、数据完全本地的n8n自动化服务器已经就绪。
避坑指南/高阶技巧
-
加密密钥(N8N_ENCRYPTION_KEY)是命根 :务必在首次启动前设置一个复杂且唯一的字符串。一旦丢失或更改,所有已保存的加密凭证(如API密钥)将永久无法解密 。建议通过
.env文件管理环境变量,而非硬编码在YAML中。 -
端口与安全:默认的5678端口在公网暴露有风险。建议:
-
通过云服务器安全组/防火墙限制访问IP。
-
使用Nginx/Apache反向代理,并配置SSL证书(HTTPS)。这是生产环境必备步骤。
-
-
资源限制与备份 :在
docker-compose.yml中可以为服务添加资源限制(如mem_limit),防止单个工作流耗尽资源。定期备份n8n_data和postgres_data卷对应的主机目录,就是备份了整个n8n。 -
升级与回滚 :升级n8n版本时,先备份数据。然后修改
image标签(如n8nio/n8n:1.40.0),再次运行docker-compose up -d,Compose会自动拉取新镜像并重启。若出现问题,将标签改回旧版本即可回滚。
本章小结
本章我们深入理解了n8n的Node.js应用与数据库分离架构,并亲手通过Docker Compose完成了私有化部署。你现在拥有的是一个:
-
数据完全本地化的安全环境。
-
基于PostgreSQL的稳定数据存储。
-
配置持久化,重启不丢数据的可靠服务。
这个沙盒将成为后续所有复杂工作流实验的坚实基地。从下一章开始,我们将在这个基地上,真正开始"搭建"自动化的高楼。