Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring-Blog

一个基于 Go + Gin + MySQL + Redis 开发的博客系统,提供完整的用户认证、文章管理、评论系统、权限管理等功能。

功能特性

用户系统

  • 用户注册(邮箱验证码验证)
  • 用户登录(图形验证码)
  • JWT 认证
  • Token 刷新机制
  • 密码重置
  • 头像上传
  • 用户信息修改

文章系统

  • 文章 CRUD
  • 文章分类
  • 文章标签
  • 文章点赞
  • 文章统计
  • Markdown 支持
  • 图片上传

评论系统

  • 评论 CRUD
  • 嵌套评论
  • 评论审核

权限系统

  • RBAC 权限模型
  • 角色管理
  • 菜单管理
  • 权限管理
  • 细粒度权限控制

消息系统

  • 用户私信
  • 系统通知
  • 消息已读状态
  • 批量已读

其他功能

  • CORS 跨域支持
  • 日志记录
  • 请求恢复中间件
  • 图片清理定时任务

技术栈

后端

  • Go - 编程语言
  • Gin - Web 框架
  • GORM - ORM 框架
  • MySQL - 关系型数据库
  • Redis - 缓存数据库
  • JWT - 身份认证

工具库

  • golang-jwt/jwt - JWT 签发与验证
  • go-redis/redis - Redis 客户端
  • captcha - 图形验证码
  • gomail - 邮件发送

项目结构

Blog/
├── cmd/
│   └── service/
│       └── main.go              # 程序入口
├── configs/
│   └── config.yaml              # 配置文件
├── docs/
│   ├── API.md                   # API 文档
│   └── README.md                # 项目说明
├── internal/
│   ├── api/                     # API 路由和控制器
│   │   ├── router.go            # 路由注册
│   │   └── v1/                  # API v1 版本
│   │       ├── article/         # 文章模块
│   │       ├── auth/            # 认证模块
│   │       ├── category/        # 分类模块
│   │       ├── comment/         # 评论模块
│   │       ├── like/            # 点赞模块
│   │       ├── menu/            # 菜单模块
│   │       ├── message/         # 消息模块
│   │       ├── permission/      # 权限模块
│   │       ├── role/            # 角色模块
│   │       ├── tag/             # 标签模块
│   │       └── user/            # 用户模块
│   ├── app/
│   │   └── app.go               # 应用初始化
│   ├── middleware/              # 中间件
│   │   ├── auth.go              # JWT 认证中间件
│   │   ├── cors.go              # CORS 中间件
│   │   ├── logger.go            # 日志中间件
│   │   └── recovery.go          # 恢复中间件
│   ├── model/                   # 数据模型
│   │   ├── dto/                 # 数据传输对象
│   │   │   ├── request/         # 请求 DTO
│   │   │   └── response/        # 响应 DTO
│   │   ├── entity/              # 实体模型
│   │   └── mapper/              # 数据映射
│   ├── repository/              # 数据仓库层
│   └── service/                 # 业务逻辑层
├── pkg/                         # 公共包
│   ├── captcha/                 # 验证码
│   ├── config/                  # 配置管理
│   ├── database/                # 数据库连接
│   ├── errors/                  # 错误处理
│   ├── email/                   # 邮件发送
│   ├── jwt/                     # JWT 工具
│   ├── logger/                  # 日志工具
│   └── util/                    # 工具函数
├── uploads/                     # 上传文件目录
│   ├── articles/                # 文章图片
│   └── avatars/                 # 用户头像
├── logs/                        # 日志文件目录
└── go.mod                       # Go 模块依赖

快速开始

环境要求

  • Go 1.20+
  • MySQL 5.7+
  • Redis 5.0+

安装步骤

  1. 克隆项目
git clone https://github.com/your-repo/blog.git
cd blog
  1. 安装依赖
go mod download
  1. 配置数据库

编辑 configs/config.yaml 文件,配置 MySQL 和 Redis 连接信息:

app:
  name: "Spring-Blog"
  version: "1.0.0"
  mode: "debug"
  port: 8090

database:
  mysql:
    host: "localhost"
    port: 3306
    username: "root"
    password: "your_password"
    database: "Zblog"
  redis:
    host: "localhost"
    port: 6379
    password: "your_password"
    db: 5

jwt:
  secret: "your-jwt-secret-key"
  expire_hours: 24
  refresh_hours: 168

email:
  host: "smtp.qq.com"
  port: 465
  username: "your-email@qq.com"
  password: "your-email-password"
  1. 创建数据库
CREATE DATABASE Zblog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. 启动服务
go run cmd/service/main.go

服务启动后,默认监听 http://localhost:8090

API 文档

详细的 API 文档请查看 API.md

主要 API 端点

模块 前缀 说明
认证 /api/v1/auth 登录、注册、验证码等
用户 /api/v1/user 用户信息、头像等
文章 /api/v1/article 文章 CRUD
评论 /api/v1/comment 评论 CRUD
点赞 /api/v1/like 点赞功能
分类 /api/v1/category 分类管理
标签 /api/v1/tag 标签管理
菜单 /api/v1/menu 菜单管理
角色 /api/v1/role 角色管理
权限 /api/v1/permission 权限管理
消息 /api/v1/message 消息中心

权限说明

系统采用 RBAC(Role-Based Access Control)权限模型:

  • 超级管理员 (admin): 拥有所有权限
  • 普通用户 (user): 基本操作权限
  • 自定义角色: 可根据需要配置

权限标识格式

模块:操作

例如:

  • article:create - 创建文章
  • article:update - 更新文章
  • article:delete - 删除文章
  • user:manage - 用户管理

开发指南

代码规范

  • 遵循 Go 语言标准规范
  • 使用 meaningful 的变量命名
  • 适当的注释说明复杂逻辑

分层结构

Controller (控制器) -> Service (服务) -> Repository (仓库) -> Database (数据库)
  • Controller: 处理请求参数,调用 Service,返回响应
  • Service: 业务逻辑处理
  • Repository: 数据库操作
  • Model: 数据模型定义

新增模块步骤

  1. internal/model/entity/ 定义实体
  2. internal/model/dto/ 定义请求/响应 DTO
  3. internal/repository/ 定义仓库接口和实现
  4. internal/service/ 定义服务接口和实现
  5. internal/api/v1/ 添加控制器和路由
  6. internal/api/router.go 注册路由

部署

生产环境建议

  1. 修改 moderelease
  2. 使用强密码和 HTTPS
  3. 配置合理的数据库连接池
  4. 使用 Nginx 反向代理
  5. 配置日志轮转

Docker 部署

FROM golang:1.20-alpine AS builder

WORKDIR /app
COPY . .
RUN go build -o blog cmd/service/main.go

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/blog .
COPY --from=builder /app/configs ./configs
COPY --from=builder /app/uploads ./uploads

EXPOSE 8090
CMD ["./blog"]

注意事项

  1. 首次运行前请确保数据库已创建
  2. 请修改默认的 JWT Secret 和邮箱配置
  3. 生产环境请使用 HTTPS
  4. 定期备份数据库

许可证

MIT License

贡献指南

欢迎提交 Issue 和 Pull Request!

About

一个功能丰富,支持RBAC的博客系统

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages