Files
ToNav-go/README.md
openclaw efaf787981 feat: ToNav-go v1.0.0 - 内部服务导航系统
功能:
- 前台导航: 分类Tab切换、实时搜索、健康状态指示、响应式适配
- 后台管理: 服务/分类CRUD、系统设置、登录认证(bcrypt)
- 健康检查: 定时检测(5min)、独立检查URL、三态指示(在线/离线/未检测)
- 云端备份: WebDAV上传/下载/恢复/删除、定时自动备份、本地备份管理

技术栈: Go + Gin + GORM + SQLite
2026-02-14 05:09:23 +08:00

6.3 KiB
Raw Blame History

ToNav-go

🧭 内部服务导航系统 — Go 版本

基于 Go + Gin + GORM + SQLite 构建的轻量级服务导航页,用于管理和展示内部服务链接。

功能特性

前台导航

  • 🔍 实时搜索 — 输入即过滤,匹配服务名称、描述、标签
  • 📑 分类 Tab 切换 — 一键过滤不同分类的服务
  • 🟢 健康状态指示 — 绿色在线 / 红色离线 / 灰色未检测
  • 📱 响应式设计 — 完美适配手机端
  • 🎨 深色 Header + 白色卡片 — 现代化 UI 风格

后台管理

  • 📡 服务管理 — 新增/编辑/删除服务名称、URL、图标、分类、描述、标签、排序、健康检查配置
  • 📂 分类管理 — 新增/编辑/删除分类,支持排序权重
  • ⚙️ 系统设置 — 站点标题、WebDAV 配置、自动备份开关
  • 🔐 登录认证 — bcrypt 密码加密,首次登录强制修改密码
  • 📊 Dashboard — 服务总数、分类数、在线/离线统计

健康检查

  • ⏱️ 定时检测 — 每 5 分钟自动检测所有启用健康检查的服务
  • 🎯 独立检查 URL — 可为每个服务配置专用健康检查地址
  • 🔘 三态指示 — 开启检测 + 成功 = 绿色 / 开启检测 + 失败 = 红色 / 未开启 = 灰色

云端备份WebDAV

  • ☁️ 手动备份 — 一键备份数据库到 WebDAV 云端
  • 🔄 恢复备份 — 从云端备份列表选择恢复,恢复前自动备份当前数据
  • 🗑️ 删除备份 — 清理云端旧备份(需 WebDAV 服务端开放 DELETE 权限)
  • 定时自动备份 — 可配置每天凌晨 3:00 自动执行
  • 📁 本地备份管理 — 自动保留最近 5 份本地备份

技术栈

组件 技术
语言 Go 1.24+
Web 框架 Gin
ORM GORM
数据库 SQLite
认证 bcrypt + Cookie Session
前端 原生 HTML/CSS/JS
备份 WebDAV 协议

项目结构

ToNav-go/
├── main.go                    # 入口文件、路由注册
├── go.mod                     # Go 模块定义
├── go.sum                     # 依赖校验
├── tonav-go-ctl.sh            # 管理脚本 (start/stop/restart/status/build/log)
├── database/
│   ├── db.go                  # 数据库初始化、自动迁移
│   └── seed.go                # 初始数据默认管理员、分类、WebDAV 配置)
├── models/
│   └── models.go              # 数据模型Category, Service, User, Setting
├── handlers/
│   ├── api.go                 # REST API服务/分类 CRUD
│   ├── auth.go                # 登录/登出/修改密码
│   ├── health.go              # 健康检查定时任务
│   ├── settings.go            # 系统设置 & 备份/恢复/删除
│   ├── views.go               # 页面渲染(首页/Dashboard/管理页面)
│   └── utils.go               # 工具函数Session 获取)
├── utils/
│   ├── config.go              # 配置加载(环境变量)
│   └── webdav.go              # WebDAV 客户端(上传/下载/列表/删除/备份)
├── templates/
│   ├── index.html             # 前台导航页
│   └── admin/
│       ├── login.html         # 登录页
│       ├── dashboard.html     # 后台首页
│       ├── services.html      # 服务管理
│       ├── categories.html    # 分类管理
│       └── change_password.html  # 修改密码
└── backups/                   # 本地备份目录(自动创建)

快速开始

环境要求

  • Go 1.24+
  • GCCCGO 编译 SQLite 需要)

编译运行

# 克隆项目
git clone https://gitea.king.nyc.mn/openclaw/ToNav-go.git
cd ToNav-go

# 编译
go build -o tonav-go-v1

# 运行
./tonav-go-v1

使用管理脚本

chmod +x tonav-go-ctl.sh

./tonav-go-ctl.sh start     # 启动(后台运行)
./tonav-go-ctl.sh stop      # 停止
./tonav-go-ctl.sh restart   # 重启
./tonav-go-ctl.sh status    # 查看状态
./tonav-go-ctl.sh build     # 编译
./tonav-go-ctl.sh log       # 查看日志

环境变量配置

变量 默认值 说明
TONAV_PORT 9520 监听端口
TONAV_DB tonav.db 数据库文件路径
TONAV_SECRET 内置密钥 Cookie 签名密钥

默认账号

  • 用户名: admin
  • 密码: admin123
  • 首次登录会强制修改密码

API 接口

公开接口

方法 路径 说明
GET / 前台导航页
GET /admin/login 登录页
POST /admin/login 登录

管理接口(需登录)

方法 路径 说明
GET /admin/dashboard 后台首页
GET /admin/api/services 获取所有服务
POST /admin/api/services 新增服务
PUT /admin/api/services/:id 更新服务
DELETE /admin/api/services/:id 删除服务
GET /admin/api/categories 获取所有分类
POST /admin/api/categories 新增分类
PUT /admin/api/categories/:id 更新分类
DELETE /admin/api/categories/:id 删除分类
GET /admin/api/settings 获取设置
POST /admin/api/settings 保存设置
POST /admin/api/backup/webdav 执行云端备份
GET /admin/api/backup/list 列出云端备份
DELETE /admin/api/backup/delete?name=xxx 删除云端备份
POST /admin/api/backup/restore?name=xxx 恢复云端备份

数据模型

Service 服务

字段 类型 说明
name string 服务名称
url string 服务地址
icon string 图标emoji
description string 描述
category_id uint 所属分类 ID
tags string 标签(逗号分隔)
status string 状态online/offline/unknown
is_enabled bool 是否启用
sort_order int 排序权重(越大越靠前)
health_check_url string 健康检查 URL
health_check_enabled bool 是否启用健康检查
click_count int 点击次数

Category 分类

字段 类型 说明
name string 分类名称
sort_order int 排序权重(越大越靠前)

License

MIT