独立开发·阅读约 3 分钟·
一条提示词跑完整个开发流程:我花 20 英镑/月搭了个全自动 AI 软件工厂

一条提示词跑完整个开发流程:我花 20 英镑/月搭了个全自动 AI 软件工厂

一位开发者用 eBay 二手服务器 + Coolify + Forgejo + Hermes 搭出完全自托管的 AI 开发流水线:一条提示词就能让 AI 自动完成建仓库、写代码、跑 CI、部署上线全流程,成本只有每月 20 英镑的 Codex 订阅。

原文来源:Building an (almost) fully self-hosted, sandboxed, agentic software factory — 一位开发者用自托管工具链搭建 AI 自动开发流水线,一条提示词完成从建仓库到部署上线的全部环节

Jake Saunders 最近迷上了一种新的开发方式:需要什么小工具,直接一句话让 AI 建。起因是他在健身房想要个重量记录 App,翻了一圈应用商店,都要 12 英镑/月订阅——这种 CRUD 级别的应用凭什么按月收费?他用 Claude 一次性生成了一个,还挺好用。但问题来了:让 LLM 以自动模式拥有他电脑的 root 权限,这事儿怎么想都不对劲。

于是他给自己出了道题:能不能搭建一个完全远程的 agentic 开发环境,从结构上把 LLM 关进笼子里,而不是靠信任? 他要的流程是:给一条指令,AI 自主完成整个软件开发生命周期——调研技术栈、规划并编写代码和测试、提交 Git 并跑通 CI、部署到"生产"服务器(含数据库、可观测性、带 SSL 的域名)。全部跑在自己家里的服务器上,不额外产生云账单。唯一的持续成本是 20 英镑/月的 Codex 订阅。

服务器:一台"可牺牲"的 eBay 二手货

Jake 家里有两台服务器。底下那台 2014 年的双核 i3 已经跑了五年 homelab,稳稳当当托管着这个博客和 45 个 Docker 容器,从 Pi-hole 到完整的 Prometheus / Loki / Grafana 监控栈,还从路由器转发了 443 端口。LLM 要是把它搞坏了,他会很心疼——所以这台不能用来跑实验。

上面那台是 2021 年的第十代 i7,32GB 内存,从 eBay 全新买回来,上面啥都没有。完美。

这个选择背后是一条明确的安全哲学:机器是可牺牲的。Hermes(那个 AI 助手)就算真的 rm -rf /,最坏的结果是花几个小时重装系统。失败模式从"发现 LLM 热情地重排了我的主力笔记本"变成"重装一台 eBay 二手服务器 + 轮换几个密钥"。后者显然好得多。

—— 广告 ——

技术栈:Coolify 打底,全套自托管

核心开发栈通过 Coolify 自托管(一款基于 Docker 的 Heroku 风格 PaaS)。推理和 Tailscale、Telegram、DNS、ACME 这类集成仍走外部服务——推理也可以自托管,但 Jake 没有那个硬件,而且"更愿意让 OpenAI 补贴我的实验"。

完整组件清单:

组件作用
Pi-hole本地 DNS 规则,顺带少看点烂广告
Tailscale让家庭网络跟着人走
Coolify自托管 PaaS,基于 Docker
Forgejo(含 runners)自托管 Git 和 CI
Hermes(含 WebUI)OpenClaw 风格虚拟助手,用 Codex 做推理
Telegram在厕所或任何地方跟 Agent 聊天
Firecrawl(自托管)Agent 与网页之间的抓取/翻译层
Porkbun + Let's Encrypt域名和即时 SSL 证书

网络设计:无公网入口 + DNS-01 证书

安全的第一道防线是没有任何外部入口。老服务器有 443 端口转发,新服务器没有——这砍掉了巨大的攻击面,也免去了互联网背景辐射(那些对着每个 DNS A 记录试探 /wp-admin 的扫描器)。

但没有入口,怎么在手机上访问新应用?怎么给 https://cool-new-app.internal.jakeshomelab.me 这种虚荣 URL 生成 SSL 证书?

答案是 Tailscale + Pi-hole 组合。Tailscale 以老服务器为出口节点,出门在外时把流量路由回家庭网络;Pi-hole 用 dnsmasq 规则做自定义 DNS:

code
address=/internal.jakeshomelab.me/192.168.1.201

任何请求 *.internal.jakeshomelab.me 的流量都会解析到新服务器,Coolify 的反向代理接住并分发到各个服务。

SSL 证书部分是最巧妙的一环。 常规做法是 Caddy/Traefik 配合 Docker labels 自动申请证书,但这需要一条指向服务器 IP 的公开 A 记录。Jake 不想让 my-service.internal.jakeshomelab.me 和自家 IP 产生公开关联——不管别人能不能访问。他要的是一张"幽灵服务"的证书。

解法是 DNS-01 挑战:在 Porkbun 买域名、生成 API 密钥(写权限)配进 Coolify 环境变量、修改 Coolify 的 Docker Compose 让 Traefik 用 lego 走 Porkbun API。之后每次注册新 URL,Traefik 会通过 Porkbun API 创建一条 _acme-challenge.my-service.internal.jakeshomelab.me 的 TXT 记录,Let's Encrypt 验证后签发证书,Traefik 再把记录删掉。

