Files
0451meishi/README.md
2026-01-15 11:37:22 +08:00

3.9 KiB
Raw Permalink Blame History

哈尔滨美食地图0451meishiditu管理后台 & 后端

技术栈

  • 后端Go + Gin + GORM + MySQL + Redis
  • 管理后台Vue3 + Vite + TypeScript + Element Plus + ECharts
  • 部署Docker Compose + Nginx

快速启动Docker Compose

  1. 复制环境变量文件

    • backend/.env.examplebackend/.env
    • admin/.env.exampleadmin/.env
  2. 启动(会同时启动 MySQL、Redis、后端、管理后台、Swagger UI

    • docker compose -f deploy/docker-compose.full.yml up -d --build
  3. 访问

    • 管理后台:http://localhost:5173
    • 后端健康检查:http://localhost:8080/healthz
    • Swagger 文档:http://localhost:8081(加载 docs/openapi.yaml

已实现模块(管理后台)

  • 数据概览Dashboard
  • 店铺管理(列表/详情/上下架/删除)
  • 分类管理
  • 评论管理(审核/删除)
  • 商家入驻审核(通过/拒绝)
  • 排行管理(查看/重算综合分)
  • 用户管理(列表/详情/启用禁用)
  • 管理员管理(新增/重置密码/启用禁用)
  • APIKey 管理(创建/撤销/查看使用时间)
  • 系统设置CORS

认证与安全(非常重要)

  1. APIKey所有 /api/** 必须携带)
  • HeaderX-API-Key: <apikey>
  • 开发环境默认值来自 backend/.envAPI_KEY=dev-api-key-change-me
  1. 管理端 JWT管理端 /api/admin/**,除登录外必须携带)
  • HeaderAuthorization: Bearer <admin_token>
  1. 用户端 JWT用户端需要登录的接口必须携带
  • HeaderAuthorization: Bearer <user_token>

默认管理员账号(首次启动初始化)

backend/.env 控制(首次启动会自动创建):

  • ADMIN_INIT_USERNAME=admin
  • ADMIN_INIT_PASSWORD=admin123456

建议:

  • 生产环境务必修改 JWT_SECRETAPI_KEY(或使用 API_KEY_HASH
  • 首次进入后台后,在「管理员管理」创建新管理员,并禁用默认管理员

CORS 跨域设置(支持手动配置)

默认允许:

  • http://localhost:5173

配置方式:

  1. 推荐:在管理后台「系统设置」配置
  • 一行一个 Origin例如
    • http://localhost:5173
    • https://admin.example.com
  • 支持 *(仅建议开发环境)
  • 保存后立即生效(内存热更新 + 持久化到 DB
  1. 通过 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/registerPOST /api/user/login 需要携带:
    • captcha_id
    • captcha_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.yamlSwagger

图片上传与目录权限

  • 上传接口:POST /api/admin/uploadmultipart/form-data,字段名 file
  • Docker 下默认把上传目录挂载到数据卷:backend_uploads:/app/static/upload
  • 已处理常见的 mkdir failed 权限问题(容器启动时自动创建/授权上传目录)

文档

  • Swagger/OpenAPIdocs/openapi.yamlSwagger UIhttp://localhost:8081
  • 中文接口说明:docs/API.md

常见启动问题

  • 容器名/端口/数据卷冲突:执行 docker compose -f deploy/docker-compose.full.yml down -v 后再 up -d --build
    • 注意:down -v 会清空 MySQL/Redis 数据