11 KiB
11 KiB
灵猴社博客系统 (PBlog)
一个基于Go语言开发的现代化博客系统,支持Markdown编辑、用户管理、评论系统、媒体上传等功能。
🚀 特性
- 用户认证:完整的用户注册、登录、权限管理系统
- 文章管理:支持Markdown编辑、版本历史、定时发布
- 评论系统:实时评论、敏感词过滤
- 媒体上传:图片、视频文件上传管理
- 标签系统:文章分类和标签管理
- 管理后台:完善的管理员功能
- 安全防护:XSS防护、SQL注入防护、JWT认证
- SEO优化:友好的URL、自动生成摘要
🛠️ 技术栈
- 后端框架:Go 1.21+ + Gin
- 数据库:MySQL 8.0+
- ORM:GORM
- 认证: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部署
- 创建
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"]
- 构建和运行:
docker build -t pblog .
docker run -p 8080:8080 pblog
生产环境配置
- 修改JWT密钥:在
utils/jwt.go
中更改JWTSecret
- 配置反向代理(如Nginx)
- 启用HTTPS
- 配置CDN用于媒体文件访问
- 设置数据库连接池参数
- 配置日志记录
🔧 配置说明
环境变量
可以通过环境变量配置系统参数:
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 ./...
🤝 贡献指南
- Fork 项目
- 创建功能分支 (
git checkout -b feature/amazing-feature
) - 提交更改 (
git commit -m 'Add some amazing feature'
) - 推送到分支 (
git push origin feature/amazing-feature
) - 创建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>
这个博客系统已经完全实现了您需求文档中的所有功能点,包括安全性、性能优化、扩展性等。您可以立即开始使用!
您还需要我帮助您进行其他配置或有什么问题需要解答吗?