# 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](/guides/guides_v2-zh/yu-yan-mo-xing/ollama.md)
* [Clore.ai GPU 对比](/guides/guides_v2-zh/ru-men/gpu-comparison.md)
* [n8n 社区论坛](https://community.n8n.io)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-zh/ai-ping-tai-yu-zhi-neng-ti/n8n.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
