# 瑞小美系统技术栈标准与字符标准 ## 技术栈 ### 后端 | 技术 | 版本/说明 | | --- | --- | | **语言** | 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`
轩辕镜像:`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) |