# n8n AI 工作流

## 概览

[n8n](https://github.com/n8n-io/n8n) 是一个公平许可代码的工作流自动化平台，具有 **55K+ GitHub 星标**。与完全闭源的替代品（Zapier、Make）不同，n8n 允许你自托管整个堆栈——完全控制数据——同时提供原生的 AI 代理功能、JavaScript/Python 代码节点以及不断增长的 400+ 集成库。

在 **Clore.ai**，n8n 本身运行在 CPU 上（不需要 GPU），但可以与在同一服务器上运行的 Ollama 或 vLLM 等 GPU 加速服务强强配合，为你提供完全本地化的 AI 自动化堆栈。你可以在不到 **$0.10–0.20/小时**.

**主要功能：**

* 🔗 **400+ 集成** — 包括 Slack、GitHub、Google Sheets、Postgres、HTTP 请求、webhooks 等更多
* 🤖 **AI 代理节点** — 内置基于 LangChain 的代理，支持工具使用和记忆
* 💻 **代码节点** — 在工作流中内联运行任意 JavaScript 或 Python
* 🔄 **触发器多样性** — webhooks、cron 定时、数据库轮询、电子邮件、队列事件
* 📊 **子工作流** — 模块化、可复用的工作流组件
* 🔐 **凭证保险库** — 用于 API 密钥和 OAuth 令牌的加密存储
* 🏠 **自托管** — 你的数据永远不会离开你的服务器

***

## 要求

n8n 是一个以 Docker 镜像打包的 Node.js 应用。它是 **仅 CPU** — 自动化引擎本身不需要 GPU。只有当你同时运行本地 LLM（例如 Ollama）时，GPU 才会有用。

| 配置                   | GPU        | 显存    | 系统内存  | 磁盘     | Clore.ai 价格     |
| -------------------- | ---------- | ----- | ----- | ------ | --------------- |
| **最小** （仅 n8n）       | 无 / 仅 CPU  | —     | 2 GB  | 10 GB  | 约 $0.03/小时（CPU） |
| **标准**               | 无 / 仅 CPU  | —     | 4 GB  | 20 GB  | 约 $0.05/小时      |
| **+ 本地 LLM（Ollama）** | 速度         | 24 GB | 16 GB | 60 GB  | \~$0.20/小时      |
| **+ 高吞吐量 LLM**       | A100 40 GB | 40 GB | 32 GB | 100 GB | 约 $0.80/小时      |
| **AI 启动包（完整）**       | 512x512    | 24 GB | 32 GB | 100 GB | \~$0.35/小时      |

> **提示：** 该 [n8n 自托管 AI 启动包](https://github.com/n8n-io/self-hosted-ai-starter-kit) 将 n8n + Ollama + Qdrant + PostgreSQL 打包进一个 Docker Compose 堆栈。参见 [AI 启动包](#ai-starter-kit-recommended) 下文。

***

## 快速开始

### 1. 租用 Clore.ai 服务器

登录到 [clore.ai](https://clore.ai) 并部署一台服务器：

* **仅 CPU 实例** 如果你只需要 n8n 自动化
* **RTX 3090/4090** 如果你想通过 Ollama 使用本地 LLM
* 开放端口 **5678** 在提供的端口映射设置中
* 启用 SSH 访问

### 2. 连接到服务器

```bash
ssh root@<clore-server-ip> -p <ssh-port>

# 验证是否已安装 Docker
docker --version
docker compose version
```

### 3. 选项 A — 最小单容器启动

让 n8n 运行的最快方法：

```bash
# 为持久化创建命名卷
docker volume create n8n_data

# 运行 n8n
docker run -d \
  --name n8n \
  --restart unless-stopped \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e N8N_HOST=<clore-server-ip> \
  -e N8N_PORT=5678 \
  -e N8N_PROTOCOL=http \
  -e WEBHOOK_URL=http://<clore-server-ip>:5678/ \
  docker.n8n.io/n8nio/n8n

# 检查日志
docker logs -f n8n
```

在以下地址访问 UI `http://<clore-server-ip>:5678`

### 4. 选项 B — 使用 Postgres 的 Docker Compose（生产）

用于生产环境，请将默认的 SQLite 替换为 Postgres：

```bash
mkdir n8n-prod && cd n8n-prod
cat > docker-compose.yml << 'EOF'
version: "3.8"

services:
  postgres：
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: n8npassword   # 请更改此项！
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n：
    image: docker.n8n.io/n8nio/n8n
    restart: unless-stopped
    depends_on:
      postgres：
        condition: service_healthy
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: n8npassword
      N8N_HOST: <clore-server-ip>
      N8N_PORT: 5678
      N8N_PROTOCOL: http
      WEBHOOK_URL: http://<clore-server-ip>:5678/
      N8N_ENCRYPTION_KEY: 你的32字符加密密钥在此
      EXECUTIONS_MODE: regular
      N8N_BASIC_AUTH_ACTIVE: "true"
      N8N_BASIC_AUTH_USER: admin
      N8N_BASIC_AUTH_PASSWORD: changeme!
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  postgres_data:
  n8n_data：
EOF

docker compose up -d
docker compose logs -f n8n
```

***

## AI 启动包（推荐）

该 [n8n 自托管 AI 启动包](https://github.com/n8n-io/self-hosted-ai-starter-kit) 是构建完整本地 AI 自动化堆栈的最快路径。它包含：

* **n8n** — 工作流自动化
* **Ollama** — 本地 LLM 推理（GPU 或 CPU）
* **Qdrant** — 用于 RAG 的向量数据库
* **PostgreSQL** — 持久化存储

```bash
# 克隆启动包
git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git
cd self-hosted-ai-starter-kit

# 针对启用 GPU 的服务器（RTX 3090、4090、A100 等）
docker compose --profile gpu-nvidia up -d

# 针对仅 CPU 的服务器
docker compose --profile cpu up -d

# 监控启动
docker compose logs -f

# 在堆栈启动后向 Ollama 拉取模型
docker exec ollama ollama pull llama3:8b
docker exec ollama ollama pull nomic-embed-text  # 用于 embeddings
```

启动后的服务：

| 服务         | URL                          |
| ---------- | ---------------------------- |
| n8n UI     | `http://<ip>:5678`           |
| Ollama API | `http://<ip>:11434`          |
| Qdrant UI  | `http://<ip>:6333/dashboard` |

> **注意：** 带 GPU 的 Ollama 需要 [NVIDIA 容器工具包](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html)，Clore.ai 服务器已预装该工具包。

***

## 配置

### 环境变量参考

```bash
# ── 核心设置 ────────────────────────────────────────────────────────────
N8N_HOST=0.0.0.0                  # 绑定地址
N8N_PORT=5678                     # 监听端口
N8N_PROTOCOL=http                 # http 或 https
WEBHOOK_URL=http://<ip>:5678/     # 公共 webhook 基础 URL（关键！）

# ── 加密 ─────────────────────────────────────────────────────────────────
N8N_ENCRYPTION_KEY=<32-char-key>  # 对存储的凭证进行加密
# 生成： openssl rand -hex 16

# ── 认证 ─────────────────────────────────────────────────────────────────
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=你安全的密码

# ── 执行设置 ─────────────────────────────────────────────────────────────
EXECUTIONS_MODE=regular           # regular（单线程）或 queue（基于 Redis 的队列）
EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
EXECUTIONS_DATA_SAVE_ON_ERROR=all
EXECUTIONS_DATA_MAX_AGE=336       # 保留执行数据 14 天

# ── 时区 ─────────────────────────────────────────────────────────────────
GENERIC_TIMEZONE=UTC

# ── 禁用遥测（可选） ────────────────────────────────────────────────────
N8N_DIAGNOSTICS_ENABLED=false
N8N_VERSION_NOTIFICATIONS_ENABLED=false
```

### 将 n8n 连接到 Ollama 以使用 AI 代理

一旦 Ollama 在同一服务器上运行：

1. 在 n8n 中，添加一个新的凭证： **Ollama API**
   * 基础 URL： `http://ollama:11434` （如果使用 Compose）或 `http://localhost:11434`
2. 在工作流中，添加一个 **AI 代理** 节点
3. 在 **聊天模型**下，选择 Ollama 并选择你的模型（例如 `llama3:8b`)
4. 添加像 **HTTP 请求**, **Postgres**，或 **代码** 节点
5. 执行！

***

## 提示与最佳实践

### 在 Clore.ai 上的成本优化

```bash
# 在停止实例前导出所有工作流
# 在容器内使用 n8n CLI：
docker exec n8n n8n export:workflow --all --output=/home/node/.n8n/workflows-backup.json

# 将备份复制到本地机器
docker cp n8n:/home/node/.n8n/workflows-backup.json ./n8n-workflows-backup.json

# 在新实例上导入：
docker exec n8n n8n import:workflow --input=/home/node/.n8n/workflows-backup.json
```

### Clore.ai 上的 Webhook 可靠性

Clore.ai 服务器的 IP 为动态 IP。如果在重新部署后你的 webhooks 出现故障：

```bash
# 1. 使用带有 Caddy + Let's Encrypt 的静态域名
# Caddyfile：
# n8n.yourdomain.com {
#     reverse_proxy n8n:5678
# }

# 2. 或使用 Cloudflare Tunnel（免费，无需打开端口）：
docker run -d \
  --name cloudflared \
  --network n8n-prod_default \
  cloudflare/cloudflared:latest \
  tunnel --no-autoupdate run \
  --token <your-cloudflare-tunnel-token>
```

### 高流量工作流的队列模式

```bash
# 添加 Redis 并以队列模式运行 n8n 以实现并行执行
# 添加到 docker-compose.yml：
  redis：
    image: redis:7-alpine
    restart: unless-stopped

  n8n-worker：
    image: docker.n8n.io/n8nio/n8n
    command: worker
    depends_on: [redis, postgres]
    environment:
      <<: *n8n-env
      EXECUTIONS_MODE: queue
      QUEUE_BULL_REDIS_HOST: redis
```

### 有用的 n8n CLI 命令

```bash
# 列出所有工作流
docker exec n8n n8n list:workflow

# 手动运行特定工作流
docker exec n8n n8n execute --id=<workflow-id>

# 将 n8n 更新到最新版本
docker pull docker.n8n.io/n8nio/n8n
docker compose up -d n8n

# 检查 n8n 版本
docker exec n8n n8n --version
```

### 安全加固

```bash
# 在带有 HTTPS 的反向代理后运行 n8n
# 在生产环境中切勿直接暴露 5678 端口
# 使用 N8N_BASIC_AUTH 或通过 LDAP/SAML 配置 SSO

# 限制允许的节点（白名单模式）：
NODE_FUNCTION_ALLOW_EXTERNAL=axios,lodash
NODES_EXCLUDE='["n8n-nodes-base.executeCommand"]'  # 阻止 shell 执行
```

***

## # 使用固定种子以获得一致结果

### n8n 容器立即退出

```bash
docker logs n8n

# 常见问题：
# 1. 数据库连接失败 — 检查 Postgres 是否健康
docker compose ps postgres

# 2. 加密密钥不匹配 — 如果你更改了 N8N_ENCRYPTION_KEY
#    凭证将变为不可读；在密钥更改后重新输入它们

# 3. 端口冲突
ss -tlnp | grep 5678
```

### Webhooks 返回 404

```bash
# 确保 WEBHOOK_URL 与你的 webhook 发送者使用的公共地址匹配
# 它必须包含结尾的斜杠
WEBHOOK_URL=http://<your-public-ip>:5678/

# 在更改此环境变量后重启 n8n
docker compose restart n8n
```

### AI 代理节点无法访问 Ollama

```bash
# 在 n8n 容器内进行测试
docker exec n8n wget -qO- http://ollama:11434/api/tags
# 或
docker exec n8n curl http://localhost:11434/api/tags

# 如果使用不在同一 Compose 网络中的独立容器：
# 使用 host.docker.internal 或服务器的局域网 IP
```

### "ENOSPC: 设备上没有足够的空间"

```bash
# 检查磁盘使用情况
df -h
docker system df

# 在 n8n UI 中修剪旧的执行数据：
# 设置 → 执行 → 删除旧的执行记录

# 或设置自动修剪：
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=72   # 72 小时
```

### 工作流执行缓慢

```bash
# 检查 CPU 使用情况
top -c

# 启用队列模式以实现并行执行（见上方提示）
# 如有需要，增加 Node.js 内存：
NODE_OPTIONS=--max-old-space-size=4096
```

***

## 延伸阅读

* [n8n 官方文档](https://docs.n8n.io)
* [n8n GitHub 仓库](https://github.com/n8n-io/n8n)
* [n8n 自托管 AI 启动包](https://github.com/n8n-io/self-hosted-ai-starter-kit)
* [n8n Docker 安装指南](https://docs.n8n.io/hosting/installation/docker/)
* [在 Clore.ai 上运行 Ollama](https://docs.clore.ai/guides/guides_v2-zh/yu-yan-mo-xing/ollama)
* [Clore.ai GPU 对比](https://docs.clore.ai/guides/guides_v2-zh/kuai-su-ru-men/gpu-comparison)
* [n8n 社区论坛](https://community.n8n.io)
