为什么做兰台
大多数“全栈模板”把前后端放在两个仓库里:类型各写一份、请求层各封一套、部署要维护 Node 与 Go 两套运行时。兰台反过来做——一个仓库、一个二进制、一份配置,把多端交付的固定成本压到最低。
后端是 GoFrame 主服务与独立的更新分发服务;前台包括 Element Plus 管理端、Naive UI 云阁 Web、uni-app 移动端。三端构建产物先组装到 resource/public,再由 gf build --ps 嵌入二进制。改动前端需要重新构建,这是单文件交付的代价,也是它最简单的地方。
几个关键取舍
- 双域 JWT 隔离:
/api/v1/admin/*与/api/v1/app/*使用不同的受众,管理端令牌不能打业务接口。 - goose 迁移而不是自动同步:生产 DDL 必须可审计、可回滚;开发期才允许自动同步。
- 更新服务独立部署:APK 下载是长带宽、发布节奏独立,拆开后不影响业务 API。
- 内嵌资源优先:改了
resource/public却没有重新构建,运行时会继续读旧资源——这是最容易踩的坑之一。
现状
兰台仍在持续迭代,主要精力放在移动端更新链路、权限模型与部署体验上。它是一个内部平台型项目,演示与接入需要单独沟通。
02 / CAPABILITIES
它能做什么。
01
单仓多端
后端、管理端、云阁 Web 与移动端放在同一个仓库,共享类型、请求层与构建约定。
02
双域认证
管理端与业务端使用独立的 JWT 受众,令牌不能跨域使用,避免权限越界。
03
三段式权限
用“域:资源:操作”描述权限点,在线授权后实时生效,不需要重新登录。
04
独立更新分发
APK 与 wgt 的检测、灰度、签名下载与事件回收拆成独立服务,不占用业务 API。
05
可观测性
结构化日志、Prometheus 指标、操作审计与按日滚动日志,排障时能还原链路。
06
单文件部署
三端静态产物嵌入 Go 二进制,生产环境只需要二进制与一份配置文件。
