什么是n8n

n8n 是一个免费开源的工作流自动化工具,你可以把它想象成一个数字世界的“乐高积木”或“IFTTT 的强大替代品”。

它的核心理念是:通过拖拽节点和连接线,将不同的应用和服务连接起来,自动完成重复性任务,而无需编写任何代码。

Info

🦄 名字的由来:n8n 是 “nodemation” 的缩写,意为 “Node Automation”。

特点:

  • 低代码/无代码
  • 灵活
  • 多种触发器:手动、定时、webhook触发

竞品比对

特性n8nDifyCoze (扣子)
核心定位通用工作流自动化AI 应用开发平台AI Bot 开发与分发平台
技术焦点API 集成、数据处理、任务调度LLM (大语言模型) 编排Agent (智能体) 构建
主要用户开发者、运维、业务流程分析师AI 应用开发者、产品经理Bot 创建者、运营人员、内容创作者
核心功能连接数百个 App,定时任务,WebhookRAG、知识库、Prompt 工程、Agent多模态 Bot、插件商店、一键发布到各大平台
AI 角色作为众多节点中的一个(如 OpenAI 节点)平台的核心和基础平台的核心和基础
部署方式可自托管 (Docker, 云)可自托管 (Docker, 云)主要云端服务
数据隐私 (可完全本地化) (可完全本地化) (依赖平台)
商业模式开源免费 (有付费云版)开源免费 (有付费云版)开源免费 (有付费云版)

我喜欢n8n的理由是,纯粹是来开发工作流的,而其他两个由于想做的东西太多,失去了纯粹性,单纯个人观点。

部署

部署有两种方法,一种是部署在本地,另一种是使用docker部署,当然如果你想体验一下,他们官网提供免费14天的体验。

我是用第二种方法 - docker部署,这是官方教程,n8n+postgressql的方式,postgressql的作用是相当于n8n的系统后台数据库,如果你不配置它,n8n默认使用SQLite,主要存储工作流、执行历史、凭证、用户数据。

值得注意的一点是,建议使用docker 的volumes来持久化。

方式一:使用docker compose

管理多容器应用的标准方式,只需一个 docker-compose.yml 文件即可定义所有服务,方便简单

步骤 1: 创建 docker-compose.yml 文件

在你的项目目录下,创建一个名为 docker-compose.yml 的文件,并填入以下内容:

version: '3.8'
 
services:
  postgres:
    image: postgres:14-alpine
    container_name: n8n-postgres
    restart: always
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=n8n
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      # 暴露端口是为了方便你从主机用数据库工具连接调试,生产环境可移除
      - "5433:5432" 
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U n8n']
      interval: 5s
      timeout: 5s
      retries: 10
 
  n8n:
    image: n8nio/n8n
    container_name: n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      # 关键部分:告诉 n8n 使用 PostgreSQL
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=n8n
      # N8N_BASIC_AUTH_ACTIVE 和 N8N_BASIC_AUTH_USER/PASSWORD 是可选的,用于为 n8n 界面增加一层基础认证
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=your_very_strong_password
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy
 
volumes:
  postgres_data:
  n8n_data:
 
  • 文件解析:
    1. services: 定义了两个服务:postgresn8n
    2. postgres 服务:
      • environment: 设置了 PostgreSQL 的数据库、用户和密码。请确保这些值与 n8n 服务中的连接信息完全一致
      • volumes: 使用了 Docker 数据卷 postgres_data 来持久化数据库数据。
      • healthcheck: 这是一个健康检查,确保 PostgreSQL 数据库完全启动并可接受连接后,n8n 服务才启动。这可以有效避免因数据库未就绪而导致的连接失败。
    3. n8n 服务:
      • environment: 这是连接的关键!我们通过环境变量告诉 n8n 数据库的类型和连接信息。
        • DB_TYPE=postgresdb: 指定使用 PostgreSQL。
        • DB_POSTGRESDB_HOST=postgres: 这是最重要的部分postgres 是我们在同一个 docker-compose.yml 文件中定义的 PostgreSQL 服务的名称。Docker Compose 会自动将服务名解析到容器的 IP 地址。
        • 其他 DB_POSTGRESDB_* 变量提供了连接数据库所需的端口、数据库名、用户和密码。
      • depends_on: 确保在 postgres 服务健康检查通过后,n8n 服务才启动。
      • volumes: 使用 Docker 数据卷 n8n_data 来持久化 n8n 的配置、凭据等信息。
    4. volumes: 在文件顶部定义了两个数据卷 postgres_datan8n_data,用于数据持久化。

步骤2:启动服务

docker-compose.yml 文件所在的目录中,打开终端并运行:

docker-compose up -d

Docker Compose 会自动拉取镜像、创建网络、启动容器。n8n 会自动连接到 PostgreSQL 实例并完成初始化。

步骤 3: 验证连接

  1. 访问 n8n: 在浏览器中打开 http://localhost:5678。你应该能看到 n8n 的登录界面。
  2. 检查日志: 如果遇到问题,可以查看 n8n 容器的日志来诊断。
docker logs n8n

应该能看到类似 Database connection successfully initialized. 的日志信息。就代表成功了

方式二:分别构建n8n和postgresql服务

步骤1:创建共同网络

这是两个独立的服务,首先要建立一个互通的网络

# 先创建网络
docker network create n8n-network

步骤2:拉取镜像

docker pull n8nio/n8n
docker pull postgres:14-alpine

image.png

步骤3:创建volumes

其中先创建两个volumes,即postgres_data和n8n-data,是为了持久化。

docker volume create n8n-data
docker volume create postgres_data

步骤4:创建容器

# 启动 PostgreSQL 容器
docker run --name n8n-postgres \
    --network n8n-network \
    -e POSTGRES_PASSWORD=your_password \
    -e POSTGRES_USER=n8n \
    -e POSTGRES_DB=n8n \
    -v postgres_data:/var/lib/postgresql/data \
    -d postgres:latest
 
# 启动 n8n 容器
docker run --name n8n \
    --network n8n-network \
    -p 5678:5678 \
    -e DB_TYPE=postgresdb \
    -e DB_POSTGRESDB_HOST=youthful_mayer \
    -e DB_POSTGRESDB_DATABASE=n8n \
    -e DB_POSTGRESDB_USER=n8n \
    -e DB_POSTGRESDB_PASSWORD=your_password \
    -v n8n-data:/home/node/.n8n
    -d n8nio/n8n:latest
 

步骤5:测试

# 查看 n8n 容器的网络信息
docker inspect nostalgic_cerf | grep "NetworkMode" -A 20
 
# 查看 PostgreSQL 容器的网络信息
docker inspect my-postgres | grep "NetworkMode" -A 20

如果网络名称都一样,这就是互通的。

这是n8n环境的初步搭建。让我们动手搭起来吧。