Files
web_template/README.md
2026-07-10 10:08:09 +00:00

15 KiB
Raw Permalink Blame History

Gotest 多站点管理系统

基于 Go + Gin + GORM + SQLite 的全栈多站点管理系统,内置 18 套前端网站模板 + 管理后台,覆盖企业官网、跨境电商、外卖平台、游戏平台、应用商店、音乐平台六大业务线。

功能特性

  • 18 套前端网站模板:6 大业务线 × 3 种设计风格,通过 //go:embed 内嵌到二进制
  • 管理后台:完整的 Dashboard + 用户管理 + 16 张数据表的通用 CRUD
  • 生产级架构:RequestID 追踪、结构化日志、优雅关机、连接池优化
  • 安全认证:JWT Bearer Token + bcrypt 密码哈希 + 管理员权限校验
  • 限流防护:基于 IP 的令牌桶限流(golang.org/x/time/rate)
  • 定时任务:cron 调度器,支持数据清理等周期性任务
  • 文件存储:本地 / MinIO / 腾讯云 COS 三种存储后端
  • 短信服务:Mock / 阿里云 / 腾讯云三种短信提供商
  • 容器化部署:多阶段 Docker 构建 + docker-compose 一键部署

技术栈

组件 技术 版本
Web 框架 Gin v1.12.0
ORM GORM v1.31.2
数据库 SQLite (纯Go驱动) / MySQL -
认证 golang-jwt/jwt v5
密码哈希 golang.org/x/crypto/bcrypt -
配置管理 gopkg.in/yaml.v3 -
限流 golang.org/x/time/rate -
定时任务 robfig/cron v3
Go 版本 - 1.25.0

项目结构

gotest/
├── main.go                          # 程序入口
├── config.yaml                      # 全局配置文件
├── go.mod / go.sum                  # Go 模块定义
├── Makefile                         # 标准化构建命令
├── Dockerfile                       # 多阶段 Docker 构建
├── docker-compose.yml               # 容器编排
├── build.bat / build.sh             # 跨平台构建脚本
│
├── internal/                        # 核心业务代码
│   ├── config/                      # 配置结构体定义
│   │   └── config.go                # Config 结构体 + Load() 函数
│   │
│   ├── database/                    # 数据库初始化
│   │   ├── database.go              # Init() + AutoMigrate + HealthCheck
│   │   ├── seed_enterprise.go       # 企业模块种子数据
│   │   ├── seed_shop.go             # 电商模块种子数据
│   │   ├── seed_food.go             # 外卖模块种子数据
│   │   ├── seed_game.go             # 游戏模块种子数据
│   │   ├── seed_app.go              # 应用模块种子数据
│   │   └── seed_music.go            # 音乐模块种子数据
│   │
│   ├── model/                       # GORM 数据模型 (17个模型)
│   │   ├── user.go                  # 用户模型 (User)
│   │   ├── config.go                # 系统配置 (Config)
│   │   ├── enterprise.go            # 企业模型 (Company/News/Service/Team)
│   │   ├── shop.go                  # 电商模型 (Product/ProductCategory)
│   │   ├── food.go                  # 外卖模型 (Restaurant/MenuCategory/MenuItem)
│   │   ├── game.go                  # 游戏模型 (Game/GameCategory)
│   │   ├── app.go                   # 应用模型 (App/AppCategory)
│   │   └── music.go                 # 音乐模型 (Song/MusicCategory)
│   │
│   ├── repository/                  # 数据访问层
│   │   ├── user.go                  # 用户 CRUD
│   │   ├── enterprise.go            # 企业数据查询
│   │   ├── shop.go                  # 电商数据查询
│   │   ├── food.go                  # 外卖数据查询
│   │   ├── game.go                  # 游戏数据查询
│   │   ├── app.go                   # 应用数据查询
│   │   └── music.go                 # 音乐数据查询
│   │
│   ├── service/                     # 业务逻辑层
│   │   ├── auth.go                  # 认证服务 (登录/JWT生成)
│   │   ├── admin.go                 # 管理员服务
│   │   ├── user.go                  # 用户服务
│   │   ├── upload.go                # 文件上传服务
│   │   ├── enterprise.go            # 企业业务逻辑
│   │   ├── shop.go                  # 电商业务逻辑
│   │   ├── food.go                  # 外卖业务逻辑
│   │   ├── game.go                  # 游戏业务逻辑
│   │   ├── app.go                   # 应用业务逻辑
│   │   └── music.go                 # 音乐业务逻辑
│   │
│   ├── handler/                     # HTTP 处理器
│   │   ├── response.go              # 统一响应格式 (Success/Fail*)
│   │   ├── auth.go                  # 登录接口
│   │   ├── admin.go                 # 管理员初始化
│   │   ├── user.go                  # 用户资料 + 用户CRUD
│   │   ├── upload.go                # 文件上传
│   │   ├── dashboard.go             # 管理后台仪表盘 + 通用CRUD
│   │   ├── enterprise.go            # 企业数据 API
│   │   ├── shop.go                  # 电商数据 API
│   │   ├── food.go                  # 外卖数据 API
│   │   ├── game.go                  # 游戏数据 API
│   │   ├── app.go                   # 应用数据 API
│   │   └── music.go                 # 音乐数据 API
│   │
│   ├── middleware/                  # 中间件
│   │   ├── request_id.go            # 请求ID追踪
│   │   ├── recover.go               # Panic 恢复
│   │   ├── logger.go                # 结构化日志
│   │   ├── cors.go                  # 跨域处理
│   │   ├── ratelimit.go             # 限流 (令牌桶)
│   │   └── jwt.go                   # JWT 认证
│   │
│   ├── router/                      # 路由注册
│   │   └── router.go                # 全局路由 + 中间件链
│   │
│   ├── storage/                     # 文件存储抽象
│   │   ├── storage.go               # 接口定义 + 工厂函数
│   │   ├── local.go                 # 本地存储
│   │   ├── minio.go                 # MinIO 对象存储
│   │   └── cos.go                   # 腾讯云 COS
│   │
│   ├── sms/                         # 短信服务抽象
│   │   ├── sms.go                   # 接口定义 + 工厂函数
│   │   ├── mock.go                  # Mock 短信
│   │   ├── aliyun.go                # 阿里云短信
│   │   └── tencent.go               # 腾讯云短信
│   │
│   └── task/                        # 定时任务
│       └── task.go                  # cron 调度器
│
└── web/dist/                        # 嵌入式前端模板
    ├── admin/index.html             # 管理后台 SPA
    ├── site1/index.html             # 企业官网 - 科技风格
    ├── site2/index.html             # 企业官网 - 制造风格
    ├── site3/index.html             # 企业官网 - 咨询风格
    ├── shop/index.html              # 跨境电商 - 红色风格
    ├── shop2/index.html             # 跨境电商 - 暗黑风格
    ├── shop3/index.html             # 跨境电商 - 北欧风格
    ├── food1/index.html             # 外卖平台 - 橙黄风格
    ├── food2/index.html             # 外卖平台 - 深色风格
    ├── food3/index.html             # 外卖平台 - 清新风格
    ├── game1/index.html             # 游戏平台 - 赛博风格
    ├── game2/index.html             # 游戏平台 - 像素风格
    ├── game3/index.html             # 游戏平台 - 云游风格
    ├── app1/index.html              # 应用商店 - 极简风格
    ├── app2/index.html              # 应用商店 - 暗黑风格
    ├── app3/index.html              # 应用商店 - 清新风格
    ├── music1/index.html            # 音乐平台 - 暗黑风格
    ├── music2/index.html            # 音乐平台 - 黑胶风格
    ├── music3/index.html            # 音乐平台 - 渐变风格
    └── shared/.gitkeep              # 共享资源目录

