# 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/` - 更新服务 - `DELETE /api/admin/services/` - 删除服务 - `POST /api/admin/services//toggle` - 切换服务状态 - `GET /api/admin/categories` - 获取所有分类 - `POST /api/admin/categories` - 创建分类 - `PUT /api/admin/categories/` - 更新分类 - `DELETE /api/admin/categories/` - 删除分类 - `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