在这个数据驱动的时代,自动化是提升效率的关键。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 实例将是您数据安全、降本增效的得力助手。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