Files
ToNav-go/README.md
openclaw 0fe26c464f feat: 添加 Docker 支持和完善文档
- 添加 Dockerfile (多阶段构建, alpine 运行时, 14MB 镜像)
- 添加 docker-compose.yml
- 添加 .dockerignore
- README 添加 Docker 部署说明、二进制部署说明
- Docker 镜像: ouaone/tonav-go:v1.0.0
2026-02-14 05:24:35 +08:00

7.5 KiB
Raw Permalink 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/                   # 本地备份目录(自动创建)

快速开始

方式一Docker 部署(推荐)

# 直接运行
docker run -d \
  --name tonav-go \
  -p 9520:9520 \
  -v ./data:/app/data \
  -v ./backups:/app/backups \
  -e TONAV_SECRET=your-secret-key \
  ouaone/tonav-go:latest

# 或使用 docker-compose
wget https://gitea.king.nyc.mn/openclaw/ToNav-go/raw/branch/master/docker-compose.yml
docker compose up -d

Docker 镜像ouaone/tonav-go

环境变量:

变量 默认值 说明
TONAV_PORT 9520 监听端口
TONAV_DB /app/data/tonav.db 数据库路径
TONAV_SECRET 内置密钥 Cookie 签名密钥(生产环境务必修改)
TZ Asia/Shanghai 时区

数据持久化:

挂载路径 说明
/app/data 数据库文件
/app/backups 本地备份文件

方式二:二进制部署

Releases 下载对应平台的二进制文件:

chmod +x tonav-go-linux-amd64
./tonav-go-linux-amd64

方式三:源码编译

环境要求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

使用管理脚本

项目自带 tonav-go-ctl.sh 管理脚本(二进制部署时使用):

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