这个项目能做什么
## 项目简介
`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`。
评论
0 评分人数达到10人后显示
登录后参与讨论。