generated from dellevin/template
66 lines
1.1 KiB
Markdown
66 lines
1.1 KiB
Markdown
# MookNote 用户统计服务
|
||
|
||
## 部署
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
cd server
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 2. 启动服务
|
||
|
||
```bash
|
||
python app.py
|
||
```
|
||
|
||
默认监听 `0.0.0.0:5000`,可通过环境变量 `PORT` 修改端口。
|
||
|
||
### 3. 生产环境部署
|
||
|
||
推荐使用 gunicorn:
|
||
|
||
```bash
|
||
pip install gunicorn
|
||
gunicorn -w 2 -b 0.0.0.0:5000 app:app
|
||
```
|
||
|
||
或使用 systemd 设为开机自启。
|
||
|
||
## API
|
||
|
||
### POST /api/heartbeat
|
||
心跳上报,App 启动时和每 5 分钟调用一次。
|
||
|
||
请求体:
|
||
```json
|
||
{ "device_hash": "设备匿名标识" }
|
||
```
|
||
|
||
### GET /api/stats
|
||
获取统计数据。
|
||
|
||
响应:
|
||
```json
|
||
{ "total_users": 10, "online_users": 3 }
|
||
```
|
||
|
||
- `total_users`: 历史总设备数
|
||
- `online_users`: 最近 5 分钟内有心跳的设备数
|
||
|
||
## 数据存储
|
||
|
||
SQLite 数据库 `stats.db`,结构:
|
||
|
||
```sql
|
||
CREATE TABLE devices (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
device_hash TEXT UNIQUE NOT NULL, -- SHA256 哈希后的设备标识
|
||
first_seen TEXT NOT NULL, -- 首次出现时间
|
||
last_seen TEXT NOT NULL -- 最后心跳时间
|
||
);
|
||
```
|
||
|
||
所有数据均为匿名,不包含任何设备原始信息。
|