本地AI工作流入门:n8n+Docker Compose实战部署指南
1. 为什么“本地 AI 工作流”必须从 n8n + Docker Compose 起手?
我第一次在 Ubuntu 22.04 上用 docker compose up -d 启动 self-hosted-ai-starter-kit 的时候,终端只输出了三行日志,然后就静默了——没有报错,也没有成功提示。五分钟后,我打开浏览器输入 http://localhost:5678,页面加载出来,顶部赫然写着 “Welcome to n8n — Your AI Workflow Orchestrator”。那一刻我才真正意识到:所谓“本地 AI 工作流”,从来不是把几个模型文件丢进文件夹就能跑起来的事;它是一套可声明、可复现、可协作、可演进的基础设施层。而 n8n 就是这个层里最轻量却最锋利的调度器,Docker Compose 则是把它钉死在你本地机器上的那颗不锈钢铆钉。
很多人卡在第一步,不是因为不会敲命令,而是根本没想清楚:为什么非得用 Docker Compose?为什么不能直接 pip install n8n?为什么 starter-kit 不提供一键 exe 安装包?答案藏在三个现实约束里:依赖冲突、环境漂移、服务耦合。举个最典型的例子——你要同时跑 Ollama(本地大模型)、ComfyUI(AI 绘画)、n8n(流程编排)和 PgVector(向量数据库)。Ollama 要求 Go 1.21+,ComfyUI 依赖 PyTorch 2.3+ 和 CUDA 12.1,n8n 需要 Node.js 18.x,PgVector 又强绑定 PostgreSQL 15+。如果全装在宿主机上,光是 Python 版本和 CUDA 驱动的版本对齐就能耗掉一整天。而 Docker Compose 的价值,就是把这四个“脾气迥异”的服务,各自关进带独立运行时、独立文件系统、独立网络栈的容器里,再用一份 YAML 文件把它们之间的通信协议、端口映射、数据挂载路径、启动顺序全部写死。这不是“多此一举”,这是把混沌的本地开发,变成一张可打印、可 Git 提交、可团队共享的拓扑图。
更关键的是,self-hosted-ai-starter-kit 这个名字里的 “starter” 并非谦辞——它真就是为“第一天”设计的。它不预装任何大模型(Qwen、Llama3、Phi-3 全靠你按需 pull),不硬编码工作流逻辑(所有 .json 模板都放在 /workflows 下供你拖拽导入),甚至不默认开启认证(N8N_BASIC_AUTH_ACTIVE=false)。它的哲学是:先让你看到轮子转起来,再教你换轮胎、调胎压、改悬挂。所以这篇教程不讲“n8n 是什么”这种百科式定义,也不堆砌 Docker 原理图——我们直接拆开 starter-kit 的 docker-compose.yml,一行行告诉你每个字段为什么这么写,每个 volume 为什么挂载到那个路径,每次 docker compose restart always 背后到底在守护什么进程。你不需要成为 DevOps 工程师,但得知道你的 AI 工作流,此刻正运行在哪一层抽象之上。
提示:本教程全程基于 Ubuntu 22.04 LTS(推荐)或 macOS Sonoma(M1/M2 芯片需额外注意 Rosetta 兼容性)。Windows 用户请务必使用 WSL2(Ubuntu 发行版),原生 Windows Docker Desktop 对 ComfyUI 的 GPU 加速支持极不稳定,实测会导致
cudaErrorInitializationError报错率超 70%。这不是配置问题,是驱动层兼容性缺陷。
2. 环境准备:绕过 90% 新手失败的五个“隐形门槛”
绝大多数人失败,不是败在 docker compose up 这条命令上,而是败在它之前的五个前置动作里。这些动作在官方文档里往往一笔带过,但在真实环境中,每一个都可能成为“no configuration file provided: not found”这类报错的根因。我用一台全新安装的 Ubuntu 22.04 虚拟机,完整重演了 12 次部署过程,总结出必须亲手验证的五个检查点。
2.1 Docker Engine 与 Docker Compose V2 的版本锁死
很多教程还在教 sudo apt install docker-compose,这是致命错误。Ubuntu 官方源里的 docker-compose(小写)是已废弃的 Python 版本(V1),而 starter-kit 的 docker-compose.yml 使用的是 V2 规范(如 services.xxx.deploy.restart_policy)。正确做法是:
为什么必须锁死这两个版本?因为 starter-kit 的 docker-compose.yml 中使用了 profiles 字段(用于按需启用 Ollama 或 ComfyUI),该字段在 Compose V2.15+ 才正式支持。低于此版本会直接报 yaml: unmarshal errors。我曾用 V2.12 试过,报错信息极其晦涩:“service 'n8n' has no attribute 'profiles'”,新手根本无法关联到版本问题。