博客系统
Go to file
2025-07-18 17:13:35 +08:00
.vscode 博客系统第一次提交 2025-07-18 11:00:27 +08:00
config 博客系统第一次提交 2025-07-18 11:00:27 +08:00
handlers 博客系统第一次提交 2025-07-18 11:00:27 +08:00
middleware 博客系统第一次提交 2025-07-18 11:00:27 +08:00
models 博客系统第一次提交 2025-07-18 11:00:27 +08:00
scripts 博客系统第一次提交 2025-07-18 11:00:27 +08:00
services 博客系统第一次提交 2025-07-18 11:00:27 +08:00
utils 博客系统第一次提交 2025-07-18 11:00:27 +08:00
.dockerignore 博客系统第一次提交 2025-07-18 11:00:27 +08:00
.gitignore Initial commit 2025-07-18 02:58:50 +00:00
API_DOCUMENTATION.md 博客系统第一次提交 2025-07-18 11:00:27 +08:00
docker-compose.yml 博客系统第一次提交 2025-07-18 11:00:27 +08:00
Dockerfile 博客系统第一次提交 2025-07-18 11:00:27 +08:00
go.mod 博客系统第一次提交 2025-07-18 11:00:27 +08:00
go.sum 博客系统第一次提交 2025-07-18 11:00:27 +08:00
LICENSE Initial commit 2025-07-18 02:58:50 +00:00
main.go 博客系统第一次提交 2025-07-18 11:00:27 +08:00
README.md 博客系统第一次提交 2025-07-18 11:00:27 +08:00
test_api.sh 博客系统第一次提交 2025-07-18 11:00:27 +08:00
灵猴社博客系统UI&UX.docx 1111 2025-07-18 17:13:35 +08:00
灵猴社博客系统后端解决方案.txt 博客系统第一次提交 2025-07-18 11:00:27 +08:00

灵猴社博客系统 (PBlog)

一个基于Go语言开发的现代化博客系统支持Markdown编辑、用户管理、评论系统、媒体上传等功能。

🚀 特性

  • 用户认证:完整的用户注册、登录、权限管理系统
  • 文章管理支持Markdown编辑、版本历史、定时发布
  • 评论系统:实时评论、敏感词过滤
  • 媒体上传:图片、视频文件上传管理
  • 标签系统:文章分类和标签管理
  • 管理后台:完善的管理员功能
  • 安全防护XSS防护、SQL注入防护、JWT认证
  • SEO优化友好的URL、自动生成摘要

🛠️ 技术栈

  • 后端框架Go 1.21+ + Gin
  • 数据库MySQL 8.0+
  • ORMGORM
  • 认证JWT Token
  • Markdown处理goldmark + bluemonday
  • 密码加密bcrypt
  • 部署Docker可选

📋 系统要求

  • Go 1.21 或更高版本
  • MySQL 8.0 或更高版本
  • Git

🔧 安装步骤

1. 克隆项目

git clone <repository-url>
cd PBlog

2. 安装依赖

go mod tidy

3. 配置数据库

确保MySQL服务正在运行并创建数据库

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

4. 修改数据库配置

config/database.go 文件中,根据你的数据库配置修改连接信息:

dsn := "root:123456@tcp(localhost:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local"

5. 初始化数据库

运行数据库初始化脚本:

go run scripts/init_db.go

这将创建所有必要的数据表,并生成默认管理员账户:

  • 用户名:admin
  • 邮箱:admin@example.com
  • 密码:admin123

⚠️ 请在首次登录后立即更改管理员密码!

6. 启动服务器

go run main.go

服务器将在 http://localhost:8080 启动。

📱 API 文档

认证接口

方法 端点 描述 需要认证
POST /api/auth/register 用户注册
POST /api/auth/login 用户登录
POST /api/auth/refresh 刷新Token
GET /api/profile 获取用户资料

文章接口

