> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-zh/ai-ping-tai-yu-zhi-neng-ti/n8n.md).

# n8n AI 工作流

## 概览

[n8n](https://github.com/n8n-io/n8n) 是一个采用 fair-code 的工作流自动化平台，拥有 **55K+ GitHub 星标**。与完全闭源的替代方案（Zapier、Make）不同，n8n 允许你自托管整套栈——并且完全掌控数据——同时还提供原生 AI Agent 能力、JavaScript/Python 代码节点，以及不断增长的 400+ 集成库。

在 **Clore.ai**，n8n 本身运行在 CPU 上（不需要 GPU），但如果与同一台服务器上运行的 Ollama 或 vLLM 等 GPU 加速服务配合使用，就能构建一个完全本地化的 AI 自动化栈。你可以以低于 **每小时 $0.10–0.20**.

**关键能力：**

* 🔗 **400+ 集成** — Slack、GitHub、Google Sheets、Postgres、HTTP 请求、webhook 等更多服务
* 🤖 **AI Agent 节点** — 内置由 LangChain 驱动的 Agent，支持工具使用和记忆
* 💻 **代码节点** — 在工作流中直接运行任意 JavaScript 或 Python 代码
* 🔄 **触发器种类** — webhook、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）**   | RTX 3090   | 24 GB | 16 GB | 60 GB  | $0.07–0.21/小时                     |
| **+ 高吞吐量 LLM**         | A100 40 GB | 40 GB | 32 GB | 100 GB | [裸机](https://clore.ai/bare-metal) |
| **AI Starter Kit（完整）** | RTX 4090   | 24 GB | 32 GB | 100 GB | $0.14–0.42/小时                     |

> **提示：** 该 [n8n 自托管 AI Starter Kit](https://github.com/n8n-io/self-hosted-ai-starter-kit) 将 n8n + Ollama + Qdrant + PostgreSQL 打包进一个 Docker Compose 栈。参见 [AI Starter Kit](#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 Starter Kit（推荐）

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

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

```bash
# 克隆 starter kit
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  # 用于嵌入
```

启动后服务：

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

> **注意：** 带 GPU 的 Ollama 需要 [NVIDIA Container Toolkit](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=your-secure-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 Agent

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

1. 在 n8n 中，添加一个新的凭据： **Ollama API**
   * 基础 URL： `http://ollama:11434` （如果使用 Compose）或 `http://localhost:11434`
2. 在工作流中，添加一个 **AI Agent** 节点
3. 在 **聊天模型**中，选择 Ollama 并选取你的模型（例如 `llama3:8b`)
4. 添加如下工具： **HTTP Request**, **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。如果你的 webhook 在重新部署后失效：

```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
# 将 n8n 置于带 HTTPS 的反向代理后面运行
# 在生产环境中切勿直接暴露 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
```

### Webhook 返回 404

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

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

### AI Agent 节点无法连接到 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: no space left on device"

```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 Starter Kit](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-zhi-nan/gpu-comparison.md)
* [n8n 社区论坛](https://community.n8n.io)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