快速开始

环境要求

  • Go 1.21+
  • (可选) Docker & Docker Compose

方式一:本地编译运行

# 克隆仓库
git clone https://gitee.com/asdxzaaaaa/gotest.git
cd gotest

# 安装依赖
go mod tidy

# 编译
go build -o build/gotest .

# 运行(自动创建 SQLite 数据库 + 种子数据)
./build/gotest

方式二:Docker 部署

# 使用 docker-compose 一键启动
docker-compose up -d

# 或手动构建镜像
docker build -t gotest .
docker run -d -p 8080:8080 -v $(pwd)/data:/app/data gotest

方式三:使用 Makefile

make build      # 编译
make run        # 直接运行
make build-prod # 生产级编译
make lint       # 代码检查 (fmt + vet)
make test       # 运行测试
make docker-up  # Docker Compose 启动
make clean      # 清理构建产物

网站访问方式

启动服务后,在浏览器中打开以下地址:

管理后台

页面 地址 说明
管理后台 http://localhost:8080/admin 默认账号: admin / admin123

管理后台功能:

  • 仪表盘:用户数 + 6 大业务线数据统计概览
  • 用户管理:用户列表、新增/编辑/删除、角色与状态管理
  • 内容管理:16 张数据表的通用 CRUD(增删改查)
  • 系统设置:服务健康状态、数据库信息、技术栈
  • 站点导航:18 套前端模板快速入口

前端网站模板(18 套)

企业官网

风格 地址
科技风格 (蓝色) http://localhost:8080/site1
制造风格 http://localhost:8080/site2
咨询风格 http://localhost:8080/site3

跨境电商

