feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

View File

@@ -0,0 +1,190 @@
# 瑞小美系统技术栈标准与字符标准
## 技术栈
### 后端
| 技术 | 版本/说明 |
| --- | --- |
| **语言** | Python 3.11 |
| **框架** | FastAPI |
| **ORM** | SQLAlchemy |
| **数据库** | MySQL 8.0 |
| **认证** | OAuth |
### 前端
| 类别 | 首选技术 | 说明 |
| --- | --- | --- |
| **语言** | TypeScript | 类型安全,提升代码质量 |
| **框架** | Vue 3 | 统一前端框架 |
| **构建工具** | Vite | 快速开发体验 |
| **包管理器** | pnpm | 高效、节省空间 |
| **UI组件库** | Element Plus / Ant Design Vue | 企业级UI |
| **CSS方案** | Tailwind CSS | 可与组件库共存 |
| **HTTP客户端** | Axios | 统一请求库 |
| **状态管理** | Pinia | 按需使用 |
| **代码规范** | ESLint | 必须配置 |
### 前端(特殊场景可选)
| 技术 | 适用场景 |
| --- | --- |
| **qiankun** | 微前端架构整合 |
| **Uni-app** | 小程序/跨平台开发 |
| **Turborepo** | Monorepo管理 |
| **React/Next.js** | 仅用于遗留系统维护 |
### 基础设施
| 技术 | 说明 |
| --- | --- |
| **容器化** | Docker + Docker Compose |
| **反向代理** | Nginx独立 Docker 容器部署) |
| **网络** | Docker Bridge Network |
| **SSL** | Let's Encrypt (Certbot),在主机申请后挂载到容器 |
---
## 部署规范
### 基本原则
| 规范 | 说明 |
| --- | --- |
| **容器化部署** | 所有服务必须部署在 Docker 容器中,不可在容器外部署 |
| **前后端分离** | 前后端必须分离部署在不同 Docker 容器中,互相独立、解耦 |
| **服务编排** | 必须使用 Docker Compose 管理多服务与依赖关系 |
| **统一入口** | 必须通过 Nginx 反向代理提供统一入口,后端不直接暴露公网 |
| **热重载** | 开发环境必须启用代码热重载HMR/auto-reload |
### Nginx 配置规范
| 规范 | 说明 |
| --- | --- |
| **独立部署** | Nginx 部署在独立 Docker 容器中 |
| **路由转发** | 根据不同子域名转发到对应的 Docker 容器 |
| **SSL 终止** | 仅在 Nginx 层配置 SSL 证书 |
| **端口暴露** | 仅 Nginx 容器暴露 80/443 端口,其他服务端口绑定 127.0.0.1 |
### 镜像源配置
| 类型 | 首选镜像 | 备用镜像 |
| --- | --- | --- |
| **Docker Registry** | 阿里云:`https://kjphlxn2.mirror.aliyuncs.com` | DaoCloud`https://docker.m.daocloud.io`<br>轩辕镜像:`https://docker.xuanyuan.me` |
| **APT 源** | 阿里云:`http://mirrors.aliyun.com/debian/` | - |
| **通用镜像站** | 阿里云:`https://developer.aliyun.com/mirror` | - |
### 镜像版本规范
| 规范 | 说明 |
| --- | --- |
| **禁用 latest** | ACR 镜像加速器已停止同步 latest 标签 |
| **指定版本号** | 必须使用具体版本号,如 `python:3.11.9-slim` |
### 健康检查
| 规范 | 说明 |
| --- | --- |
| **必须配置** | 所有服务容器必须配置健康检查 |
| **检查端点** | 后端服务应提供 `/health``/api/health` 端点 |
| **检查间隔** | 建议 30 秒检查一次 |
| **超时设置** | 建议 10 秒超时3 次重试 |
健康检查配置示例:
```yaml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
```
### 日志管理
| 规范 | 说明 |
| --- | --- |
| **日志格式** | 统一使用 JSON 格式,便于收集分析 |
| **日志轮转** | 必须配置日志轮转,避免磁盘撑满 |
| **日志驱动** | Docker 容器使用 `json-file` 驱动并限制大小 |
日志配置示例:
```yaml
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
### 资源限制
| 规范 | 说明 |
| --- | --- |
| **内存限制** | 所有容器应设置内存上限,防止单个服务耗尽资源 |
| **CPU 限制** | 根据服务负载合理分配 CPU 配额 |
| **建议配置** | 前端容器 256M-512M后端容器 512M-1G |
资源限制配置示例:
```yaml
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M
```
### 网络隔离
| 规范 | 说明 |
| --- | --- |
| **自定义网络** | 不同项目使用独立 Docker 网络,避免容器间意外通信 |
| **内部通信** | 容器间使用容器名通信,不使用硬编码 IP |
| **网络命名** | 网络名称格式:`项目名_network`,如 `scrm_network` |
| **DNS 刷新** | 后端容器重启后,需执行 `docker exec nginx_proxy nginx -s reload` 刷新 nginx DNS 缓存 |
网络配置示例:
```yaml
networks:
scrm_network:
driver: bridge
```
### 敏感信息管理
| 规范 | 说明 |
| --- | --- |
| **禁止硬编码** | 密码、密钥等敏感信息禁止硬编码到代码或镜像中 |
| **环境变量** | 使用环境变量传递配置,通过 `.env` 文件管理 |
| **文件权限** | `.env` 文件权限设置为 600禁止提交到 Git |
| **生产环境** | 生产环境使用 Docker Secrets 管理敏感数据 |
环境变量配置示例:
```yaml
env_file:
- .env
environment:
- DATABASE_URL=${DATABASE_URL}
- SECRET_KEY=${SECRET_KEY}
```
---
## 字符标准
| 项目 | 标准 |
| --- | --- |
| **字符编码** | UTF-8 |
| **数据库字符集** | utf8mb4 (支持 emoji 表情) |
| **数据库排序规则** | utf8mb4_unicode_ci |
| **API 响应** | JSON (UTF-8 编码) |
| **日期格式** | ISO 8601 (YYYY-MM-DDTHH:mm:ss) |
| **时区** | Asia/Shanghai (UTC+8) |