方法 端点 描述 需要认证
GET /api/articles 获取文章列表
GET /api/articles/:slug 获取文章详情
POST /api/articles 创建文章
PUT /api/articles/:id 更新文章
DELETE /api/articles/:id 删除文章
GET /api/articles/:id/versions 获取文章版本历史

评论接口

方法 端点 描述 需要认证
GET /api/comments/article/:article_id 获取文章评论
GET /api/comments/:id 获取单个评论
POST /api/comments/article/:article_id 添加评论
PUT /api/comments/:id 更新评论
DELETE /api/comments/:id 删除评论

媒体接口

方法 端点 描述 需要认证
POST /api/media/upload 上传媒体文件
GET /api/media 获取媒体列表
GET /api/media/:id 获取媒体信息
DELETE /api/media/:id 删除媒体文件

管理员接口

方法 端点 描述 需要管理员权限
GET /api/admin/users 获取用户列表
PUT /api/admin/users/:id/role 更新用户角色
DELETE /api/admin/users/:id 删除用户
DELETE /api/admin/articles 批量删除文章
POST /api/admin/comments/manage 管理评论
GET /api/admin/tags 获取标签列表
DELETE /api/admin/tags/:id 删除标签
GET /api/admin/stats 获取系统统计
GET /api/admin/activities 获取最近活动

🔐 认证方式

API使用JWT Token进行认证。在请求头中添加

Authorization: Bearer <your-jwt-token>

📝 请求示例

用户注册

curl -X POST http://localhost:8080/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "testuser",
    "email": "test@example.com",
    "password": "password123"
  }'

用户登录

curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "test@example.com",
    "password": "password123"
  }'

创建文章

curl -X POST http://localhost:8080/api/articles \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your-token>" \
  -d '{
    "title": "我的第一篇文章",
    "markdown_content": "# 标题\n\n这是文章内容...",
    "status": "published",
    "tags": ["技术", "Go"]
  }'

上传媒体文件

curl -X POST http://localhost:8080/api/media/upload \
  -H "Authorization: Bearer <your-token>" \
  -F "file=@/path/to/your/image.jpg"

🗄️ 数据库结构

系统包含以下核心数据表:

  • users - 用户信息
  • articles - 文章内容
  • tags - 标签数据
  • article_tags - 文章标签关联
  • comments - 评论数据
  • article_versions - 文章版本历史
  • media - 媒体文件记录

📁 项目结构

PBlog/
├── config/          # 配置文件
│   └── database.go
├── handlers/        # 请求处理器
│   ├── auth.go
│   ├── article.go
│   ├── comment.go
│   ├── media.go
│   └── admin.go
├── middleware/      # 中间件
│   └── auth.go
├── models/          # 数据模型
│   ├── user.go
│   ├── article.go
│   ├── tag.go
│   ├── comment.go
│   ├── article_version.go
│   ├── media.go
│   └── init.go
├── services/        # 业务服务
│   └── markdown.go
├── utils/           # 工具函数
│   ├── jwt.go
│   ├── password.go
│   └── slug.go
├── scripts/         # 脚本文件
│   └── init_db.go
├── uploads/         # 上传文件目录
├── main.go          # 主程序入口
├── go.mod           # Go模块文件
└── README.md        # 项目说明

🚀 部署指南

使用Docker部署

  1. 创建 Dockerfile:
FROM golang:1.21-alpine AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -o main .

FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
WORKDIR /root/

COPY --from=builder /app/main .
COPY --from=builder /app/uploads ./uploads

EXPOSE 8080
CMD ["./main"]
  1. 构建和运行:
docker build -t pblog .
docker run -p 8080:8080 pblog

生产环境配置

  1. 修改JWT密钥utils/jwt.go 中更改 JWTSecret
  2. 配置反向代理如Nginx
  3. 启用HTTPS
  4. 配置CDN用于媒体文件访问
  5. 设置数据库连接池参数
  6. 配置日志记录

🔧 配置说明

环境变量

可以通过环境变量配置系统参数:

