从零到一:使用 Docker 在服务器上部署生产级 n8n 自动化平台
在这个数据驱动的时代,自动化是提升效率的关键。n8n 作为一个开源、可自托管的"Zapier"替代品,赋予了开发者和技术爱好者完全掌控自己工作流的能力。相比于昂贵的商业服务,自托管 n8n 意味着无限的流程、无限制的步骤,以及最重要的数据隐私。
本教程将带您从零开始,在一台标准的云服务器(2核4G)上,使用 Docker Compose 和 PostgreSQL 数据库,一步步部署一个稳定、安全且可扩展的 n8n 实例。
**您将学到:**
* 准备服务器环境并安装 Docker。
* 使用 Docker Compose 编排 n8n 和 PostgreSQL 数据库服务。
* 通过 `.env` 文件安全地管理您的密码和凭证。
* 启动、验证并访问您的 n8n 实例。
* 配置生产环境所需的关键后续步骤,如 HTTPS 和备份。
### 准备工作:您的部署清单
在开始之前,请确保您已具备以下条件:
1. **一台云服务器**:至少 `2核 CPU` 和 `4GB 内存`。本文以 **Ubuntu 22.04** 为例,但其他主流 Linux 发行版同样适用。
2. **SSH 访问权限**:您需要能够以 root 或拥有 sudo 权限的用户身份登录服务器。
3. **一个域名(强烈推荐)**:虽然可以使用 IP 地址访问,但为 n8n 配置一个域名是实现 HTTPS 加密和专业部署的前提。
-----
### 第一步:环境准备 - 安装 Docker 和 Docker Compose
首先,我们需要在服务器上安装容器化环境。Docker 是当前最流行的容器技术,而 Docker Compose 则能让我们轻松定义和管理多容器应用。
1. **登录服务器并更新系统**
通过 SSH 连接到您的服务器,然后运行以下命令更新软件包列表和已安装的软件:
```bash
sudo apt update && sudo apt upgrade -y
```
2. **一键安装 Docker**
Docker 官方提供了一个便捷的安装脚本,可以自动完成安装过程。
```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
```
3. **安装 Docker Compose**
Docker Compose 是一个独立的二进制文件,我们需要从 GitHub 下载它。
```bash
# 从 GitHub Release 下载并赋予执行权限
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```
*注意:您可以访问 Docker Compose 的 [GitHub Release 页面](https://github.com/docker/compose/releases) 查看并替换为最新的版本号。*
4. **验证安装**
执行以下命令检查 Docker 和 Docker Compose 是否安装成功:
```bash
docker --version
docker-compose --version
```
如果您能看到各自的版本号输出,那么恭喜您,服务器环境已准备就绪!
-----
### 第二步:核心配置 - 编写 Docker Compose 文件
现在,我们将定义 n8n 应用及其数据库。我们将创建一个项目目录,并在其中放置两个核心文件:`docker-compose.yml` 用于定义服务,`.env` 用于存放敏感数据。
1. **创建项目目录**
```bash
mkdir ~/n8n
cd ~/n8n
```
2. **创建 `docker-compose.yml` 文件**
这是整个部署的蓝图。使用 `nano` 或您喜欢的编辑器创建该文件:
```bash
nano docker-compose.yml
```
将以下内容完整地复制粘贴到文件中。其中的注释解释了每个配置项的作用。
```yaml
# Docker Compose 文件版本
version: '3.8'
# 定义所有服务
services:
# n8n 主服务
n8n:
image: n8nio/n8n # 使用官方的 n8n 镜像
restart: unless-stopped # 容器退出时自动重启,除非手动停止
ports:
- "5678:5678" # 将主机的 5678 端口映射到容器的 5678 端口
environment:
# --- 数据库配置 ---
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db # 指向下面的 'db' 服务
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB} # 从 .env 文件读取数据库名
- DB_POSTGRESDB_USER=${POSTGRES_USER} # 从 .env 文件读取用户名
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD} # 从 .env 文件读取密码
# --- n8n 基础配置 ---
- N8N_BASIC_AUTH_ACTIVE=true # 启用基础登录认证 (安全第一道防线)
- N8N_BASIC_AUTH_USER=${N8N_USER} # 从 .env 文件读取登录用户名
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD} # 从 .env 文件读取登录密码
- GENERIC_TIMEZONE=Asia/Shanghai # 设置时区,确保定时任务准确
- WEBHOOK_URL=http://your-server-ip:5678/ # **重要!** 务必修改为你的公网IP或域名
volumes:
- n8n_data:/home/node/.n8n # 数据持久化,防止容器重启后数据丢失
# PostgreSQL 数据库服务
db:
image: postgres:14 # 使用稳定可靠的 PostgreSQL 14 镜像
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data # 数据库数据持久化
# 定义数据卷,由 Docker 管理
volumes:
n8n_data:
postgres_data:
```
3. **创建 `.env` 文件以保护凭证**
将密码等敏感信息放在 `.env` 文件中是最佳实践。在 `docker-compose.yml` 旁边创建它:
```bash
nano .env
```
将以下内容粘贴进去,并**务必修改为您自己的强密码和用户名**:
```env
# PostgreSQL 数据库的凭证
POSTGRES_DB=n8n
POSTGRES_USER=n8nuser
POSTGRES_PASSWORD=YourSuperStrongDbPassword123!
# n8n 初始登录的用户名和密码
N8N_USER=admin
N8N_PASSWORD=YourSuperStrongN8nLoginPassword456!
```
-----
### 第三步:启动与验证
一切就绪,是时候启动我们的自动化平台了!
1. **启动服务**
在 `~/n8n` 目录下,执行以下命令:
```bash
docker-compose up -d
```
Docker Compose 会在后台拉取镜像、创建并启动容器。首次启动需要一些时间。
2. **检查运行状态**
```bash
docker-compose ps
```
您应该能看到 `n8n` 和 `db` 两个服务的状态(STATUS)都显示为 `running` 或 `Up`。
3. **访问 n8n**
打开浏览器,输入 `http://<你的服务器公网IP>:5678`。您会看到一个登录弹窗,请输入您在 `.env` 文件中设置的 `N8N_USER` 和 `N8N_PASSWORD`。
验证通过后,您将进入 n8n 的初始化界面,根据提示设置一个管理员(Owner)账户。这个账户是您未来登录 n8n 工作台的唯一凭证。
-----
### 第四步:迈向生产 - 安全与维护
成功运行只是第一步,要让 n8n 成为可靠的生产力工具,以下几点至关重要:
1. **安全第一:配置反向代理与 HTTPS**
直接通过 IP 和端口访问是**不安全**的。您应该使用 **Nginx Proxy Manager** 或 **Caddy** 等工具,将您的域名反向代理到 `http://localhost:5678`,并自动配置 Let's Encrypt 的免费 SSL 证书。这不仅能让您通过 `https://n8n.yourdomain.com` 访问,还能加密所有传输数据。
*配置完成后,切记将 `docker-compose.yml` 或 `.env` 文件中的 `WEBHOOK_URL` 更新为您的 HTTPS 域名。*
2. **高枕无忧:数据备份策略**
我们的数据虽然已经通过 Docker Volume 持久化,但服务器硬件故障或误操作仍可能导致数据丢失。您需要定期备份 `n8n_data` 和 `postgres_data` 这两个 Docker 卷。可以编写一个简单的脚本,利用 `cron` 定时任务将数据打包并传输到其他存储位置(如对象存储 OSS)。
3. **保持最新:如何轻松升级**
得益于 Docker,升级 n8n 非常简单。只需在 `~/n8n` 目录下执行几条命令:
```bash
# 1. 拉取最新的 n8n 和 postgres 镜像
docker-compose pull
# 2. 重新启动服务,Docker Compose 会自动使用新镜像
docker-compose up -d
# 3. (可选) 清理不再使用的旧镜像,释放磁盘空间
docker image prune -f
```
### 总结
恭喜您!您已经成功地搭建了一个属于自己的、功能强大的自动化平台。现在,您可以尽情探索 n8n 的无限可能,将重复性的工作流自动化,连接您最喜爱的各种应用,真正地让技术为您的效率服务。这个私有化的 n8n 实例将是您数据安全、降本增效的得力助手。










