1. 项目概述一站式自托管AI自动化平台的构建与实战如果你和我一样对AI和自动化充满热情但又对数据隐私、服务费用和厂商锁定感到头疼那么今天分享的这个项目绝对值得你花时间研究。它不是什么遥不可及的概念而是一个开箱即用的解决方案能让你用一条命令在自己的服务器上部署一个功能完整的AI自动化“超级工厂”。这个项目就是kossakovsky/n8n-install一个基于Docker Compose的模板它把n8n、Flowise、Ollama、向量数据库、监控栈等30多个顶尖的开源工具打包成了一个协同工作的整体。简单来说它解决了几个核心痛点第一数据主权。所有AI模型、工作流数据、用户信息都跑在你自己的服务器上没有数据出境的担忧也没有第三方窥探的风险。第二成本可控。除了服务器费用没有按API调用次数、按用户数收费的“订阅制”陷阱尤其适合高频使用AI和自动化的团队或个人。第三生态集成。它不是一个孤立的工具而是一个精心编排的生态系统。n8n负责自动化流程Ollama提供本地大语言模型Qdrant/Weaviate处理向量检索Grafana监控运行状态——它们之间通过内部网络无缝通信省去了你手动配置服务发现、网络桥接的麻烦。这个平台适合谁对于开发者它是一个极佳的AI应用开发和测试沙箱对于中小团队它是构建内部智能助手、自动化业务流程的私有化底座对于技术爱好者它是一个绝佳的“家庭实验室”可以安全地探索AI代理、RAG应用等前沿技术。接下来我将带你从零开始深入拆解这个平台的部署、配置、核心玩法以及我踩过的那些坑让你不仅能成功搭建更能真正用起来。2. 核心架构与组件深度解析这个项目的精髓在于其“乐高积木”式的架构设计。它不是把30多个服务粗暴地堆在一起而是通过Docker Compose的Profile机制和精心设计的网络、存储卷让这些服务既能独立运行又能灵活组合。理解这个架构是后续高效使用和故障排查的基础。2.1 核心服务层不可或缺的基石无论你选择部署哪些AI工具有三个服务是必须启动的它们构成了整个平台的“基础设施层”。Caddy现代反向代理与自动HTTPS网关。这是所有外部流量的统一入口。它的强大之处在于自动从Let‘s Encrypt申请和续期SSL证书让你所有的子域名如n8n.yourdomain.com,flowise.yourdomain.com都能获得有效的HTTPS加密无需手动操作。Caddy的配置非常简洁项目已经预置好了基于域名的路由规则。PostgreSQL关系型数据库。作为n8n、Supabase等服务的核心数据存储负责保存工作流定义、执行历史、用户凭证等结构化数据。项目默认配置了性能调优参数并挂载了持久化存储卷确保数据安全。Redis内存键值存储。在n8n的“队列模式”下Redis充当消息队列和临时缓存。当n8n需要异步执行耗时任务或管理工作流状态时任务会被推送到Redis队列由后台的工作者Worker消费。这种架构将Web服务器与任务执行器解耦极大地提升了系统的并发处理能力和稳定性。注意初次部署时务必确保DNS的泛解析记录*.yourdomain.com已生效并指向你的服务器IP。Caddy在启动时会尝试为每个配置的子域名申请证书如果DNS未就绪证书申请会失败导致服务无法通过HTTPS访问。2.2 可选服务层按需取用的AI工具集这是项目的亮点通过交互式向导你可以像点菜一样选择需要的服务。我将其分为几大类自动化与低代码平台n8n核心中的核心。一个可视化工作流自动化工具拥有超过400个集成节点。你可以把它理解为开源的、可自托管的Zapier或Make但功能更强大尤其擅长处理复杂逻辑和集成AI能力。Appsmith用于快速构建内部工具、仪表盘的低代码平台。如果你的n8n工作流需要配一个管理后台给非技术人员使用Appsmith是绝佳选择。NocoDB将数据库变成智能电子表格的Airtable开源替代品。适合管理由自动化流程生成的结构化数据。AI模型与智能体Ollama本地大语言模型运行引擎。支持Llama 3、Mistral、Gemma等主流模型。数据完全本地处理隐私性最佳但需要足够的GPU或CPU算力。Flowise拖拽式AI智能体构建平台。它基于LangChain让你可以通过可视化方式组装LLM、提示词、工具和记忆模块创建复杂的AI应用。与n8n是绝配n8n处理业务流程Flowise提供AI大脑。Dify另一个功能全面的AI应用开发平台更侧重于LLMOps提供了从提示词工程、RAG管道到模型评估的一站式能力。Open WebUI提供类似ChatGPT的聊天界面可以连接Ollama本地模型或外部API。是向团队展示AI能力最直观的窗口。向量数据库与RAG引擎QdrantWeaviate高性能、专为AI设计的向量数据库。用于存储文本、图像等内容的向量嵌入Embeddings实现基于语义的相似性搜索。它们是构建RAG检索增强生成应用的核心。Qdrant以速度和资源效率见长Weaviate则内置了更多AI原生功能。Supabase开源Firebase替代品除了提供PostgreSQL数据库、身份验证、实时订阅其最新版本也集成了向量搜索功能可以作为轻量级的向量存储选项。RAGFlowLightRAG开箱即用的RAG系统。它们帮你处理了文档解析、分块、向量化、检索的全流程并提供了带引用来源的问答接口。RAGFlow基于深度文档理解对复杂格式的PDF、Word支持很好。工具与数据处理Crawl4ai专为AI设计的网页爬虫能更好地处理现代JavaScript渲染的页面轻松获取训练或分析所需的数据。Docling通用文档转换器将PDF、DOCX等文件解析为干净的Markdown或JSON是构建知识库的前置利器。GotenbergPaddleOCR文档转换与OCR组合拳。Gotenberg将HTML、Word等转为PDFPaddleOCR再从PDF/图片中提取文字。LibreTranslate自托管的翻译API支持50多种语言让你在自动化工作流中轻松集成翻译能力。运维与监控GrafanaPrometheus经典的监控组合。Prometheus收集Docker容器、系统资源等指标Grafana则用丰富的仪表盘进行可视化。让你对平台运行状态了如指掌。PortainerDocker容器管理的Web UI。对于不习惯命令行操作的用户用它来查看日志、重启服务非常方便。Uptime Kuma美观易用的站点监控工具当某个服务下线时可以通过多种渠道如Telegram、邮件发送告警。Databasus专注于数据库备份与监控的自托管工具为你的核心数据再加一道保险。2.3 网络与数据流设计所有服务都运行在同一个自定义的Docker网络例如n8n-network中。这意味着内部通信直接使用服务名。例如n8n工作流里要调用Qdrant可以直接使用http://qdrant:6333这个地址无需关心其外部IP和端口。外部访问统一由Caddy代理。Caddy监听服务器的80和443端口根据访问的域名如n8n.yourdomain.com将请求转发到对应服务的内部端口如n8n的5678端口。数据持久化PostgreSQL、Redis、以及各个服务的配置数据都通过Docker的命名卷Named Volumes或绑定挂载Bind Mounts持久化在宿主机上。即使容器重建数据也不会丢失。项目创建的./shared目录是一个关键挂载点n8n容器内路径为/data/shared方便工作流与服务器本地文件交互。理解这个架构后你在部署时就能做出明智的选择如果只是体验可以只选n8n、Ollama和一个向量数据库如果要构建生产级应用那么监控、备份、高可用通过调整n8n工作者数量等服务就必须考虑在内。3. 从零开始的部署实战与精细配置理论说得再多不如动手实践。下面我将结合自己的部署经验详细拆解每一步并附上关键的注意事项。3.1 前期准备避开80%的坑很多部署失败都源于前期准备不足。请严格按照以下清单核对服务器选择系统必须是Ubuntu 24.04 LTS。其他版本或发行版可能会因依赖库版本问题导致安装脚本失败。项目社区有Arch Linux的移植版但官方支持的是Ubuntu。配置这是最容易出错的地方。官方给出的“最小配置4GB内存”是仅运行n8n、监控和Portainer的情况。如果你计划运行Ollama和多个AI服务强烈建议从8GB内存起步。我曾在4GB的机器上尝试运行OllamaLlama 3 8B模型和n8n内存瞬间被占满导致服务频繁崩溃。对于完整套件16GB内存是更舒适的选择。CPU建议2核以上磁盘空间预留60GB。网络确保服务器的80和443端口对公网开放。这是Caddy申请SSL证书的必经之路。如果你使用云服务商如AWS、GCP、阿里云还需在安全组/防火墙规则中放行这两个端口。域名与DNS配置最关键的一步你需要一个属于自己的域名例如example.com。登录你的域名注册商或DNS服务商如Cloudflare的控制面板。为你的域名添加一条A记录主机名Name填写*一个星号值Value填写你服务器的公网IP地址。这条“泛域名解析”记录意味着所有像n8n.example.com、flowise.example.com这样的子域名都会指向你的服务器。验证在部署前你可以用ping random123.yourdomain.com命令测试看是否解析到了你的服务器IP。DNS生效可能需要几分钟到几小时请耐心等待。3.2 执行安装交互式向导详解通过SSH连接到你的服务器执行以下命令开始安装git clone https://github.com/kossakovsky/n8n-install cd n8n-install sudo bash ./scripts/install.sh安装脚本会启动一个交互式向导你需要依次提供以下信息主域名输入你已完成泛解析的域名如example.com。邮箱地址用于接收Let‘s Encrypt的证书到期提醒也作为一些服务如Flowise、Supabase的初始管理员账号。OpenAI API密钥可选。如果提供会被注入到Supabase和Crawl4ai的环境变量中方便你直接使用OpenAI的模型。可以按回车跳过。是否导入n8n社区工作流输入y或n。强烈建议选择y。这300多个预置工作流是绝佳的学习资料涵盖了从社交媒体自动化到AI聊天的各种场景能让你快速理解n8n的能力边界。导入过程需要20-30分钟取决于网络。n8n工作者数量输入数字如2。这决定了能并行执行多少个工作流任务。每个工作者会自动配一个任务运行器Task Runner来执行代码节点。对于初期测试1个就够了如果预计有并发需求可以设置为2或4。服务选择向导脚本会列出所有可选服务你可以用空格键选中/取消选中用回车键确认选择。我的建议是初次部署时除了核心服务可以先勾选n8n、Ollama、Open WebUI、Portainer。等基础平台跑通后再通过更新命令添加其他服务。脚本随后会自动进行系统更新、安装Docker和Docker Compose、生成包含随机密码的.env配置文件并拉取镜像启动服务。整个过程约10-30分钟。实操心得安装过程中如果遇到Docker镜像拉取缓慢或失败通常是网络问题。可以尝试更换Docker镜像源如阿里云、中科大源。编辑/etc/docker/daemon.json文件没有则创建加入{ registry-mirrors: [https://your-mirror.mirror.aliyuncs.com] }然后重启Docker服务 (sudo systemctl restart docker)。安装成功后脚本会输出一个总结报告里面包含了所有已部署服务的访问URL和初始密码。务必立即将这个信息保存到安全的地方如密码管理器这是你首次登录各个服务的唯一凭证。3.3 初始访问与基础配置访问n8n打开浏览器访问https://n8n.yourdomain.com。使用总结报告中的邮箱和密码登录。首次登录通常会要求你修改密码。探索预置工作流在n8n主界面进入“Workflows”页面你会看到大量已导入的社区工作流。它们处于未激活状态。你可以打开任何一个查看其结构这是一个快速学习的好方法。配置Ollama模型访问https://webui.yourdomain.com首次使用需要设置管理员密码。进入后在模型下载页面选择一个模型如llama3.2:1b这个版本较小适合资源有限的服务器进行下载。下载完成后即可在聊天界面使用。连接n8n与Ollama在n8n中你可以使用“HTTP Request”节点或专门的“Ollama”节点如果已安装此社区节点来调用本地Ollama的API。地址填写http://ollama:11434内部网络地址。使用Portainer管理容器访问https://portainer.yourdomain.com首次需要设置管理员账户。之后你可以在这里直观地看到所有容器的状态、日志并进行重启、停止等操作比命令行更方便。4. 核心场景实战构建你的第一个智能工作流平台搭好了工具齐了现在我们来真的。我将通过一个完整的例子演示如何利用这个平台构建一个“智能内容摘要与归档”工作流。这个工作流会监控一个RSS源抓取新文章利用本地Ollama模型进行摘要然后将摘要和原文链接保存到Notion数据库中。4.1 场景设计与工具选型触发RSS订阅使用n8n的RSS Feed Read节点。核心处理本地LLM摘要使用n8n的HTTP Request节点调用Ollama。数据存储Notion数据库使用n8n的Notion节点。辅助工具可能需要用到“HTML Extract”节点清理文章内容。为什么选Ollama而不是OpenAI因为我们要处理的是可能包含敏感信息的RSS内容本地模型能保证数据不出境且没有API调用费用。4.2 在n8n中构建工作流创建新工作流在n8n中点击“New workflow”。设置RSS触发器从节点面板搜索并添加“RSS Feed Read”节点。在节点配置中填入你要监控的RSS源URL例如某个科技博客的Feed。将“Check Interval”设置为例如3600秒每小时检查一次。提取并清理文章内容添加“HTML Extract”节点连接到RSS节点之后。将RSS节点输出的content或link字段作为该节点的输入URL。配置CSS选择器来提取文章的正文内容。这需要一些HTML知识你可以利用浏览器的开发者工具检查元素来找到正确的选择器。例如对于许多博客选择器可能是article或.post-content。这个节点的输出将是纯文本格式的文章内容。调用Ollama生成摘要添加“HTTP Request”节点。方法POST。URLhttp://ollama:11434/api/generate。注意这里是内部Docker网络地址。Headers添加Content-Type: application/json。Body (JSON){ model: llama3.2:1b, prompt: 请用中文简要总结以下文章的核心内容不超过200字\n\n{{$json[\extractedText\]}}, stream: false }model替换成你在Open WebUI中下载的模型名。prompt这里使用了n8n的表达式{{$json[\extractedText\]}}来引用上一个节点提取的文本。提示词明确要求了中文和字数限制。这个节点会返回一个JSON响应其中包含response字段里面就是模型生成的摘要。准备写入Notion的数据添加“Set”节点或使用“Function”节点进行更复杂的处理。在这里我们将RSS中的文章标题、链接、发布时间以及Ollama生成的摘要组合成一个新的JSON对象以匹配Notion数据库的字段结构。例如{ 标题: {{$json[\title\]}}, 原文链接: {{$json[\link\]}}, 发布时间: {{$json[\pubDate\]}}, AI摘要: {{$json[\response\]}}, 状态: 待阅读 }写入Notion数据库首先你需要在Notion中创建一个数据库并设计好上述字段。在n8n中搜索并添加“Notion”节点你需要先在n8n的“Credentials”中添加你的Notion集成令牌和数据库ID。配置节点为“Create a database entry”。将上一步“Set”节点输出的整个对象映射到Notion数据库的对应属性上。测试与激活点击“Execute Workflow”按钮进行测试。观察每个节点的输入输出确保数据流正确。测试成功后保存工作流并点击右上角的“Activate”开关将其设置为“Active”。这样它就会按照你设置的间隔自动运行了。4.3 进阶引入向量数据库实现语义搜索上面的工作流只是存档。如果我们想实现“根据问题从历史文章中找出相关摘要并回答”就需要用到RAG。这时向量数据库就派上用场了。改造工作流在上述工作流的“生成摘要”步骤后新增一个分支。生成向量嵌入添加一个“HTTP Request”节点调用本地或云端的嵌入模型API例如可以使用Supabase的pgvector扩展或直接调用Qdrant的嵌入API。将文章摘要文本转换为向量。存储向量再添加一个“HTTP Request”节点将向量、以及对应的文章元数据标题、链接等存储到Qdrant或Weaviate中。构建查询工作流创建另一个独立的工作流由一个Webhook触发。当用户提出问题时工作流先将问题转换为向量然后在向量数据库中进行相似性搜索找到最相关的几篇文章摘要最后将这些摘要作为上下文连同问题一起发送给Ollama生成最终答案。通过这个例子你可以看到n8n作为“胶水”如何将Ollama模型、Qdrant向量存储、Notion应用串联成一个完整的智能应用。而Flowise则可以让你以更可视化的方式构建“根据问题检索并回答”的AI链。5. 运维、监控与故障排查指南将平台跑起来只是第一步稳定运行才是关键。项目内置的监控栈和一系列Make命令让日常运维变得简单。5.1 使用Makefile进行日常管理项目根目录下的Makefile封装了最常用的Docker Compose命令。查看状态与日志make status # 查看所有容器状态 make logs sn8n # 实时查看n8n容器的日志排查错误非常有用 make monitor # 实时监控CPU和内存使用情况服务启停与更新make stop # 停止所有服务 make start # 启动所有服务 make restart # 重启所有服务make update # 更新所有服务到最新版本会从GitHub拉取最新配置重要提示make update会基于上游仓库的最新代码更新你的本地配置。如果你在docker-compose.yml或.env文件中做过自定义修改这些修改可能会被覆盖。执行前建议备份你的自定义文件。系统诊断与清理make doctor # 运行全面的诊断检查DNS、SSL证书、容器健康、磁盘空间等 make clean # 清理无用的Docker镜像、容器和卷释放磁盘空间5.2 通过Grafana监控平台健康访问https://grafana.yourdomain.com使用安装报告中的凭据登录。默认已经配置好了Prometheus数据源和几个仪表盘。Docker监控查看所有容器的CPU、内存、网络IO使用情况。如果某个服务如Ollama内存持续占满这里会一目了然。系统资源监控查看服务器的整体CPU负载、内存使用、磁盘IO和空间。这是判断是否需要升级服务器配置的依据。自定义监控你可以在Prometheus中配置新的抓取目标或者在Grafana中导入更多社区仪表盘来监控业务指标例如n8n工作流的执行成功率、平均耗时等。5.3 常见问题与解决方案实录以下是我在部署和使用过程中遇到的实际问题及解决方法问题1访问服务时浏览器提示“不安全连接”或“证书无效”。排查首先运行make doctor检查SSL证书状态。最常见的原因是DNS泛解析未生效或配置错误。使用dig A yourdomain.com和dig A *.yourdomain.com命令确认它们都解析到了正确的服务器IP。解决等待DNS生效最多24小时或检查域名解析商的控制面板。确保Caddy容器日志docker logs n8n-install-caddy-1中没有证书申请失败的错误。问题2n8n工作流执行缓慢或任务堆积。排查通过make monitor或Grafana查看系统资源。如果CPU或内存饱和可能是资源不足。通过Portainer或docker stats查看单个容器资源占用。解决升级服务器这是最直接的方法。优化配置减少同时运行的Ollama模型数量在n8n设置中调整“并发执行数”限制。扩容工作者如果你最初只设置了1个n8n工作者可以修改.env文件中的N8N_WORKERS变量然后运行make restart重启服务。注意更多工作者需要更多内存。问题3Ollama模型加载失败或响应极慢。排查检查Open WebUI界面或Ollama容器日志 (make logs sollama)。常见错误是内存不足OOM。解决尝试下载更小的模型如llama3.2:1b或phi3:mini。为Docker分配更多内存如果使用虚拟机或云服务器。考虑使用CPU运行模式虽然慢但内存要求低或者使用外部GPU服务器通过API调用。问题4make update失败提示Git冲突或文件被修改。原因你本地修改了项目文件如docker-compose.yml与上游更新冲突。解决# 备份你的自定义配置如 .env, 自定义的docker-compose.override.yml cp .env .env.backup # 强制重置到上游最新版本这将丢失所有本地修改 git fetch origin git reset --hard origin/main # 恢复你的环境变量 cp .env.backup .env # 重新运行更新 make update最佳实践不要直接修改docker-compose.yml。对于自定义配置应创建docker-compose.override.yml文件Docker Compose会自动合并。项目本身的配置更新不会影响这个覆盖文件。问题5如何添加自定义的Python依赖或脚本项目提供了“Python Runner”这个可选服务。在安装或更新时在服务选择向导中勾选它。之后你可以在项目根目录的python-runner/文件夹下放置你的.py脚本并在requirements.txt中列出依赖。n8n的“Execute Command”节点就可以通过docker exec或内部HTTP调用如果配置了来运行这些脚本实现更复杂的自定义逻辑。这个平台就像一套强大的乐高套装n8n-install项目提供了说明书和所有基础模块。真正的价值在于你如何利用这些模块搭建出解决自己实际问题的独特创造。从简单的自动化提醒到复杂的多智能体协作系统可能性只受限于你的想象力。我的经验是从小处着手从一个具体、可衡量的任务开始构建你的第一个工作流在过程中熟悉各个组件的特性逐步迭代最终你会拥有一个完全受控于自己的、强大的数字助手生态。