
一条提示词跑完整个开发流程:我花 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:
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 就自己干起来了:
- 创建新 Git 仓库,初始化 SvelteKit、Drizzle、Postgres、Tailwind
- 写应用和测试,按合理的阶段分批提交
- 创建 CI 流水线
- 逐个解决测试失败直到 CI 变绿
- 用 Docker Compose 容器化应用和它自己的 Postgres 实例
- 部署到 Coolify 的专属 URL
全程没有第二条提示。没有帮它解决失败的测试,没有把错误信息复制回聊天框。它就那么一直干到应用跑起来为止。
Jake 试用时发现提交数据有 CSRF 问题,补了一条提示。Agent 诊断问题、修复、补了回归测试、重新部署——闭环完成。
这就是他想要的循环:提示、仓库、代码、测试、CI、部署、修 bug。应用本身不复杂,但"从一段话到经过测试的已部署软件"还是让他觉得像魔法。
关于隔离的诚实思考
Jake 在文末说了几句大实话:完全 agentic 开发和安全性之间永远是权衡。这个演示例子有点刻意——应用完全在隔离环境里跑。真实世界有用的软件都要和其他软件对话,意味着交出 API 密钥,而每多一个密钥,沙箱就多一个洞。
就算在现在的设置下,Hermes 依然可以:炸掉新服务器和上面的一切、删除仓库数据库和部署、泄露或滥用交给它的任何凭据、像年底绩效考评一样烧推理 token、发起随机出站请求下载互联网塞给它的任何东西、通过防火墙允许的路径碰网络里的其他设备。
所以它并不是无害的。Jake 做的是让机器可牺牲,并大幅缩小"重要东西"的触及范围。下一步的明确方向:把机器放到独立 VLAN 并显式阻断对家庭网络其他部分的访问;把每个凭据的权限范围缩到提供商允许的最小值并定期轮换;自动化备份让重装整台机器成为一键操作;在它做任何真正公开或难以撤销的事情前要求审批。
但他也承认,审批门槛加太多,"魔法般的自主软件工厂"就又变回了一堆要填的表单。在"每五分钟需要我一次"和"手握发射密码"之间找到那个有用的点,是下一个实验。
© 2026 四月
原文链接:https://www.aprilzz.com/indie/self-hosted-agentic-software-factory
相关文章
Craftplan:一位开发者为了面包店妻子打造的开源生产管理工具
一位开发者为了帮妻子管理面包店的生产排程,从零构建了自托管 ERP 系统 Craftplan,并在 GitHub 上开源,获得了 1100+ Star。
独立开发者的省钱方案:月租不到 10 欧元的全欧盟技术栈
云服务器、邮件、分析、监控、支付、认证、CDN——独立开发者在验证想法阶段,能不能把整条基础设施的月成本压到 10 欧元以内?这篇指南给出了逐项对比和推荐。
野心和当爸爸,必须二选一吗?一个 YC 创始人的回答
HN 850 分热帖:作者经历过 YC、曾在工作和育儿之间挣扎,发现伟大创始人的传记里藏着大量糟糕父亲的故事,他拒绝'把育儿外包'的选择,重新定义了自己的野心。