# 部署运维 **本文引用的文件** - [DEPLOY.md](file://DEPLOY.md) - [DEPLOY_PROD.md](file://DEPLOY_PROD.md) - [deploy-prod.sh](file://deploy-prod.sh) - [deploy.sh](file://deploy.sh) - [docker-nginx/docker-compose.yml](file://docker-nginx/docker-compose.yml) - [docker-nginx/bookapi.conf](file://docker-nginx/bookapi.conf) - [server/src/app.ts](file://server/src/app.ts) - [server/src/config/index.ts](file://server/src/config/index.ts) - [server/src/middleware/security.ts](file://server/src/middleware/security.ts) - [server/src/services/sentry.service.ts](file://server/src/services/sentry.service.ts) - [server/prisma/schema.prisma](file://server/prisma/schema.prisma) - [server/package.json](file://server/package.json) - [my-uniapp-vue3/package.json](file://my-uniapp-vue3/package.json) - [AUTO_DEPLOY.md](file://AUTO_DEPLOY.md) - [server/webhook-deploy.py](file://server/webhook-deploy.py) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件面向AI有声书生成平台的部署与运维,覆盖开发、测试与生产三类环境的部署配置与流程,包括: - Docker容器化部署方案与Nginx反向代理 - MySQL数据库与Redis缓存配置 - 完整部署脚本说明、环境变量与依赖服务安装 - CI/CD流水线设计、自动化部署与回滚策略 - 监控告警、日志收集分析与性能优化 - 故障排查、备份恢复与安全加固 ## 项目结构 项目采用前后端分离架构: - 后端:基于Node.js/Koa的API服务,使用Prisma进行MySQL访问,集成Redis缓存、对象存储(OSS/本地)、任务队列等 - 前端:UniApp Vue3应用,构建产物作为静态资源由Nginx提供 - 运维:提供多套部署脚本与自动化部署方案,支持PM2进程管理与Nginx反代 ```mermaid graph TB subgraph "客户端" U["浏览器/移动端"] end subgraph "边缘层" NGINX["Nginx 反向代理
静态资源/HTTPS/重定向"] end subgraph "应用层" API["后端API服务
Koa + Prisma + Redis + OSS"] WS["WebSocket 服务"] end subgraph "数据层" MYSQL["MySQL 8.0"] REDIS["Redis 缓存"] OSS["对象存储(OSS)"] end U --> NGINX NGINX --> API API --> MYSQL API --> REDIS API --> OSS API --> WS ``` 图表来源 - [server/src/app.ts:133-194](file://server/src/app.ts#L133-L194) - [server/src/config/index.ts:70-117](file://server/src/config/index.ts#L70-L117) - [server/prisma/schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) 章节来源 - [DEPLOY.md:1-251](file://DEPLOY.md#L1-L251) - [DEPLOY_PROD.md:1-393](file://DEPLOY_PROD.md#L1-L393) ## 核心组件 - 应用服务(后端):负责业务接口、鉴权、TTS生成、播放、订阅、支付、发布等模块;通过PM2管理进程,支持健康检查与性能指标 - Nginx反向代理:前端静态资源直出、HTTPS终止、API反向代理、安全头设置 - 数据库:MySQL 8.0(Docker),Prisma ORM管理Schema与迁移 - 缓存:Redis(可选),用于限流、会话、任务队列等 - 对象存储:OSS或本地存储,用于音视频文件分发 - 自动化部署:Shell脚本与Python Webhook,支持Git推送触发部署 章节来源 - [server/src/app.ts:1-194](file://server/src/app.ts#L1-194) - [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117) - [server/prisma/schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) ## 架构总览 下图展示从客户端到后端服务、数据库与缓存的整体交互: ```mermaid sequenceDiagram participant C as "客户端" participant N as "Nginx" participant A as "后端API" participant P as "Prisma" participant M as "MySQL" participant R as "Redis" participant O as "OSS" C->>N : HTTPS 请求 N->>A : 反向代理 /api/* A->>P : 查询/更新 P->>M : SQL 执行 A->>R : 读写缓存 A->>O : 上传/下载媒体 A-->>N : 响应 N-->>C : 返回内容 ``` 图表来源 - [server/src/app.ts:92-130](file://server/src/app.ts#L92-L130) - [server/src/config/index.ts:70-117](file://server/src/config/index.ts#L70-L117) - [server/prisma/schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) ## 详细组件分析 ### 1) 开发/测试/生产环境部署配置 - 开发环境 - 本地开发:后端使用TypeScript运行时,前端H5构建 - Docker本地反代:通过docker-compose将Nginx容器映射至80端口,代理到宿主机3000端口 - 测试/生产环境 - 服务器:/data/ai 或 /data/ai/audio - 前端:静态资源目录,Nginx提供HTTP/HTTPS与缓存头 - 后端:PM2守护进程,监听3100端口,健康检查路径 /health - 数据库:Docker MySQL 8.0,容器名为single-mysql,端口映射3306 - 缓存:Redis(可选),通过环境变量配置 章节来源 - [DEPLOY.md:10-160](file://DEPLOY.md#L10-L160) - [DEPLOY_PROD.md:26-93](file://DEPLOY_PROD.md#L26-L93) - [docker-nginx/docker-compose.yml:1-12](file://docker-nginx/docker-compose.yml#L1-L12) - [docker-nginx/bookapi.conf:1-15](file://docker-nginx/bookapi.conf#L1-L15) ### 2) Docker容器化部署方案 - 单容器Nginx反向代理 - 映射80:80,挂载bookapi.conf - 通过host.docker.internal将请求转发至宿主机3000端口 - 适用场景:本地联调、快速预览 章节来源 - [docker-nginx/docker-compose.yml:1-12](file://docker-nginx/docker-compose.yml#L1-L12) - [docker-nginx/bookapi.conf:1-15](file://docker-nginx/bookapi.conf#L1-L15) ### 3) Nginx反向代理配置 - 前端域名:book.rrbrr.com,HTTPS,静态资源缓存与安全头 - 后端域名:bookapi.rrbrr.com,HTTP反代至127.0.0.1:3000/3100 - 宝塔面板管理:Nginx配置文件位于 /www/server/panel/vhost/nginx/ - 关键点:重定向、SSL证书、安全头、访问/错误日志 章节来源 - [DEPLOY.md:61-116](file://DEPLOY.md#L61-L116) - [DEPLOY_PROD.md:146-246](file://DEPLOY_PROD.md#L146-L246) ### 4) MySQL数据库部署与配置 - Docker部署:容器名 single-mysql,版本8.0,端口3306,密码 password,数据库 audio_book - Schema定义:Prisma schema.prisma集中定义用户、订单、播放记录、收藏、书稿、章节、视频工程等模型 - 迁移与备份:使用npx prisma migrate deploy执行迁移;mysqldump备份数据库 章节来源 - [DEPLOY_PROD.md:264-294](file://DEPLOY_PROD.md#L264-L294) - [server/prisma/schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) ### 5) Redis缓存配置 - 用途:限流、会话、任务队列、速率限制等 - 配置项:REDIS_HOST、REDIS_PORT、REDIS_PASSWORD、REDIS_DB - 运行时检测:启动时测试连接,失败则降级为内存模式 章节来源 - [server/src/app.ts:142-151](file://server/src/app.ts#L142-L151) - [server/src/config/index.ts:129-134](file://server/src/config/index.ts#L129-L134) ### 6) 环境变量与依赖服务 - 后端环境变量(示例):NODE_ENV、SERVER_PORT、JWT_SECRET、DASHSCOPE_*、DATABASE_URL、STORAGE_TYPE、REDIS_*、OSS_*、MINIMAX_API_KEY - 前端依赖:Vue3、Pinia、UniApp生态 - 后端依赖:Koa、Prisma、ioredis、bull、axios、langchain、mysql2、ali-oss、sentry等 章节来源 - [DEPLOY_PROD.md:105-144](file://DEPLOY_PROD.md#L105-L144) - [my-uniapp-vue3/package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65) - [server/package.json:1-60](file://server/package.json#L1-L60) ### 7) 部署脚本说明 - deploy-prod.sh:一键部署脚本,包含前端构建、打包上传、服务器端安装依赖、复制生产配置、生成Prisma Client、PM2启动、Nginx配置提示 - deploy.sh:通用部署脚本,支持备份、同步、安装依赖、生成Prisma Client、PM2启动、Nginx配置 - 自动化部署:AUTO_DEPLOY.md提供Webhook部署方案,支持Gogs/GitHub推送触发 章节来源 - [deploy-prod.sh:1-171](file://deploy-prod.sh#L1-L171) - [deploy.sh:1-209](file://deploy.sh#L1-L209) - [AUTO_DEPLOY.md:1-142](file://AUTO_DEPLOY.md#L1-L142) ### 8) CI/CD流水线设计与自动化部署 - 方案一:Webhook(推荐) - 服务器端:Python HTTP服务监听端口,校验签名后执行部署脚本 - Nginx:将/webhook转发至本地端口 - Gogs:推送事件触发webhook - 方案二:Git Hook(简化) - 服务器Git仓库post-receive钩子,拉取代码、构建后PM2重启 ```mermaid sequenceDiagram participant Dev as "开发者(Gogs)" participant N as "Nginx" participant W as "Webhook服务" participant S as "服务器" participant D as "部署脚本" participant P as "PM2" Dev->>N : 推送代码触发webhook N->>W : 转发 /webhook W->>S : 验证签名/解析payload S->>D : 执行部署脚本 D->>P : pm2 restart server P-->>Dev : 部署完成 ``` 图表来源 - [AUTO_DEPLOY.md:51-78](file://AUTO_DEPLOY.md#L51-L78) - [server/webhook-deploy.py:79-125](file://server/webhook-deploy.py#L79-L125) 章节来源 - [AUTO_DEPLOY.md:1-142](file://AUTO_DEPLOY.md#L1-L142) - [server/webhook-deploy.py:1-139](file://server/webhook-deploy.py#L1-L139) ### 9) 回滚策略 - 备份机制:部署前自动创建备份目录(包含server与frontend),便于回滚 - 回滚步骤:停止PM2服务,恢复备份目录内容,重新安装依赖与生成Prisma Client,PM2重启 章节来源 - [DEPLOY.md:27-59](file://DEPLOY.md#L27-L59) - [DEPLOY_PROD.md:377-393](file://DEPLOY_PROD.md#L377-L393) ### 10) 监控告警与日志 - 错误监控:Sentry集成,支持性能采样与错误过滤 - 日志:Nginx访问/错误日志;PM2后端日志;应用层Winston日志 - 健康检查:/health;性能指标:/api/metrics 章节来源 - [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113) - [server/src/app.ts:92-98](file://server/src/app.ts#L92-L98) - [DEPLOY.md:187-197](file://DEPLOY.md#L187-L197) ### 11) 安全加固 - 安全中间件:XSS防护、SQL注入检测、敏感数据脱敏 - Nginx安全头:X-XSS-Protection、X-Content-Type-Options、X-Frame-Options、Content-Security-Policy - 认证与授权:JWT密钥配置;鉴权中间件 - 传输安全:HTTPS、Strict-Transport-Security、TLS协议与密码套件 章节来源 - [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154) - [server/src/config/index.ts:77-81](file://server/src/config/index.ts#L77-L81) - [DEPLOY_PROD.md:173-186](file://DEPLOY_PROD.md#L173-L186) ## 依赖关系分析 ```mermaid graph LR APP["server/src/app.ts"] --> CFG["server/src/config/index.ts"] APP --> SEC["server/src/middleware/security.ts"] APP --> SEN["server/src/services/sentry.service.ts"] APP --> PRISMA["server/prisma/schema.prisma"] APP --> MYSQL["MySQL 8.0"] APP --> REDIS["Redis"] APP --> OSS["OSS"] NGINX["Nginx"] --> APP FE["前端静态资源"] --> NGINX ``` 图表来源 - [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194) - [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117) - [server/prisma/schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) 章节来源 - [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194) - [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117) - [server/prisma/schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) ## 性能考虑 - Nginx缓存与压缩:静态资源长缓存、HTTP/2提升传输效率 - 后端限流与熔断:速率限制中间件、模型自动切换逻辑 - 数据库优化:索引设计、连接池、慢查询日志 - 缓存策略:热点数据缓存、任务队列异步化 - 监控与剖析:Sentry性能采样、指标暴露 章节来源 - [server/src/config/index.ts:45-67](file://server/src/config/index.ts#L45-L67) - [server/src/services/sentry.service.ts:15-43](file://server/src/services/sentry.service.ts#L15-L43) ## 故障排查指南 - 后端无法启动 - 检查端口占用与环境变量;查看PM2日志 - 前端无法访问 - 检查Nginx配置与静态资源目录权限 - 数据库连接失败 - 检查MySQL容器状态与连接串 - Nginx 502错误 - 检查后端进程监听端口与健康检查 - 自动化部署失败 - 检查Webhook服务状态、签名与日志 章节来源 - [DEPLOY.md:199-214](file://DEPLOY.md#L199-L214) - [DEPLOY_PROD.md:318-375](file://DEPLOY_PROD.md#L318-L375) - [AUTO_DEPLOY.md:97-111](file://AUTO_DEPLOY.md#L97-L111) ## 结论 本部署运维文档提供了从开发到生产的完整落地方案,涵盖容器化、反向代理、数据库与缓存、自动化部署与回滚、监控告警与安全加固。建议在生产环境中结合宝塔面板与Webhook自动化部署,并定期进行备份与演练。 ## 附录 ### A. 环境变量清单(摘录) - NODE_ENV、SERVER_PORT、AUTH_ENABLED - JWT_SECRET、JWT_EXPIRES_IN - DASHSCOPE_*(API密钥、模型、语音、实时模式) - DATABASE_URL(MySQL) - STORAGE_TYPE(oss或本地) - REDIS_*(主机、端口、密码、DB) - OSS_*(Endpoint、AccessKey、Secret、Bucket、Region) - MINIMAX_API_KEY 章节来源 - [DEPLOY_PROD.md:105-144](file://DEPLOY_PROD.md#L105-L144) ### B. 常用命令速查 - 后端管理:PM2状态、日志、重启、停止 - Nginx管理:配置测试、重载、重启 - 数据库:进入容器、查看数据库、执行SQL、备份、迁移 章节来源 - [DEPLOY.md:161-197](file://DEPLOY.md#L161-L197) - [DEPLOY_PROD.md:276-294](file://DEPLOY_PROD.md#L276-L294)