119 lines
3.1 KiB
Markdown
119 lines
3.1 KiB
Markdown
# SmartUp — API 上游管理与 Webhook 通知系统
|
||
|
||
SmartUp 是一个独立的 Web 后台,用于管理多个 API 上游的分组倍率监听,并通过 Webhook(通用 JSON / 钉钉机器人)发送变更通知。
|
||
|
||
## 功能
|
||
|
||
- **上游管理**:支持 none / bearer / api_key / 邮箱密码 四种认证方式
|
||
- **定时检测**:每个上游独立配置检测间隔,APScheduler 后台运行
|
||
- **倍率快照**:检测变化后保存快照,diff 比对历史
|
||
- **Webhook 通知**:支持通用 JSON 和钉钉机器人(带签名)
|
||
- **通知日志**:记录每次发送结果,支持筛选查看
|
||
- **自定义页面**:支持外部控制台入口管理
|
||
|
||
## 技术栈
|
||
|
||
- 后端:FastAPI + SQLite + APScheduler
|
||
- 前端:Vue 3 + Element Plus + Vite
|
||
- 部署:Docker Compose 单容器
|
||
|
||
## 快速部署
|
||
|
||
### 1. 准备配置文件
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
# 编辑 .env,至少填写 ADMIN_PASSWORD 和 JWT_SECRET
|
||
```
|
||
|
||
### 2. 启动
|
||
|
||
```bash
|
||
docker compose up -d --build
|
||
```
|
||
|
||
首次启动时自动:
|
||
- 创建 SQLite 数据库(`./data/app.db`)
|
||
- 初始化管理员账号
|
||
|
||
### 3. 访问
|
||
|
||
打开浏览器:http://localhost:8899
|
||
|
||
默认账号:`.env` 中配置的 `ADMIN_EMAIL` / `ADMIN_PASSWORD`
|
||
|
||
## 本地开发
|
||
|
||
### 后端
|
||
|
||
```bash
|
||
cd backend
|
||
python -m venv venv && source venv/bin/activate
|
||
pip install -r requirements.txt
|
||
|
||
# 创建 .env(可复制根目录的 .env.example)
|
||
cat > .env << 'EOF'
|
||
ADMIN_EMAIL=admin@smartup.local
|
||
ADMIN_PASSWORD=dev123
|
||
JWT_SECRET=dev-secret
|
||
DATABASE_URL=sqlite:///./data/app.db
|
||
EOF
|
||
|
||
mkdir -p data
|
||
uvicorn app.main:app --reload --port 8000
|
||
```
|
||
|
||
### 前端
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run dev # 代理到 localhost:8000
|
||
```
|
||
|
||
## 数据备份
|
||
|
||
SQLite 数据库位于 `./data/app.db`,直接复制即可备份:
|
||
|
||
> **WAL 模式说明**:启用 WAL 后,备份前请先执行 checkpoint 将 WAL 合并入主库:
|
||
> ```bash
|
||
> sqlite3 ./data/app.db "PRAGMA wal_checkpoint(TRUNCATE);"
|
||
> ```
|
||
|
||
```bash
|
||
cp ./data/app.db ./data/app.db.$(date +%Y%m%d)
|
||
```
|
||
|
||
## 环境变量
|
||
|
||
| 变量 | 说明 | 默认值 |
|
||
|------|------|--------|
|
||
| `ADMIN_EMAIL` | 管理员邮箱 | `admin@smartup.local` |
|
||
| `ADMIN_PASSWORD` | 管理员密码(必填) | — |
|
||
| `JWT_SECRET` | JWT 签名密钥 | `change-me-in-production` |
|
||
| `SERVER_PORT` | 宿主机端口 | `8899` |
|
||
| `TZ` | 时区 | `Asia/Shanghai` |
|
||
| `UNHEALTHY_THRESHOLD` | 连续失败多少次标记为异常 | `3` |
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
SmartUp/
|
||
├── backend/ # FastAPI 应用
|
||
│ └── app/
|
||
│ ├── models/ # SQLAlchemy ORM
|
||
│ ├── schemas/ # Pydantic schemas
|
||
│ ├── routers/ # API 路由
|
||
│ ├── services/ # 业务逻辑(client/scheduler/webhook)
|
||
│ └── utils/ # JWT / 钉钉签名
|
||
├── frontend/ # Vue 3 前端
|
||
│ └── src/
|
||
│ ├── views/ # 页面组件
|
||
│ ├── api/ # Axios 封装
|
||
│ └── stores/ # Pinia 状态
|
||
├── data/ # SQLite 数据目录(Docker volume)
|
||
├── Dockerfile # 多阶段构建
|
||
├── docker-compose.yml
|
||
└── .env.example
|
||
```
|