水无定形,遇器成形

底座随业务成形,而不是业务迁就底座

多租户 SaaS 模块化单体:内核与基础设施不含业务代码,业务以模块挂载、按租户开关、单进程部署。

基础设施模块
8 个开箱可用
部署形态
单进程 · Docker Compose
租户隔离
Prisma 层 fail-closed
  • 内核不依赖业务

    HTTP 栈、认证、租户上下文、模块加载器、事件总线都在内核里,业务代码一行不掺。换业务不用动底座。

  • 模块即插即用

    每个模块自带 server 路由、client 页面与 shared 契约,注册进两处 enabled-modules 即上线,移除同样干净。

  • 按租户开关

    模块与功能项按租户开通:未开通就不挂路由、不进侧栏、不产生数据,配额超限由内核统一拦截。

  • 多租户隔离是强制的

    租户守卫在 Prisma 层 fail-closed:模型没登记就启动失败,越权查询还有 lint 与运行时双重兜底。

  • 可观测性内建

    审计日志、错误日志、慢查询看板、后台任务中心开箱即用,不用等到出事才补监控。

  • 单进程部署

    编译期组装、单进程运行,生产用 Docker Compose 交付。没有微服务的运维税,也没有低代码的天花板。

基础设施开箱即用

认证、租户、权限、审计、通知、任务、可观测性——这些每个 SaaS 都要重写一遍的东西,底座已经写好了,而且都是可开关的模块而非硬编码。

  • user

    认证与 JWT 双 Token

  • platform

    租户、套餐与配额控制台

  • rbac

    PBAC 角色与权限

  • audit

    写操作审计日志

  • notification

    站内通知

  • background-job

    BullMQ 任务中心

  • error-log

    错误日志与查询 API

  • slow-query

    慢查询归因看板

技术栈没有惊喜

全是主流且长期维护的选择:招人好招,出问题搜得到答案,升级路径清晰。底座的价值在边界与约束,不在堆新框架。

读文档
后端
Fastify 5 · TypeScript 6 · Prisma 7
数据
PostgreSQL 16 · Redis 7 · BullMQ
前端
React 19 · Vite 8 · React Router v8 · TanStack
UI
shadcn/ui · Tailwind CSS 4
部署
Docker Compose · 宿主机 Nginx

先把底座跑起来,再谈业务

本地 5 分钟起服务,生产一条命令部署。免费版可以一直用下去。