风格 地址
红色风格 http://localhost:8080/shop
暗黑风格 http://localhost:8080/shop2
北欧风格 http://localhost:8080/shop3

外卖平台

风格 地址
橙黄风格 http://localhost:8080/food1
深色风格 http://localhost:8080/food2
清新风格 http://localhost:8080/food3

游戏平台

风格 地址
赛博风格 http://localhost:8080/game1
像素风格 http://localhost:8080/game2
云游风格 http://localhost:8080/game3

应用商店

风格 地址
极简风格 http://localhost:8080/app1
暗黑风格 http://localhost:8080/app2
清新风格 http://localhost:8080/app3

音乐平台

风格 地址
暗黑风格 http://localhost:8080/music1
黑胶风格 http://localhost:8080/music2
渐变风格 http://localhost:8080/music3

API 接口

所有 API 以 /api/v1 为前缀,响应格式统一为:

{
  "code": 0,
  "message": "success",
  "data": {}
}

公开接口(无需认证)

方法 路径 说明
GET /api/health 健康检查(含数据库状态)
POST /api/v1/auth/login 用户登录
GET /api/v1/admin/check 检查管理员是否存在
POST /api/v1/admin/init 初始化管理员账号
GET /api/v1/enterprise/* 企业数据(公司/服务/新闻/团队)
GET /api/v1/shop/* 电商数据(分类/商品/推荐)
GET /api/v1/food/* 外卖数据(餐厅/菜品/菜单)
GET /api/v1/game/* 游戏数据(分类/游戏/热门/新游)
GET /api/v1/app/* 应用数据(分类/应用/精选/新上架)
GET /api/v1/music/* 音乐数据(分类/歌曲/热门/新歌)

需登录接口(JWT 认证)

方法 路径 说明
GET/PUT /api/v1/user/profile 获取/更新个人资料
PUT /api/v1/user/password 修改密码
POST /api/v1/upload 文件上传

管理端接口(JWT + 管理员权限)

方法 路径 说明
GET /api/v1/admin/users 用户列表(分页)
POST /api/v1/admin/users 创建用户
PUT /api/v1/admin/users/:id 更新用户
DELETE /api/v1/admin/users/:id 删除用户
GET /api/v1/admin/dashboard/stats 仪表盘统计
GET /api/v1/admin/dashboard/:table 通用列表查询
POST /api/v1/admin/dashboard/:table 通用创建
PUT /api/v1/admin/dashboard/:table/:id 通用更新
DELETE /api/v1/admin/dashboard/:table/:id 通用删除

可管理的数据表

模块 表名 说明
企业官网 enterprise_company 企业信息
企业官网 enterprise_news 企业新闻
企业官网 enterprise_services 企业服务
企业官网 enterprise_team 团队成员
跨境电商 shop_products 商品管理
跨境电商 shop_categories 商品分类
外卖平台 food_restaurants 餐厅管理
外卖平台 food_categories 餐厅分类
外卖平台 food_menu_items 菜品管理
外卖平台 food_menu_categories 菜品分类
游戏平台 game_games 游戏管理
游戏平台 game_categories 游戏分类
应用商店 app_apps 应用管理
应用商店 app_categories 应用分类
音乐平台 music_songs 歌曲管理
音乐平台 music_categories 音乐分类

配置说明

编辑 config.yaml 进行配置:

server:
  port: 8080              # 服务端口
  read_timeout: 15        # 读超时(秒)
  write_timeout: 30       # 写超时(秒)
  idle_timeout: 120       # 空闲超时(秒)
  shutdown_timeout: 15    # 优雅关机等待(秒)

database:
  driver: sqlite          # sqlite | mysql
  sqlite:
    path: ./data/app.db
  mysql:
    host: localhost
    port: 3306
    dbname: gotest
    username: root
    password: ""
  auto_migrate: true      # 自动建表
  init_data: true         # 初始化种子数据

jwt:
  secret: change-me-in-production  # JWT 密钥
  expire_hours: 720                # Token 过期时间(小时)

upload:
  path: ./uploads         # 上传目录
  max_size: 10485760      # 最大文件大小(10MB)

rate_limit:
  enabled: true
  rps: 10                 # 每秒请求数
  burst: 20               # 突发大小

env:
  name: dev               # dev | prod

默认账号

首次启动时自动创建管理员账号:

用户名 密码 角色
admin admin123 管理员

中间件链

请求处理顺序:

请求 → RequestID → Recover → Logger → CORS → RateLimit → [JWTAuth] → [requireAdmin] → Handler

生产部署建议

  1. 修改 config.yaml 中的 JWT secret
  2. 切换数据库为 MySQL
  3. 设置 env.name: prod
  4. 使用 Docker 部署或 Nginx 反向代理
  5. 配置 HTTPS 证书
  6. 定期备份 data/ 目录

许可证

MIT License