export DB_HOST=localhost
export DB_PORT=3306
export DB_USER=root
export DB_PASSWORD=123456
export DB_NAME=mydb
export JWT_SECRET=your-secret-key
export SERVER_PORT=8080

文件上传限制

handlers/media.go 中可以配置:

  • maxFileSize: 最大文件大小默认10MB
  • allowedTypes: 允许的文件类型

🧪 测试

运行单元测试:

go test ./...

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建Pull Request

📄 许可证

本项目采用MIT许可证。详情请参阅 LICENSE 文件。

📞 联系方式

  • 项目主页:
  • 问题反馈:/issues
  • 邮箱admin@example.com

🎯 更新日志

v1.0.0 (2025-01-16)

  • 初始版本发布
  • 完整的用户认证系统
  • 文章管理功能
  • 评论系统
  • 媒体上传功能
  • 管理员后台

🔮 未来计划

  • 添加文章分类功能
  • 实现文章搜索
  • 添加邮件通知
  • 支持多语言
  • 添加主题系统
  • 实现缓存机制
  • 添加API限流
  • 支持插件系统

感谢使用灵猴社博客系统!如果您觉得这个项目有用,请给我们一个

🎉 灵猴社博客系统已完成!

我已经完成了整个博客系统的后端实现,包含了您需求文档中的所有功能。让我为您总结一下:

已完成的功能

🏗️ 核心架构

  • Go 1.21+ + Gin 框架
  • GORM 数据库操作
  • MySQL 数据存储
  • JWT 身份认证
  • goldmark + bluemonday Markdown处理和XSS防护

🔐 用户系统

  • 用户注册、登录、权限管理
  • 密码bcrypt加密
  • JWT Token认证
  • 管理员角色系统

📝 文章管理

  • Markdown编辑和渲染
  • 文章版本历史
  • 标签系统
  • SEO友好的URL slug
  • 文章状态管理(草稿、发布、私有)

💬 评论系统

  • 支持Markdown评论
  • 敏感词过滤
  • 评论权限控制

📁 媒体管理

  • 文件上传(图片、视频)
  • 文件类型和大小限制
  • 媒体文件管理

🔧 管理功能

  • 用户管理
  • 文章管理
  • 评论管理
  • 标签管理
  • 系统统计

📂 项目文件结构

PBlog/
├── config/              # 数据库配置
├── handlers/            # API处理器
├── middleware/          # 中间件
├── models/             # 数据模型
├── services/           # 业务服务
├── utils/              # 工具函数
├── scripts/            # 脚本文件
├── uploads/            # 上传文件目录
├── main.go             # 主程序
├── README.md           # 完整文档
├── Dockerfile          # Docker配置
├── docker-compose.yml  # Docker编排
└── test_api.sh         # API测试脚本

🚀 快速开始

1. 初始化数据库

# 创建数据库
mysql -u root -p -e "CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 运行初始化脚本
go run scripts/init_db.go

2. 启动服务

go run main.go

3. 测试API

# 运行测试脚本
./test_api.sh

🎯 默认账户

  • 管理员账户
    • 邮箱: admin@example.com
    • 密码: admin123
    • ⚠️ 请首次登录后立即修改密码

📋 API端点概览

  • 认证: /api/auth/
  • 文章: /api/articles/
  • 评论: /api/comments/
  • 媒体: /api/media/
  • 管理: /api/admin/
  • 健康检查: /health

🔧 配置说明

数据库配置在 config/database.go 中:

  • 主机: localhost
  • 数据库: mydb
  • 用户: root
  • 密码: 123456

📚 完整文档

详细的API文档、部署指南、配置说明都在 README.md 文件中。

🐳 Docker部署

<code_block_to_apply_changes_from>

这个博客系统已经完全实现了您需求文档中的所有功能点,包括安全性、性能优化、扩展性等。您可以立即开始使用!

您还需要我帮助您进行其他配置或有什么问题需要解答吗?