ApexBlog 是一个基于 Spring Boot 3.x 开发的轻量化个人博客系统,采用前后端分离架构,追求极致的性能和简洁的设计。
本项目是 ApexBlog 的后端服务,完整的博客系统还包括:
- 🔧 后端服务: apex_blog (当前项目)
- 🎨 前台界面: apex_ft - 博客前台展示页面
- ⚙️ 后台管理: apex_admin - 博客后台管理系统
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前台界面 │ │ 后台管理 │ │ 后端服务 │
│ (apex_ft) │ │ (apex_admin) │ │ (apex_blog) │
│ │ │ │ │ │
│ - 文章浏览 │ │ - 文章管理 │ │ - RESTful API │
│ - 分类标签 │ │ - 用户认证 │ │ - 数据库操作 │
│ - 搜索功能 │ │ - 数据统计 │ │ - 缓存管理 │
│ - RSS订阅 │ │ - 系统配置 │ │ - 邮件服务 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ 数据存储 │
│ │
│ - MySQL 数据库 │
│ - 内存缓存 │
│ - 文件存储 │
└─────────────────┘
- 后端框架: Spring Boot 3.2.0
- Java版本: Java 17
- 构建工具: Gradle 8.5
- 数据库: MySQL 8.0
- 缓存: Spring Cache (内存缓存)
- 安全认证: Spring Security + JWT
- API文档: SpringDoc OpenAPI 3
- 容器化: Docker + Docker Compose
- ✅ 文章浏览(支持Markdown渲染)
- ✅ 文章搜索(全文搜索)
- ✅ 分类和标签浏览
- ✅ 作品集展示
- ✅ 友链展示
- ✅ RSS订阅
- ✅ 邮箱订阅
- ✅ 访问统计
- ✅ 文章管理(CRUD、发布、归档)
- ✅ 分类和标签管理
- ✅ 作品集管理
- ✅ 友链管理
- ✅ 邮箱订阅管理
- ✅ 访问统计查看
- ✅ 用户认证(仅限博主登录)
- ✅ 内存缓存优化
- ✅ 异步任务处理
- ✅ 访问统计(IP去重)
- ✅ 邮件通知
- ✅ 全文搜索
- ✅ RESTful API
- ✅ Docker部署
- ✅ 性能监控
- Java 17+
- MySQL 8.0+
- Docker & Docker Compose(可选)
- 克隆项目
git clone https://github.com/08820048/apex_blog.git
cd apex_blog- 配置数据库
CREATE DATABASE apex_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;- 配置环境变量
cp .env.example .env
# 编辑 .env 文件,配置数据库和邮件等信息- 运行应用
./gradlew bootRun- 访问应用
- 使用部署脚本
# 启动所有服务
./deploy.sh start
# 启动服务并包含Nginx
./deploy.sh start --with-nginx
# 查看服务状态
./deploy.sh status
# 查看日志
./deploy.sh logs
# 停止服务
./deploy.sh stop- 手动部署
# 复制环境变量文件
cp .env.example .env
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f启动应用后,访问 Swagger UI 查看完整的API文档。
GET /articles- 获取文章列表GET /articles/{id}- 获取文章详情GET /articles/search- 搜索文章GET /categories- 获取分类列表GET /tags- 获取标签列表GET /portfolios- 获取作品集GET /friend-links- 获取友链GET /rss/feed.xml- RSS订阅POST /email-subscribers/subscribe- 邮箱订阅
POST /auth/login- 用户登录POST /admin/articles- 创建文章PUT /admin/articles/{id}- 更新文章DELETE /admin/articles/{id}- 删除文章
主要配置文件位于 src/main/resources/application.yml:
server:
port: 8888 # 应用端口
spring:
datasource:
url: jdbc:mysql://localhost:3306/apex_blog
username: root
password: ${DB_PASSWORD:password}
cache:
type: simple # 使用简单内存缓存
jwt:
secret: ${JWT_SECRET:your-secret-key}
expiration: 86400000 # 24小时
blog:
title: "Xuyi's Blog"
description: "个人技术博客"
author: "xuyi"
url: ${BLOG_URL:http://localhost:8888}# 数据库配置
DB_PASSWORD=your_password
# JWT配置
JWT_SECRET=your-jwt-secret
# 邮件配置
MAIL_HOST=smtp.gmail.com
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
# 博客配置
BLOG_URL=https://yourdomain.com- 文章列表缓存:2小时
- 文章详情缓存:2小时
- 分类标签缓存:6小时
- 搜索结果缓存:30分钟
- 访问统计缓存:10分钟
- 使用索引优化查询
- 连接池配置
- 批量操作优化
- 分页查询
- 邮件发送异步化
- 访问统计异步记录
- 缓存预热
- 使用外部MySQL服务
- 配置SSL证书
- 使用Nginx反向代理
- 配置日志收集
- 设置监控告警
- 修改默认端口
- 配置强密码
- 启用HTTPS
- 配置防火墙
- 定期备份数据
src/main/java/com/xuyi/blog/
├── config/ # 配置类
├── controller/ # 控制器
├── dto/ # 数据传输对象
├── entity/ # 实体类
├── exception/ # 异常处理
├── repository/ # 数据访问层
├── security/ # 安全配置
├── service/ # 业务逻辑层
└── util/ # 工具类
- 遵循RESTful API设计
- 使用统一的响应格式
- 完善的异常处理
- 详细的API文档
- 单元测试覆盖
# 运行所有测试
./gradlew test
# 运行特定测试
./gradlew test --tests ArticleServiceTest
# 生成测试报告
./gradlew jacocoTestReport- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- 作者: xuyi
- 邮箱: xuyi@example.com
- 博客: https://yourblog.com
- 初始版本发布
- 完成基础功能开发
- 支持Docker部署
- 完善API文档
如果这个项目对你有帮助,请给个 ⭐️ 支持一下!







