- Flask + SQLite 个人导航页系统 - 前台导航页(分类Tab、卡片展示) - 管理后台(服务管理、分类管理、健康检测) - 响应式设计 - Systemd 服务配置
207 lines
5.4 KiB
Markdown
207 lines
5.4 KiB
Markdown
# 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
|