Skip to content

三个项目的架构 ​

斑马小铺由三个独立的项目组成,它们放在同一个代码仓库里:

项目目录是什么谁在用开发端口
后端 APIbackend/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 和加价后的价格。详见 分站。

斑马小铺 Zebra Store:dujiao-next 的 Rust + Vue 3 复刻版