All checks were successful
continuous-integration/drone/push Build is passing
- 修复字符编码问题(之前显示乱码) - 添加完整的项目说明和技术栈介绍 - 记录 Docker 部署方法和 CI/CD 流程 - 添加常见问题解答(登录接口错误、容器启动失败等) - 完善生产架构图和网络拓扑说明 - 补充开发规范和配置说明 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
271 lines
6.0 KiB
Markdown
271 lines
6.0 KiB
Markdown
# 武术赛事通 - 前端项目
|
||
|
||
基于 Vue 3 + Vite + Element Plus 构建
|
||
|
||
## 🌐 在线访问
|
||
|
||
- **生产环境**: https://martial.johnsion.club
|
||
- **后端 API**: https://martial-api.johnsion.club
|
||
- **API 文档**: https://martial-doc.johnsion.club
|
||
|
||
## 📦 技术栈
|
||
|
||
- **框架**: Vue 3.4 (Composition API)
|
||
- **构建工具**: Vite 5
|
||
- **UI 组件**: Element Plus
|
||
- **表单/表格**: Avue
|
||
- **HTTP 库**: Axios
|
||
- **路由**: Vue Router 4
|
||
- **状态管理**: Vuex 4
|
||
- **样式**: Sass/SCSS
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
martial-web/
|
||
├── src/
|
||
│ ├── main.js # 应用入口
|
||
│ ├── App.vue # 根组件
|
||
│ ├── router/ # 路由配置
|
||
│ ├── store/ # Vuex 状态管理
|
||
│ ├── views/ # 页面组件
|
||
│ ├── components/ # 通用组件
|
||
│ ├── api/ # API 接口
|
||
│ └── utils/ # 工具函数
|
||
├── public/ # 静态资源
|
||
├── .env.development # 开发环境配置
|
||
├── .env.production # 生产环境配置
|
||
├── vite.config.js # Vite 配置
|
||
├── nginx.conf # Nginx 配置(生产环境容器使用)
|
||
├── Dockerfile # 完整构建 Dockerfile
|
||
├── Dockerfile.deploy # 部署 Dockerfile
|
||
└── .drone.yml # Drone CI/CD 配置
|
||
```
|
||
|
||
## 🚀 本地开发
|
||
|
||
### 环境要求
|
||
|
||
- Node.js >= 18
|
||
- npm >= 9
|
||
|
||
### 安装依赖
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### 开发运行
|
||
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
访问 http://localhost:5173
|
||
|
||
### 生产构建
|
||
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
构建产物在 `dist/` 目录
|
||
|
||
### 预览生产构建
|
||
|
||
```bash
|
||
npm run serve
|
||
```
|
||
|
||
## 🐳 Docker 部署
|
||
|
||
### 方法一:完整构建(开发/测试)
|
||
|
||
```bash
|
||
docker build -t martial/frontend:latest -f Dockerfile .
|
||
docker run -d -p 80:80 martial/frontend:latest
|
||
```
|
||
|
||
### 方法二:部署已构建产物(生产推荐)
|
||
|
||
```bash
|
||
# 先本地构建
|
||
npm run build
|
||
|
||
# 使用 Dockerfile.deploy 轻量化部署
|
||
docker build -t martial/frontend:latest -f Dockerfile.deploy .
|
||
|
||
# 运行容器
|
||
docker run -d \
|
||
--name martial-frontend \
|
||
--restart always \
|
||
-p 5173:80 \
|
||
--network martial_martial-network \
|
||
-e TZ=Asia/Shanghai \
|
||
martial/frontend:latest
|
||
```
|
||
|
||
## 🔄 CI/CD 自动部署
|
||
|
||
项目使用 Drone CI/CD 进行自动化部署。
|
||
|
||
### 部署流程
|
||
|
||
当推送到 `main` 分支时,自动触发:
|
||
|
||
1. **安装依赖** - `npm install`
|
||
2. **构建项目** - `npm run build`
|
||
3. **传输文件** - SCP 上传 dist、Dockerfile.deploy、nginx.conf 到服务器
|
||
4. **构建镜像** - 在服务器上执行 `docker build -f Dockerfile.deploy`
|
||
5. **部署容器** - 停止旧容器,启动新容器
|
||
6. **健康检查** - 验证服务可访问
|
||
|
||
### 查看构建状态
|
||
|
||
访问 https://martial-ci.johnsion.club
|
||
|
||
## ⚙️ 配置说明
|
||
|
||
### 环境变量
|
||
|
||
**开发环境** (`.env.development`):
|
||
```env
|
||
VITE_APP_API=/api # API 前缀(开发时走 Vite 代理)
|
||
```
|
||
|
||
**生产环境** (`.env.production`):
|
||
```env
|
||
VITE_APP_API= # 留空(因为 BladeX 端点路径已完整)
|
||
```
|
||
|
||
### Nginx 配置
|
||
|
||
生产环境 nginx 配置(`nginx.conf`):
|
||
|
||
```nginx
|
||
# 前端路由(Vue Router history 模式)
|
||
location / {
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
|
||
# API 代理到后端(通过宿主机网关地址)
|
||
location /blade-auth/ {
|
||
proxy_pass http://172.21.0.1:8123/blade-auth/;
|
||
}
|
||
|
||
location /blade-system/ {
|
||
proxy_pass http://172.21.0.1:8123/blade-system/;
|
||
}
|
||
|
||
location /api/ {
|
||
proxy_pass http://172.21.0.1:8123/api/;
|
||
}
|
||
```
|
||
|
||
### Vite 配置
|
||
|
||
开发环境代理配置(`vite.config.js`):
|
||
|
||
```js
|
||
server: {
|
||
proxy: {
|
||
'/api': {
|
||
target: 'http://localhost:8123',
|
||
changeOrigin: true
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## 🔧 常见问题
|
||
|
||
### 问题1: "No endpoint POST /api/blade-auth/oauth/token"
|
||
|
||
**原因**: 错误配置 `VITE_APP_API` 为 `/api` 前缀,导致请求 `/api/blade-auth/oauth/token`
|
||
|
||
**解决**: 检查 `.env.production` 中 `VITE_APP_API=`(留空)
|
||
|
||
### 问题2: 容器启动报 "host not found in upstream martial-backend"
|
||
|
||
**原因**: nginx.conf 中使用 Docker 服务名 `martial-backend`,但容器无法解析
|
||
|
||
**解决**: 使用宿主机网关地址 `172.21.0.1:8123` 代替
|
||
|
||
### 问题3: 端口 80 占用
|
||
|
||
**原因**: 宿主机 Caddy 已占用 80 端口
|
||
|
||
**解决**: 前端容器使用其他端口(如 5173),由 Caddy 反向代理
|
||
|
||
## 📝 开发规范
|
||
|
||
### 代码风格
|
||
|
||
- 使用 ESLint + Prettier
|
||
- 遵循 Vue 3 组合式 API 最佳实践
|
||
- 组件命名使用PascalCase
|
||
- 文件命名使用kebab-case
|
||
|
||
### Git 提交规范
|
||
|
||
```
|
||
feat: 新功能
|
||
fix: 修复 Bug
|
||
docs: 文档更新
|
||
style: 代码格式调整
|
||
refactor: 重构
|
||
perf: 性能优化
|
||
test: 测试相关
|
||
chore: 构建/工具配置
|
||
```
|
||
|
||
## 🏗️ 生产架构
|
||
|
||
### 部署拓扑
|
||
|
||
```
|
||
互联网
|
||
↓
|
||
Cloudflare CDN
|
||
↓
|
||
Caddy (80/443端口,自动 HTTPS)
|
||
↓
|
||
martial.johnsion.club → localhost:5173 (前端 Nginx 容器)
|
||
├── 静态文件 → 直接返回 Vue 应用
|
||
└── /blade-auth, /blade-system, /api → 代理到后端 172.21.0.1:8123
|
||
```
|
||
|
||
### 网络架构
|
||
|
||
```
|
||
Docker Network: martial_martial-network (bridge)
|
||
├── martial-frontend (172.21.0.x) - 端口映射 5173:80
|
||
├── martial-mysql (172.21.0.x) - 端口映射 33066:3306
|
||
└── martial-redis (172.21.0.x) - 端口映射 63379:6379
|
||
|
||
宿主机:
|
||
├── Caddy (80/443) - 反向代理服务
|
||
├── Java 后端 (8123) - martial-master 应用
|
||
└── Drone CI/CD (8080) - 自动化部署
|
||
```
|
||
|
||
## 🔐 安全考虑
|
||
|
||
- 生产环境启用 HTTPS 证书(Caddy 自动签发)
|
||
- API 接口通过 Nginx 代理,隔离后端
|
||
- 敏感配置通过 Drone Secrets 管理
|
||
- 容器间网络隔离,仅暴露必要端口
|
||
|
||
## 📚 相关链接
|
||
|
||
- [后端仓库](https://git.waypeak.work/martial/martial-master)
|
||
- [BladeX 框架](https://bladex.cn)
|
||
- [Vue 3 文档](https://cn.vuejs.org/)
|
||
- [Element Plus](https://element-plus.org/)
|
||
- [Vite 文档](https://vitejs.dev/)
|
||
|
||
## 👥 贡献者
|
||
|
||
- **开发者**: JohnSion
|
||
- **AI 助手**: Claude Code
|