这个项目能做什么

## 项目简介 `bsz`(Busuanzi)是一款自托管的访客统计系统,兼容不蒜子(Busuanzi)统计接口。后端使用 Rust 编写,编译后仅产出一个二进制文件,且不依赖任何外部库,极大降低运维成本。前端采用 bun workspaces,提供独立的介绍页(Landing)和可选的管理后台(Admin),可以根据需求单独部署。 ## 主要特性 - **单二进制、零依赖**:后端仅需一个可执行文件,部署在 VPS、Docker 或系统服务中即可。 - **兼容不蒜子 API**:现有使用不蒜子脚本的网站只需更改统计接口地址即可迁移。 - **前后端完全解耦**:后端提供 JSON API,Landing 为纯静态页面,Admin 为 SPA,三者可以独立部署或组合使用。 - **可选管理后台**:通过设置 `ADMIN_TOKEN` 启用 Admin API,未配置时后台路由不存在,安全性更高。 - **轻量前端**:Landing 使用纯静态资源,可托管在 GitHub Pages、Cloudflare Pages 等静态站点;Admin 使用 Vite + React(或类似)构建的单页应用。 - **易于本地调试**:提供 `cargo run` 与 `bun run dev:*` 快速启动脚本,适合开发与演示。 ## 架构说明 ``` . ├── backend/ # Rust 后端,提供 /api/* 统计接口及可选 /api/admin/* 管理接口 └── frontend/ # bun workspaces └── packages/ ├── shared/ # UI 组件、主题、Tailwind 预设 ├── landing/ # 介绍页(apex),纯静态 └── admin/ # 管理后台 SPA(dash),可选部署 ``` - **backend**:基于 `actix-web`(或类似)实现,默认仅挂载统计路由。若环境变量 `ADMIN_TOKEN` 非空,则额外挂载管理路由。 - **landing**:仅包含静态 HTML、CSS、JS,展示访客计数、文档链接以及进入管理后台的入口。 - **admin**:登录后可查看实时访客数据、历史统计、IP 黑名单等功能,所有请求均通过后端的 Admin API 进行鉴权。 ## 快速上手(5 分钟跑通) ```bash # 1. 启动后端(Terminal 1) cd backend && ADMIN_TOKEN=test-token cargo run # 2. 启动 Landing(Terminal 2) cd frontend && bun install bun run dev:landing # 访问 http://localhost:12702 # 3. 启动 Admin(Terminal 3) bun run dev:admin # 访问 http://localhost:12705 ``` ## 部署指南 ### 后端部署 - **二进制**:`cargo build --release` 生成 `target/release/bsz`,复制到服务器,配置 `ADMIN_TOKEN`(可选)和 `PORT` 等环境变量。 - **systemd**:提供示例 unit 文件,可实现开机自启、日志管理。 - **nginx 反向代理**:将 `/api/` 路径转发至后端,静态资源可交由 CDN 托管。 ### Landing 部署 ```bash bun run build:landing # 产物位于 frontend/packages/landing/dist/ # 将 dist/ 目录上传至 GitHub Pages、Cloudflare Pages 或任意静态托管服务 ``` ### Admin 部署 ```bash VITE_API_BASE_URL=https://api.example.com \ bun run build:admin # 产物位于 frontend/packages/admin/dist/ # 同样可部署至静态托管平台,访问时填写后端 URL 与 ADMIN_TOKEN 完成绑定 ``` ## 配置说明 - `ADMIN_TOKEN`:非空时后端挂载 `/api/admin/*`,前端 Admin 登录时使用同一 token 进行鉴权。 - `VITE_API_BASE_URL`:Admin 前端构建时注入后端 API 基础地址。 - 其他环境变量(如 `PORT`、`RATE_LIMIT`)可在 `backend/.env` 中查看默认值。 ## 许可证 本项目采用 MIT 许可证,允许自由使用、修改和分发。 --- 如需更详细的文档,请参考仓库内的 `backend/README.md`、`frontend/packages/landing/README.md` 与 `frontend/packages/admin/README.md`。