基于 JDK8 + Spring Boot + MyBatis Plus + Vue 3 + Vite + MySQL 的全栈 Wiki 系统。
| 技术 | 版本 |
|---|---|
| JDK | 1.8 |
| Spring Boot | 2.7.18 |
| MyBatis Plus | 3.5.5 |
| Spring Security | 5.7.11 |
| JJWT | 0.11.5 |
| MySQL Connector | 8.0.33 |
| Knife4j | 4.4.0 |
| Lombok | 1.18.30 |
| 技术 | 版本 |
|---|---|
| Vue | 3.5.x |
| Vite | 6.x |
| Element Plus | 2.14.x |
| Vue Router | 4.5.x |
| Pinia | 3.0.x |
| vue-i18n | 11.x |
| md-editor-v3 | 5.x |
| Axios | 1.x |
- JWT 认证 - 登录/注册/刷新 Token
- 三级权限 - 管理员(ADMIN)、编辑(EDITOR)、用户(USER)
- 编辑申请 - 用户可申请成为编辑,管理员审核
- 文章管理 - Markdown 编辑、分类、标签、全文搜索
- 版本历史 - 文章每次编辑自动保存版本
- 评论系统 - 文章评论与回复
- 附件上传 - 文件上传与管理
- 个人资料 - 修改昵称/邮箱/头像/密码
- 主题切换 - Dark/Light 实时切换
- 国际化 - 中英文 i18n
- 瑞士国际风格 - 简洁扁平化 UI 设计
- 逻辑删除 - 所有表使用 is_delete 字段
- 密码加密 - BCrypt 加密存储
- K8s 部署 - 完整的 Kubernetes 部署清单
Jwiki_qwen/
├── backend/ # Spring Boot 后端
│ ├── pom.xml
│ └── src/main/java/com/jwiki/
│ ├── JwikiApplication.java
│ ├── config/ # 配置类
│ ├── common/ # 通用类(Result/异常/常量)
│ ├── security/ # JWT + Spring Security
│ ├── entity/ # 实体类
│ ├── mapper/ # MyBatis Plus Mapper
│ ├── service/ # 业务逻辑
│ ├── controller/ # REST API
│ └── dto/ # 数据传输对象
├── frontend/ # Vue 3 前端
│ ├── package.json
│ ├── vite.config.js
│ └── src/
│ ├── router/ # 路由配置
│ ├── store/ # Pinia 状态管理
│ ├── api/ # Axios API 封装
│ ├── i18n/ # 国际化语言包
│ ├── styles/ # 全局样式
│ ├── layouts/ # 布局组件
│ ├── components/ # 通用组件
│ └── views/ # 页面组件
├── sql/
│ └── init.sql # 数据库初始化脚本
├── docker/ # Docker 配置
│ ├── Dockerfile.backend
│ ├── Dockerfile.frontend
│ └── nginx.conf
└── k8s/ # Kubernetes 部署清单
├── configmap.yaml
├── mysql-deployment.yaml
├── backend-deployment.yaml
├── frontend-deployment.yaml
└── ingress.yaml
- JDK 1.8+
- Maven 3.6+
- Node.js 18+
- MySQL 8.0+
mysql -u root -p < sql/init.sqlcd backend
mvn spring-boot:run后端默认运行在 http://localhost:8080
API 文档: http://localhost:8080/doc.html
cd frontend
npm install
npm run dev前端默认运行在 http://localhost:5173
- 用户名:
admin - 密码:
admin123
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/auth/login | 登录 |
| POST | /api/auth/register | 注册 |
| POST | /api/auth/refresh | 刷新 Token |
| 方法 | 路径 | 说明 | 权限 |
|---|---|---|---|
| GET | /api/users/me | 当前用户信息 | 登录用户 |
| PUT | /api/users/me | 修改个人资料 | 登录用户 |
| GET | /api/users | 用户列表 | ADMIN |
| PUT | /api/users/{id}/role | 修改角色 | ADMIN |
| DELETE | /api/users/{id} | 删除用户 | ADMIN |
| 方法 | 路径 | 说明 | 权限 |
|---|---|---|---|
| GET | /api/articles | 文章列表 | 公开 |
| GET | /api/articles/{id} | 文章详情 | 公开 |
| POST | /api/articles | 创建文章 | EDITOR+ |
| PUT | /api/articles/{id} | 更新文章 | EDITOR+ |
| DELETE | /api/articles/{id} | 删除文章 | EDITOR+ |
| GET | /api/articles/{id}/versions | 版本历史 | 公开 |
| GET | /api/articles/{id}/comments | 评论列表 | 公开 |
| POST | /api/articles/{id}/comments | 发表评论 | 登录用户 |
完整的 CRUD API,详见 Swagger 文档。
| 方法 | 路径 | 说明 | 权限 |
|---|---|---|---|
| POST | /api/editor-applications | 申请成为编辑 | 登录用户 |
| GET | /api/editor-applications | 申请列表 | ADMIN |
| GET | /api/editor-applications/mine | 我的申请 | 登录用户 |
| PUT | /api/editor-applications/{id}/approve | 通过申请 | ADMIN |
| PUT | /api/editor-applications/{id}/reject | 拒绝申请 | ADMIN |
cd backend
mvn clean package -DskipTests
java -jar target/jwiki-backend-1.0.0.jarcd frontend
npm run build构建产物在 frontend/dist/ 目录。
# 构建后端镜像
docker build -f docker/Dockerfile.backend -t jwiki-backend:latest backend/
# 构建前端镜像(在仓库根目录执行)
docker build -f docker/Dockerfile.frontend -t jwiki-frontend:latest .# 应用所有配置
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/init-sql-configmap.yaml
kubectl apply -f k8s/mysql-deployment.yaml
kubectl apply -f k8s/backend-deployment.yaml
kubectl apply -f k8s/frontend-deployment.yaml
kubectl apply -f k8s/ingress.yaml配置 hosts 或 DNS 将 jwiki.local 指向 Ingress IP。
| 操作 | ADMIN | EDITOR | USER |
|---|---|---|---|
| 用户管理 | ✅ | - | - |
| 文章 CRUD | ✅ | ✅ (自己的) | - |
| 分类/标签管理 | ✅ | ✅ | - |
| 评论管理 | ✅ | ✅ | - |
| 发表评论 | ✅ | ✅ | ✅ |
| 查看文章 | ✅ | ✅ | ✅ |
| 个人资料修改 | ✅ | ✅ | ✅ |
| 附件上传 | ✅ | ✅ | - |
| 申请成为编辑 | - | - | ✅ |
| 审核编辑申请 | ✅ | - | - |
MIT