外观
三个项目的架构
斑马小铺由三个独立的项目组成,它们放在同一个代码仓库里:
| 项目 | 目录 | 是什么 | 谁在用 | 开发端口 |
|---|---|---|---|---|
| 后端 API | backend/ | Rust 编写的服务器程序,负责所有业务逻辑和数据库 | 前台、后台、其他对接站点 | 8081 |
| 用户前台 | storefront/ | 买家看到的商店网页 | 买家、分销商 | 5185 |
| 管理后台 | admin/ | 站长用的管理网页 | 你和你的管理员 | 5186 |
text
买家浏览器 管理员浏览器
│ │
┌────────▼────────┐ ┌────────▼────────┐
│ 用户前台 (静态网页) │ │ 管理后台 (静态网页) │
└────────┬────────┘ └────────┬────────┘
│ /api/v1/... (JSON) │
└──────────────┬─────────────┘
┌───────▼────────┐ 其他发卡站
│ 后端 API │◄──────(对接协议)
│ zebra-store 程序 │
└───────┬────────┘
│
SQLite / MySQL / PostgreSQL为什么前后端分开
- 前台和后台只是静态网页(HTML + JS + CSS),打包后就是一个
dist文件夹, 放在任何 Web 服务器(Caddy、Nginx)上就能访问,不占服务器资源。 - 网页通过
/api/...地址和后端通信。反向代理负责把/api请求转给后端, 其余请求返回静态网页。具体配置见各部署方式页面,例如 Caddy 部署。 - 后端是一个可执行文件(
zebra-store),启动时自动建表,没有别的依赖。
后端里面有什么
后端按业务模块组织:身份与权限、商品目录、内容、营销、订单、支付、钱包、推广、分销、对接、通知、仪表盘。 它还自带一个后台任务队列(存在数据库里),负责这些事情:
- 订单超时自动取消,释放库存;
- 付款后自动发卡;
- 定时同步上游商品的价格和库存;
- 向上游提交采购单、查询采购结果;
- 发邮件、发 Telegram 通知;
- 分销利润到期结算。
原项目的任务队列必须依赖 Redis,斑马小铺改成了数据库队列,所以不装 Redis 也能完整运行。
分站是怎么实现的
分站不需要单独部署。所有分站和主站共用同一个后端和同一套前台网页, 后端根据访问的域名(HTTP Host 头)判断当前是主站还是某个分销商的分站, 然后返回对应的站点名、Logo 和加价后的价格。详见 分站。