Files
ToNav/README.md
OpenClaw Agent 872526505e Initial commit: ToNav Personal Navigation Page
- Flask + SQLite 个人导航页系统
- 前台导航页(分类Tab、卡片展示)
- 管理后台(服务管理、分类管理、健康检测)
- 响应式设计
- Systemd 服务配置
2026-02-12 21:57:15 +08:00

207 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ToNav - 个人导航页系统
> 一个简洁实用的个人服务导航与健康管理平台
## 📋 项目概述
ToNav 是一个基于 Flask 的轻量级个人导航页系统,用于管理和展示内部服务,并提供服务健康状态监控功能。
## ✨ 核心功能
### 前台展示
- 🎨 美观的服务导航页
- 📱 响应式设计,支持移动端
- 🔖 服务分类展示
- ✅ 实时显示服务健康状态
### 管理后台
- 🔐 安全登录系统bcrypt 密码哈希)
- 🛠️ 服务管理(增删改查)
- 📁 分类管理
- 🔄 服务启用/禁用切换
- 🔍 手动健康检查触发
- 🔑 管理员密码修改
### 健康监控
- ⏱️ 后台定时健康检查(默认 60 秒)
- 🚨 支持自定义健康检查 URL
- ⏱️ 超时控制(默认 5 秒)
- 📊 状态记录(在线/离线/超时/连接错误)
## 🏗️ 技术栈
| 技术 | 版本 | 用途 |
|------|------|------|
| Flask | 3.0.0 | Web 框架 |
| requests | 2.31.0 | HTTP 请求(健康检查) |
| SQLite | 内置 | 数据存储 |
## 📂 项目结构
```
ToNav/
├── app.py # 主应用入口
├── config.py # 配置文件
├── tonav.db # SQLite 数据库
├── requirements.txt # Python 依赖
├── templates/ # HTML 模板
│ ├── base.html # 基础模板
│ ├── index.html # 前台导航页
│ └── admin/ # 管理后台
│ ├── login.html # 登录页
│ ├── dashboard.html # 仪表盘
│ ├── services.html # 服务管理
│ └── categories.html # 分类管理
├── static/ # 静态资源
└── utils/ # 工具模块
├── auth.py # 认证模块
├── database.py # 数据库操作
└── health_check.py # 健康检查
```
## 🗄️ 数据库结构
### services 表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | INTEGER | 自增主键 |
| name | VARCHAR(100) | 服务名称 |
| url | VARCHAR(500) | 服务地址 |
| description | TEXT | 服务描述 |
| icon | VARCHAR(50) | 图标 |
| category | VARCHAR(50) | 所属分类 |
| is_enabled | INTEGER | 是否启用 (1/0) |
| sort_order | INTEGER | 排序 |
| health_check_url | VARCHAR(500) | 健康检查地址 |
| health_check_enabled | INTEGER | 是否启用健康检查 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
### categories 表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | INTEGER | 自增主键 |
| name | VARCHAR(50) | 分类名称 |
| sort_order | INTEGER | 排序 |
### users 表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | INTEGER | 自增主键 |
| username | VARCHAR(50) | 用户名 |
| password_hash | VARCHAR(255) | 密码哈希 |
| created_at | TIMESTAMP | 创建时间 |
## 🚀 快速开始
### 1. 安装依赖
```bash
cd ToNav
pip install -r requirements.txt
```
### 2. 启动服务
```bash
python3 app.py
```
### 3. 访问应用
- 前台导航页: http://127.0.0.1:9519
- 管理后台: http://127.0.0.1:9519/admin
- 默认账号: `admin`
- 默认密码: `tonav123`
## ⚙️ 配置说明
编辑 `config.py` 可调整以下配置:
```python
# 服务监听地址和端口
HOST = '127.0.0.1'
PORT = 9519
DEBUG = False
# 健康检查配置
HEALTH_CHECK_INTERVAL = 60 # 检测间隔(秒)
HEALTH_CHECK_TIMEOUT = 5 # 检测超时(秒)
# Flask 密钥
SECRET_KEY = 'tonav-secret-key-change-in-production-2026'
```
## 📡 API 接口
### 前台 API
- `GET /api/services` - 获取所有启用的服务
- `GET /api/categories` - 获取所有分类
### 后台 API
- `POST /api/admin/login` - 登录
- `GET /api/admin/login/status` - 检查登录状态
- `GET /api/admin/services` - 获取所有服务
- `POST /api/admin/services` - 创建服务
- `PUT /api/admin/services/<id>` - 更新服务
- `DELETE /api/admin/services/<id>` - 删除服务
- `POST /api/admin/services/<id>/toggle` - 切换服务状态
- `GET /api/admin/categories` - 获取所有分类
- `POST /api/admin/categories` - 创建分类
- `PUT /api/admin/categories/<id>` - 更新分类
- `DELETE /api/admin/categories/<id>` - 删除分类
- `POST /api/admin/health-check` - 手动触发健康检查
- `POST /api/admin/change-password` - 修改密码
## 📊 当前数据
### 已配置服务 (3 个)
1. **违禁品查获排行榜** - http://127.0.0.1:9517
- 描述: 实时数据统计 · 自动刷新
- 图标: 📊
- 健康检查: ✅ 启用
2. **短信接收端-Python** - http://127.0.0.1:9518
- 描述: HTTP接口 + Web管理
- 图标: 📱
3. **短信接收端-Go** - http://127.0.0.1:28001
- 描述: 高性能版本 · 端口28001
- 图标: 🔧
### 分类配置 (3 个)
- 内网服务
- 开发工具
- 测试环境
## 🎯 使用场景
- 个人实验室/内网环境服务导航
- 服务状态监控面板
- 团队内部服务门户
- 自建服务启动页
## 📝 注意事项
1. **生产环境部署**
- 修改 `SECRET_KEY` 为随机字符串
- 修改默认管理员密码
- 使用反向代理(如 Nginx
- 启用 HTTPS
2. **健康检查**
- 默认仅检查 HTTP 状态码 < 500
- 超时服务会被标记为离线
- 检查间隔建议不要小于 30 秒
3. **安全建议**
- 限制 ADMIN 接口访问
- 定期备份数据库
- 使用强密码
## 📄 许可证
MIT License
---
**版本**: 1.0.0
**更新时间**: 2026-02-12