麦芽的编程笔记
2026-10-26

用 WorkBuddy,三天从 0 写出一个多租户城市站CMS

一个平台、多家企业、上百个城市分站。这篇记录我用 WorkBuddy 结对编程,三天完成数据层、门户、部署与子域名上线的全过程。

WorkBuddyCodeIgniterAI编程

这是什么

城市站CMS 是我从 jamCMS 里抽出来的独立项目:一套多租户建站系统,每家企业一个独立后台,在省 / 市 / 区县三级里任选地区,批量生成 slug-hash 唯一地址的城市分站。

这篇不是教程,是一份工作日志——记录我和 WorkBuddy(AI 结对编程)怎么把这三天排满的。

Day 1:数据层与部署

第一天的目标很明确:先把线上跑起来,再谈功能。改动包括部门署结构重排(根目录部署:app / vendor / writable 在 Web 根之外,public 只放入口),加一版根目录 nginx 配置;数据侧调整 Geo 的路径剥离、联系表单跳转、后台链接模式。

当天最大的坑是部署方式:没有 SSH,只能在面板上传 zip、用带 token 的一次性 PHP 脚本解压和搬移。脚本用完即删,这条路径后来复用了三次。

Day 2:门户对齐

第二天做平台上层的行业门户:新增 Portal 控制器和整套视图,头部渐变、搜索条、焦点区、资讯三板块、侧栏地区导航 / 行业专题 / 热度排行、最新站点、四栏页脚。数据层加了行业专题表、阅读量字段和企业推荐位,另立了三家演示企业让「企业名录」不再只有一个品牌。

原则只有一条:复刻版式和信息架构,不搬运别人的文案、图片和内容。

Day 3:子域名与正式上线

第三天解决两件事:城市化址器和收录。城市站链接支持独立域名 > 子域名 > /s/ 路径 > 查询式四种模式,一条 env 配置切换;正式站统一去掉 noindex、robots 拦截和测试横幅,页脚带备案号。

排查清单也都真实发生过:泛解析对权威 DNS 查出来还是 NXDOMAIN(记录没保存成功)、宝塔强制 HTTPS 会把没有证书的泛域名 307 到打不开的 https、nginx 会优先命中静态 robots.txt 导致动态配置不生效。

和 WorkBuddy 结对的几点体会

  • 指令比对话重要:给清文件路径、期望行为和验证命令,一轮就能落地;含糊的需求要靠来回追问补齐,反而更慢。
  • 让它先写验证再写实现:PHPUnit、healthcheck、逐页 curl,改坏了当场就能发现。
  • 大改动先在本地跑通再上线上,线上只做增量替换——三天里线上没有断过一次。

三天结束时的状态:各家租户内容齐备、门户 / 城市站 / 后台全部可访问。上线后又做了几轮调整:先把临时演示租户整体下线,随后按真实品牌重新上了四个租户(三家工业门 + 一家称重设备),再把地区库补到街道级、按省 / 市 / 区县 / 街道四级全量铺站——现在 4 家企业、179,344 个城市站、358,821 篇内容、16 款带图产品、12 个行业专题。


继续阅读:

泛域名部署的三个坑:NXDOMAIN、强制 HTTPS 和静态 robots.txt

单文件 SQLite + 根目录部署:一套更省心的 PHP 站点结构

多租户城市站的数据模型:一家企业和它的几十个分站怎么存

城市分站渲染引擎:一套模板是怎么替换占位符产出这批站的

批量生成不要变成内容工厂:地区站点的内容规则

和 AI 结对编程五条纪律:怎么让它产出可直接上线的代码

上线清单:正式站切换那天我逐项查了什么