# 部署运维 **本文引用的文件** - [backend/app/main.py](file://backend/app/main.py) - [backend/app/core/config.py](file://backend/app/core/config.py) - [backend/.env.example](file://backend/.env.example) - [backend/requirements.txt](file://backend/requirements.txt) - [backend/init_db.py](file://backend/init_db.py) - [backend/app/core/database.py](file://backend/app/core/database.py) - [backend/app/core/logging_config.py](file://backend/app/core/logging_config.py) - [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py) - [docs/backend.md](file://docs/backend.md) - [docs/database.md](file://docs/database.md) - [frontend/package.json](file://frontend/package.json) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本指南面向医院绩效系统的生产部署与运维,覆盖以下主题: - 生产环境部署流程与环境变量配置 - Docker 容器化部署与 Nginx 反向代理、SSL 证书管理 - 数据库备份策略、日志管理与性能监控 - 负载均衡、高可用架构与灾难恢复计划 - 运维脚本、自动化部署与版本升级流程 - 安全加固、漏洞扫描与合规性检查 ## 项目结构 后端采用 FastAPI + SQLAlchemy 2.0 异步架构,前端为 Vue 3 + Vite。系统通过 .env 管理运行时配置,支持 Alembic 数据库迁移。 ```mermaid graph TB subgraph "后端" A["app/main.py
应用入口与路由注册"] B["app/core/config.py
配置管理"] C["app/core/database.py
异步数据库引擎"] D["app/core/logging_config.py
日志配置"] E["app/api/v1/__init__.py
路由聚合"] F["init_db.py
初始化与测试数据"] end subgraph "前端" G["frontend/package.json
构建与依赖"] end A --> E A --> B A --> D E --> C F --> C G --> A ``` 图表来源 - [backend/app/main.py](file://backend/app/main.py#L1-L92) - [backend/app/core/config.py](file://backend/app/core/config.py#L1-L47) - [backend/app/core/database.py](file://backend/app/core/database.py#L1-L39) - [backend/app/core/logging_config.py](file://backend/app/core/logging_config.py#L1-L65) - [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17) - [backend/init_db.py](file://backend/init_db.py#L1-L83) - [frontend/package.json](file://frontend/package.json#L1-L27) 章节来源 - [backend/app/main.py](file://backend/app/main.py#L1-L92) - [docs/backend.md](file://docs/backend.md#L1-L475) ## 核心组件 - 应用入口与路由:创建 FastAPI 实例、注册 CORS、健康检查、全局异常处理,并挂载 v1 路由前缀。 - 配置管理:集中管理应用名称、版本、调试模式、API 前缀、数据库连接、JWT 密钥算法与过期时间、CORS 源、分页参数等。 - 数据库层:异步 SQLAlchemy 引擎与会话工厂,提供依赖注入式数据库会话。 - 日志模块:按日轮转的多处理器日志记录,区分应用日志与错误日志。 - 初始化脚本:自动建表与插入测试数据,避免重复初始化。 章节来源 - [backend/app/main.py](file://backend/app/main.py#L15-L77) - [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47) - [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39) - [backend/app/core/logging_config.py](file://backend/app/core/logging_config.py#L10-L65) - [backend/init_db.py](file://backend/init_db.py#L11-L83) ## 架构总览 系统采用前后端分离架构,后端提供 REST API,前端通过 Axios 访问后端接口;数据库为 PostgreSQL,使用异步驱动。 ```mermaid graph TB FE["前端应用
Vue 3 + Vite"] --> API["后端API
FastAPI"] API --> DB["数据库
PostgreSQL"] API --> LOG["日志系统
按日轮转"] API --> CFG["配置中心
.env + pydantic-settings"] ``` 图表来源 - [docs/backend.md](file://docs/backend.md#L3-L15) - [backend/app/main.py](file://backend/app/main.py#L19-L51) - [backend/app/core/database.py](file://backend/app/core/database.py#L10-L20) - [backend/app/core/logging_config.py](file://backend/app/core/logging_config.py#L18-L20) - [backend/app/core/config.py](file://backend/app/core/config.py#L35-L37) ## 详细组件分析 ### 配置管理(Settings) - 环境变量文件:.env.example 提供数据库 URL、JWT 密钥、调试开关等示例。 - 运行时配置:Settings 使用 pydantic-settings 从 .env 加载,支持缓存单例。 - 关键项: - 应用名称与版本、调试模式、API 前缀 - 数据库连接串、连接池大小与溢出 - JWT 密钥、算法与过期时间 - CORS 源列表 - 分页默认与最大页大小 章节来源 - [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47) - [backend/.env.example](file://backend/.env.example#L1-L11) ### 数据库层(异步引擎与会话) - 异步引擎:基于配置的 DATABASE_URL 创建 asyncpg 引擎,DEBUG 控制 echo。 - 会话工厂:异步会话构造与生命周期管理,提供依赖注入。 - 依赖函数:get_db 提供事务语义(提交/回滚/关闭),确保异常安全。 章节来源 - [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39) ### 日志模块(RotatingFileHandler) - 日志目录:位于 backend/logs,按日期命名文件。 - 处理器: - 控制台 INFO 级别输出 - 文件 DEBUG 级别轮转(10MB,保留7份) - 错误 ERROR 级别单独文件轮转 - 获取子日志器:统一命名空间,便于模块化追踪。 章节来源 - [backend/app/core/logging_config.py](file://backend/app/core/logging_config.py#L10-L65) ### 应用入口与路由(FastAPI) - 应用实例:设置标题、版本、OpenAPI 文档路径前缀。 - CORS 中间件:允许指定源、凭证、方法与头。 - 路由注册:聚合 v1 子路由,统一前缀。 - 健康检查:/health 返回状态与版本。 - 异常处理:HTTP、请求校验、全局异常统一记录与抛出。 章节来源 - [backend/app/main.py](file://backend/app/main.py#L15-L77) - [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17) ### 初始化脚本(建表与测试数据) - 自动建表:创建所有模型对应的数据表。 - 测试数据:若 departments 表为空则批量插入默认数据。 - 管理员账户:创建 admin 用户并设置密码哈希。 章节来源 - [backend/init_db.py](file://backend/init_db.py#L11-L83) ### 前端构建与依赖 - 构建脚本:dev/build/preview。 - 依赖:Vue 3、Vue Router、Pinia、Axios、Element Plus、ECharts、Day.js。 - 与后端交互:通过 Axios 访问后端 API(具体接口见 API 文档)。 章节来源 - [frontend/package.json](file://frontend/package.json#L6-L26) - [docs/backend.md](file://docs/backend.md#L470-L475) ## 依赖关系分析 后端模块之间的依赖关系如下: ```mermaid graph LR main_py["app/main.py"] --> api_v1_init["app/api/v1/__init__.py"] main_py --> cfg_py["app/core/config.py"] main_py --> log_cfg_py["app/core/logging_config.py"] api_v1_init --> db_py["app/core/database.py"] init_db_py["init_db.py"] --> db_py ``` 图表来源 - [backend/app/main.py](file://backend/app/main.py#L10-L51) - [backend/app/api/v1/__init__.py](file://backend/app/api/v1/__init__.py#L1-L17) - [backend/app/core/config.py](file://backend/app/core/config.py#L9-L47) - [backend/app/core/logging_config.py](file://backend/app/core/logging_config.py#L27-L65) - [backend/app/core/database.py](file://backend/app/core/database.py#L9-L39) - [backend/init_db.py](file://backend/init_db.py#L14-L15) ## 性能考虑 - 数据库连接池:通过配置 DATABASE_POOL_SIZE 与 DATABASE_MAX_OVERFLOW 控制并发与溢出。 - 异步 I/O:使用 SQLAlchemy 2.0 异步引擎与 asyncpg,减少阻塞。 - 日志级别:生产建议提升控制台级别至 INFO,避免过多 DEBUG 输出。 - 分页限制:MAX_PAGE_SIZE 限制单页最大条数,防止资源滥用。 - 健康检查:/health 用于探活,结合负载均衡实现快速摘除不健康实例。 章节来源 - [backend/app/core/config.py](file://backend/app/core/config.py#L18-L33) - [backend/app/core/database.py](file://backend/app/core/database.py#L10-L20) - [backend/app/main.py](file://backend/app/main.py#L53-L56) ## 故障排查指南 - 健康检查失败:确认 /health 返回 healthy 与版本号。 - 数据库连接异常:检查 DATABASE_URL、网络连通性与 PostgreSQL 服务状态。 - 日志定位:查看 backend/logs 下按日期命名的日志文件,优先关注 ERROR 日志。 - CORS 问题:确认前端地址在 CORS_ORIGINS 列表中。 - 初始化未生效:确认 init_db.py 执行顺序与数据库权限。 章节来源 - [backend/app/main.py](file://backend/app/main.py#L53-L77) - [backend/app/core/logging_config.py](file://backend/app/core/logging_config.py#L18-L20) - [backend/app/core/config.py](file://backend/app/core/config.py#L28-L29) - [backend/init_db.py](file://backend/init_db.py#L20-L25) ## 结论 本指南提供了从配置、部署到运维监控的完整实践路径。建议在生产环境中严格管理 .env,启用 HTTPS 与 TLS,完善数据库备份与日志归档,并结合负载均衡与健康检查实现高可用。 ## 附录 ### A. 生产环境部署流程 - 准备阶段 - 准备 PostgreSQL 实例,创建数据库与用户。 - 生成并妥善保管 SECRET_KEY(至少 32 字符)。 - 配置 - 复制 .env.example 为 .env,填写 DATABASE_URL、SECRET_KEY、DEBUG=false。 - 设置 CORS_ORIGINS 为前端域名或 IP。 - 启动 - 安装依赖:pip install -r backend/requirements.txt - 初始化数据库:python backend/init_db.py - 启动服务:uvicorn app.main:app --host 0.0.0.0 --port 8000 - 验证 - 访问 /health 检查服务状态 - 访问 /api/v1/docs 或 /api/v1/redoc 查看接口文档 章节来源 - [backend/.env.example](file://backend/.env.example#L1-L11) - [backend/requirements.txt](file://backend/requirements.txt#L1-L17) - [backend/init_db.py](file://backend/init_db.py#L81-L83) - [docs/backend.md](file://docs/backend.md#L454-L475) ### B. 环境变量清单 - DATABASE_URL:数据库连接串(PostgreSQL) - SECRET_KEY:JWT 密钥 - DEBUG:调试模式开关 - CORS_ORIGINS:允许跨域的源列表 - API_PREFIX:API 前缀(如 /api/v1) 章节来源 - [backend/.env.example](file://backend/.env.example#L3-L10) - [backend/app/core/config.py](file://backend/app/core/config.py#L12-L33) ### C. Docker 容器化部署(步骤说明) - 构建镜像 - 基于 Python 3.11+ 镜像 - 复制 requirements.txt 并安装依赖 - 复制后端代码与 .env - 暴露端口 8000 - 运行容器 - 挂载日志目录 backend/logs 至宿主机 - 指定环境变量(DATABASE_URL、SECRET_KEY、DEBUG、CORS_ORIGINS、API_PREFIX) - 通过健康检查 /health 配置探针 - 注意 - 将 .env 放置于受控位置,避免泄露 - 使用只读卷挂载代码,仅挂载日志目录为可写 [本节为概念性说明,不直接分析具体文件,故无“章节来源”] ### D. Nginx 反向代理与 SSL 证书 - 反代配置要点 - 将 /api/* 反代至后端服务(如 http://backend:8000) - 静态资源指向前端 dist 目录(如 /dist) - 启用 gzip/ssl,开启 HSTS - SSL 证书 - 使用 Let’s Encrypt 或企业 CA - 自动续期脚本与监控告警 - 健康检查 - upstream 中配置 /health 探针,失败自动摘除 [本节为概念性说明,不直接分析具体文件,故无“章节来源”] ### E. 数据库备份策略 - 全量备份:每周日凌晨执行 pg_dump -U -h > backup.sql - 增量/归档:开启 WAL 归档,配合 PITR - 存储备份:加密存储于对象存储或磁带库,保留 4-8 周 - 验证恢复:每季度执行恢复演练 [本节为通用运维实践,不直接分析具体文件,故无“章节来源”] ### F. 日志管理与性能监控 - 日志 - 后端:backend/logs 按日轮转,保留 7 天 - 前端:浏览器控制台与网络面板排查 - 监控 - 指标:CPU/内存/连接数/慢查询/错误率 - 告警:阈值触发与收敛策略 - 链路追踪:结合 OpenTelemetry 或 APM [本节为通用运维实践,不直接分析具体文件,故无“章节来源”] ### G. 负载均衡、高可用与灾难恢复 - 高可用 - 多实例部署(至少 2 个后端实例) - PostgreSQL 主从复制或托管服务 - 健康检查与自动摘除 - 灾难恢复 - RTO/RPO 目标明确 - 快速恢复流程与角色分工 - 定期演练与文档更新 [本节为通用运维实践,不直接分析具体文件,故无“章节来源”] ### H. 运维脚本、自动化部署与版本升级 - 自动化 - CI/CD:拉取代码 → 单元测试 → 构建镜像 → 发布 - 蓝绿/滚动发布:灰度流量切换 - 升级流程 - 数据库迁移:alembic upgrade head - 前后端版本对齐:锁定依赖版本 - 回滚预案:镜像标签回滚与数据库 downgrade 章节来源 - [docs/backend.md](file://docs/backend.md#L438-L452) ### I. 安全加固、漏洞扫描与合规 - 安全加固 - 禁用 DEBUG,最小权限原则 - 强密码与密钥轮换,HTTPS 强传输 - 输入校验与 SQL 注入防护(ORM 已内置) - 漏洞扫描 - 依赖扫描:pip-audit/安全扫描工具 - 漏洞修复与补丁管理 - 合规 - 数据最小化与访问审计 - 签名与完整性校验(如需要) [本节为通用运维实践,不直接分析具体文件,故无“章节来源”]