结果:你得到一个只在 tailnet 内可达的合法 HTTPS 地址,全程没有任何公开 A/AAAA 记录指向服务。主机名可能会出现在公开的证书透明度日志里,但服务本身只有 tailnet 内能访问。最棒的是 Coolify 全程自动——Agent 可以在任意子域名创建服务,证书问题"魔法般地"自己解决了。

开发栈:Forgejo、Hermes 和 Coolify

Forgejo 负责代码托管和 CI。不用 GitHub 的原因很实在:把 GitHub token 交给这台机器等于自毁隔离;API 和 CI 分钟限额扛不住软件工厂的规模;而且"现在 GitHub 三天两头宕机"。Forgejo 是优秀的自托管替代,Docker Compose 一条命令起来,注册 runner 多花点功夫但文档齐全。

Hermes 是 OpenClaw 风格的 AI 助手,几个特性让 Jake 觉得顺手:

  • Web UI:ChatGPT 式的界面,笔记本上就能用
  • 共享文件系统:工作区挂载到 Docker 主机并走 Samba 共享,人和 Agent 用同一份文件,不用来回复制粘贴 Markdown 和代码
  • Telegram 集成:手机随时和 Agent 对话,两分钟配好,不需要登录凭据
  • 自建 skills:Hermes 能自己创建和注册 skill——找不到好用的 Coolify skill?它自己读文档、看 MCP,给自己写了一个
  • Firecrawl:自托管的 Firecrawl 给 Agent 提供好得多的 SERP 数据和规模化网页抓取能力

Coolify 是粘合一切的胶水:自托管 PaaS,底层就是 Docker。Jake 最爱的几个特性:现有部署基本开箱即用,Coolify 搞不定的怪事可以 docker exec 直接从笔记本进去;SSL/路由栈就是前面讲的那套;自带一堆常用应用的一键部署配方(Postgres、Redis、Hermes、Forgejo);Postgres 备份到 S3 三次点击搞定;GitHub webhook 实现 push 到 main 自动部署。

实测:一条提示词,从零到部署

演示的起点是这条提示词:

请帮我建一个追踪卡路里摄入的应用,类似 MyFitnessPal,但要带一个表单,可以添加具体食物和餐食,方便之后快速选择。你的任务是:把它建出来,提交到新仓库并带测试,用 CI 测试,部署到 http://calories.internal.jakeshomelab.me。我希望它是全栈 SvelteKit 应用,用 Drizzle 和 Postgres 做数据库层,Tailwind 做 CSS,移动优先。部署用 docker 和 docker compose,自己部署 Postgres 实例。

然后 Agent 就自己干起来了:

  1. 创建新 Git 仓库,初始化 SvelteKit、Drizzle、Postgres、Tailwind
  2. 写应用和测试,按合理的阶段分批提交
  3. 创建 CI 流水线
  4. 逐个解决测试失败直到 CI 变绿
  5. 用 Docker Compose 容器化应用和它自己的 Postgres 实例
  6. 部署到 Coolify 的专属 URL

全程没有第二条提示。没有帮它解决失败的测试,没有把错误信息复制回聊天框。它就那么一直干到应用跑起来为止。

Jake 试用时发现提交数据有 CSRF 问题,补了一条提示。Agent 诊断问题、修复、补了回归测试、重新部署——闭环完成。

这就是他想要的循环:提示、仓库、代码、测试、CI、部署、修 bug。应用本身不复杂,但"从一段话到经过测试的已部署软件"还是让他觉得像魔法。

关于隔离的诚实思考

Jake 在文末说了几句大实话:完全 agentic 开发和安全性之间永远是权衡。这个演示例子有点刻意——应用完全在隔离环境里跑。真实世界有用的软件都要和其他软件对话,意味着交出 API 密钥,而每多一个密钥,沙箱就多一个洞

就算在现在的设置下,Hermes 依然可以:炸掉新服务器和上面的一切、删除仓库数据库和部署、泄露或滥用交给它的任何凭据、像年底绩效考评一样烧推理 token、发起随机出站请求下载互联网塞给它的任何东西、通过防火墙允许的路径碰网络里的其他设备。

所以它并不是无害的。Jake 做的是让机器可牺牲,并大幅缩小"重要东西"的触及范围。下一步的明确方向:把机器放到独立 VLAN 并显式阻断对家庭网络其他部分的访问;把每个凭据的权限范围缩到提供商允许的最小值并定期轮换;自动化备份让重装整台机器成为一键操作;在它做任何真正公开或难以撤销的事情前要求审批。

但他也承认,审批门槛加太多,"魔法般的自主软件工厂"就又变回了一堆要填的表单。在"每五分钟需要我一次"和"手握发射密码"之间找到那个有用的点,是下一个实验。

分享到
微博Twitter

© 2026 四月

原文链接:https://www.aprilzz.com/indie/self-hosted-agentic-software-factory