# My Blog **Repository Path**: xiaofei_cant_fei/myblog ## Basic Information - **Project Name**: My Blog - **Description**: This is my blog - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 0 - **Created**: 2021-03-21 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MyBlog Platform 一个基于 Java 21、Spring Boot 3、Next.js 15 与 Vue 3 构建的现代化博客内容平台。 ## 功能概览 - 公开站支持文章列表、文章详情、分类浏览、标签展示、全文搜索与评论提交 - 管理台支持文章管理、分类管理、标签管理、评论审核与媒体上传 - 后端采用 Maven 多模块架构,分离身份、内容与共享能力 - 数据库通过 Flyway 管理初始化与演进脚本 - 安全体系采用 Spring Security 6 + JWT ## 目录结构 ```text apps/ blog-api/ Spring Boot API 启动模块 modules/ blog-identity/ 身份与认证模块 blog-content/ 内容、分类、标签、评论与媒体模块 shared/ blog-common-core/ 通用模型与响应 blog-common-web/ Web 层异常处理 blog-common-security/ JWT 与安全工具 frontend/ web/ Next.js 公开站 admin/ Vue 3 管理台 deploy/ docker/ 本地 MySQL 编排 ``` ## 环境准备 - JDK 21 - Maven 3.9+ - Node.js 20+ - MySQL 8(本地开发可使用 Docker) ## 环境变量 复制 `.env.example` 并根据本地环境填写: ```bash DB_URL=jdbc:mysql://localhost:3306/myblog_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true DB_USERNAME=myblog_app DB_PASSWORD=replace-with-a-strong-database-password DB_DRIVER=com.mysql.cj.jdbc.Driver JWT_SECRET=replace-with-a-random-secret-key-at-least-32-chars JWT_ISSUER=myblog-platform JWT_EXPIRY_MINUTES=120 SERVER_PORT=8080 ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000,http://localhost:5173,http://127.0.0.1:5173 MEDIA_STORAGE_PATH=.uploads MEDIA_ALLOWED_CONTENT_TYPES=image/png,image/jpeg,image/webp,image/gif,image/svg+xml MULTIPART_MAX_FILE_SIZE=10MB MULTIPART_MAX_REQUEST_SIZE=10MB NEXT_PUBLIC_API_BASE_URL=http://localhost:8080 VITE_API_BASE_URL=http://localhost:8080 ``` 生产部署可参考 `.env.production.example`。 ## 本地启动 ### 1. 启动数据库 ```bash docker compose -f deploy/docker/docker-compose.yml up -d ``` ### 2. 启动后端 ```bash mvn -pl apps/blog-api -am test mvn -pl apps/blog-api spring-boot:run ``` ### 3. 启动公开站 ```bash cd frontend/web npm install npm run dev ``` ### 4. 启动管理台 ```bash cd frontend/admin npm install npm run dev ``` ## API 概览 ### 公开接口 - `GET /api/v1/posts`:获取最新已发布文章 - `GET /api/v1/posts/search?q=关键词`:搜索已发布文章 - `GET /api/v1/posts/{slug}`:获取文章详情 - `GET /api/v1/posts/{slug}/comments`:获取已审核评论 - `POST /api/v1/posts/{slug}/comments`:提交评论 - `GET /api/v1/categories`:获取分类列表 - `GET /api/v1/categories/{slug}/posts`:获取分类文章 - `GET /api/v1/tags`:获取标签列表 - `GET /uploads/{fileName}`:访问已上传媒体文件 ### 后台接口 - `POST /api/v1/auth/login`:后台登录 - `GET /api/v1/auth/me`:当前用户信息 - `GET /api/v1/admin/posts`:文章列表 - `POST /api/v1/admin/posts`:创建文章 - `PUT /api/v1/admin/posts/{id}`:更新文章 - `DELETE /api/v1/admin/posts/{id}`:删除文章 - `GET /api/v1/admin/categories`:分类列表 - `POST /api/v1/admin/categories`:创建分类 - `PUT /api/v1/admin/categories/{id}`:更新分类 - `DELETE /api/v1/admin/categories/{id}`:删除分类 - `GET /api/v1/admin/tags`:标签列表 - `POST /api/v1/admin/tags`:创建标签 - `PUT /api/v1/admin/tags/{id}`:更新标签 - `DELETE /api/v1/admin/tags/{id}`:删除标签 - `GET /api/v1/admin/comments`:评论列表 - `PUT /api/v1/admin/comments/{id}/review`:审核评论 - `DELETE /api/v1/admin/comments/{id}`:删除评论 - `GET /api/v1/admin/media`:媒体列表 - `POST /api/v1/admin/media/upload`:上传媒体 - `DELETE /api/v1/admin/media/{fileName}`:删除媒体 ## 健康检查 - 应用健康检查地址:`GET /actuator/health` - 本地默认地址:`http://localhost:8080/actuator/health` ## 部署建议 ### 后端部署 - 通过环境变量提供 `DB_URL`、`DB_USERNAME`、`DB_PASSWORD`、`JWT_SECRET` - 生产环境使用 `SPRING_PROFILES_ACTIVE=prod` - 使用 `mvn -pl apps/blog-api -am package` 生成可部署产物 - 启动前确认数据库已创建且网络可达 - 首次启动会自动执行 Flyway 数据库迁移 - 上传文件类型、大小限制、CORS 来源和媒体目录都由环境变量控制 ### 前端部署 - 公开站通过 `NEXT_PUBLIC_API_BASE_URL` 指向后端 API - 管理台通过 `VITE_API_BASE_URL` 指向后端 API - 构建后分别部署 `frontend/web` 与 `frontend/admin` 产物 - 生产环境需确认后端 CORS 已按实际域名配置 ### 容器化部署 - 后端镜像:`apps/blog-api/Dockerfile` - 公开站镜像:`frontend/web/Dockerfile` - 管理台镜像:`frontend/admin/Dockerfile` - 全栈编排:`deploy/docker/docker-compose.full.yml` ```bash docker compose --env-file .env.production.example -f deploy/docker/docker-compose.full.yml up -d --build ``` ## 生产构建 ### 后端 ```bash mvn -pl apps/blog-api -am package ``` ### 前端 ```bash cd frontend/web npm run build ``` ```bash cd frontend/admin npm run build ``` ## 说明 - Flyway 启动时会自动执行数据库迁移 - 媒体文件默认写入 `MEDIA_STORAGE_PATH` - 管理台登录账号由后端数据初始化或业务系统自行维护 - 开发环境默认启用 `dev` profile,生产环境请显式指定 `prod`