3.9 KiB
3.9 KiB
哈尔滨美食地图(0451meishiditu)管理后台 & 后端
技术栈
- 后端:Go + Gin + GORM + MySQL + Redis
- 管理后台:Vue3 + Vite + TypeScript + Element Plus + ECharts
- 部署:Docker Compose + Nginx
快速启动(Docker Compose)
-
复制环境变量文件
backend/.env.example→backend/.envadmin/.env.example→admin/.env
-
启动(会同时启动 MySQL、Redis、后端、管理后台、Swagger UI)
docker compose -f deploy/docker-compose.full.yml up -d --build
-
访问
- 管理后台:
http://localhost:5173 - 后端健康检查:
http://localhost:8080/healthz - Swagger 文档:
http://localhost:8081(加载docs/openapi.yaml)
- 管理后台:
已实现模块(管理后台)
- 数据概览(Dashboard)
- 店铺管理(列表/详情/上下架/删除)
- 分类管理
- 评论管理(审核/删除)
- 商家入驻审核(通过/拒绝)
- 排行管理(查看/重算综合分)
- 用户管理(列表/详情/启用禁用)
- 管理员管理(新增/重置密码/启用禁用)
- APIKey 管理(创建/撤销/查看使用时间)
- 系统设置(CORS)
认证与安全(非常重要)
- APIKey(所有
/api/**必须携带)
- Header:
X-API-Key: <apikey> - 开发环境默认值来自
backend/.env:API_KEY=dev-api-key-change-me
- 管理端 JWT(管理端
/api/admin/**,除登录外必须携带)
- Header:
Authorization: Bearer <admin_token>
- 用户端 JWT(用户端需要登录的接口必须携带)
- Header:
Authorization: Bearer <user_token>
默认管理员账号(首次启动初始化)
由 backend/.env 控制(首次启动会自动创建):
ADMIN_INIT_USERNAME=adminADMIN_INIT_PASSWORD=admin123456
建议:
- 生产环境务必修改
JWT_SECRET、API_KEY(或使用API_KEY_HASH) - 首次进入后台后,在「管理员管理」创建新管理员,并禁用默认管理员
CORS 跨域设置(支持手动配置)
默认允许:
http://localhost:5173
配置方式:
- 推荐:在管理后台「系统设置」配置
- 一行一个 Origin,例如:
http://localhost:5173https://admin.example.com
- 支持
*(仅建议开发环境) - 保存后立即生效(内存热更新 + 持久化到 DB)
- 通过
backend/.env配置
CORS_ALLOW_ORIGINS:使用英文逗号分隔- 示例:
CORS_ALLOW_ORIGINS=http://localhost:5173,https://admin.example.com
用户注册/登录验证码
GET /api/captcha/new获取验证码(返回captcha_id+svg)POST /api/user/register、POST /api/user/login需要携带:captcha_idcaptcha_code
管理员登录验证码
POST /api/admin/login同样需要携带captcha_id+captcha_code(防止暴力破解)- 管理后台登录页已集成验证码展示与点击刷新
公共读取接口(前端可调用)
这些接口仍然需要 X-API-Key,但不需要管理员 JWT:
- 分类列表:
GET /api/categories(只返回 enabled=true) - 店铺列表:
GET /api/stores(只返回 active) - 店铺详情:
GET /api/stores/:id(只返回 active) - 店铺评论:
GET /api/stores/:id/reviews(只返回 approved) - 店铺排行:
GET /api/rankings/stores
详见:docs/API.md(中文说明)和 docs/openapi.yaml(Swagger)
图片上传与目录权限
- 上传接口:
POST /api/admin/upload(multipart/form-data,字段名file) - Docker 下默认把上传目录挂载到数据卷:
backend_uploads:/app/static/upload - 已处理常见的
mkdir failed权限问题(容器启动时自动创建/授权上传目录)
文档
- Swagger/OpenAPI:
docs/openapi.yaml(Swagger UI:http://localhost:8081) - 中文接口说明:
docs/API.md
常见启动问题
- 容器名/端口/数据卷冲突:执行
docker compose -f deploy/docker-compose.full.yml down -v后再up -d --build- 注意:
down -v会清空 MySQL/Redis 数据
- 注意: