Update README.md
This commit is contained in:
416
README.md
416
README.md
@@ -1,37 +1,403 @@
|
||||
# gotest
|
||||
# Gotest 多站点管理系统
|
||||
|
||||
#### 介绍
|
||||
Go ??????? - Gin + GORM + SQLite,18????? + ????
|
||||
基于 **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 一键部署
|
||||
|
||||
#### 安装教程
|
||||
## 技术栈
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
| 组件 | 技术 | 版本 |
|
||||
|------|------|------|
|
||||
| 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 |
|
||||
|
||||
#### 使用说明
|
||||
## 项目结构
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
```
|
||||
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 # 共享资源目录
|
||||
```
|
||||
|
||||
#### 参与贡献
|
||||
## 快速开始
|
||||
|
||||
1. Fork 本仓库
|
||||
2. 新建 Feat_xxx 分支
|
||||
3. 提交代码
|
||||
4. 新建 Pull Request
|
||||
### 环境要求
|
||||
|
||||
- Go 1.21+
|
||||
- (可选) Docker & Docker Compose
|
||||
|
||||
#### 特技
|
||||
### 方式一:本地编译运行
|
||||
|
||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
|
||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
|
||||
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
|
||||
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
|
||||
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone https://gitee.com/asdxzaaaaa/gotest.git
|
||||
cd gotest
|
||||
|
||||
# 安装依赖
|
||||
go mod tidy
|
||||
|
||||
# 编译
|
||||
go build -o build/gotest .
|
||||
|
||||
# 运行(自动创建 SQLite 数据库 + 种子数据)
|
||||
./build/gotest
|
||||
```
|
||||
|
||||
### 方式二:Docker 部署
|
||||
|
||||
```bash
|
||||
# 使用 docker-compose 一键启动
|
||||
docker-compose up -d
|
||||
|
||||
# 或手动构建镜像
|
||||
docker build -t gotest .
|
||||
docker run -d -p 8080:8080 -v $(pwd)/data:/app/data gotest
|
||||
```
|
||||
|
||||
### 方式三:使用 Makefile
|
||||
|
||||
```bash
|
||||
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` 为前缀,响应格式统一为:
|
||||
|
||||
```json
|
||||
{
|
||||
"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` 进行配置:
|
||||
|
||||
```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
|
||||
|
||||
Reference in New Issue
Block a user