本文引用的文件
本文件面向AI有声书生成平台的生产部署,覆盖从服务器准备、CI/CD流水线、自动化部署与回滚、负载均衡与SSL、安全加固、监控与告警到A/B、蓝绿与金丝雀发布策略,以及应急响应与灾备方案。文档严格依据仓库现有部署脚本、配置与模块化实现进行梳理,并提供可操作的流程图与时序图帮助工程团队落地。
安全与性能方面包含安全中间件、速率限制、Sentry 错误监控、Winston 日志、Redis 缓存与 OSS/本地存储抽象。
graph TB
subgraph "生产服务器"
FE["前端静态资源<br/>/data/ai/audio/frontend/build/h5"]
BE["后端服务<br/>PM2 + dist/app.js"]
DB["MySQL 8.0 (Docker)<br/>single-mysql"]
REDIS["Redis"]
OSS["阿里云 OSS"]
Nginx["Nginx (宝塔面板)"]
end
Internet["互联网"] --> Nginx
Nginx --> FE
Nginx --> BE
BE --> DB
BE --> REDIS
BE --> OSS
图表来源
章节来源
章节来源
生产环境采用“Nginx + 后端PM2 + MySQL + Redis + OSS”的组合,Nginx统一入口,负责TLS终止、静态资源缓存、API反向代理与访问日志。后端通过速率限制、安全中间件与Sentry保障稳定性与可观测性。书籍生成模块具备完善的容错与进度监控,确保长耗时任务的可靠性。
graph TB
Client["客户端"] --> Nginx["Nginx (HTTPS/HSTS)"]
Nginx --> API["后端API (/api/*)"]
Nginx --> Static["静态资源 (/)"]
API --> Koa["Koa 应用"]
Koa --> Security["安全中间件"]
Koa --> Limiter["速率限制"]
Koa --> Perf["性能监控"]
Koa --> Sentry["Sentry 错误监控"]
Koa --> Redis["Redis 缓存"]
Koa --> Storage["存储服务 (OSS/本地)"]
Koa --> DB["MySQL (Docker)"]
图表来源
一键部署脚本
deploy-prod.sh:本地构建,打包上传,服务器侧安装 Node.js/PM2,复制 .env.production -> .env,生成Prisma客户端,PM2启动。
sequenceDiagram
participant Dev as "开发者"
participant Gogs as "Gogs 仓库"
participant Nginx as "Nginx"
participant Webhook as "Webhook 服务"
participant Server as "服务器"
participant PM2 as "PM2"
Dev->>Gogs : 推送代码
Gogs->>Nginx : Webhook 请求 (URL+Secret)
Nginx->>Webhook : 反向代理 /webhook
Webhook->>Server : 拉取代码/执行部署脚本
Server->>Server : 备份/解压/安装依赖/生成Prisma
Server->>PM2 : 重启后端服务
PM2-->>Dev : 服务可用
图表来源
章节来源
docker-nginx 提供容器化示例,将 /api 代理至 host.docker.internal:3000。
flowchart TD
Start(["请求进入"]) --> Port80{"是否HTTP 80?"}
Port80 --> |是| Redirect["301 重定向到 HTTPS"]
Port80 --> |否| TLS["TLS 终止 (宝塔)"]
TLS --> APIProxy{"路径是否 /api/* ?"}
APIProxy --> |是| ProxyToBE["代理到 127.0.0.1:3100"]
APIProxy --> |否| ServeStatic["返回前端静态资源"]
ProxyToBE --> End(["响应"])
ServeStatic --> End
图表来源
章节来源
章节来源
章节来源
章节来源
WebSocket通知:12种通知类型,覆盖重试、失败、超时、恢复等场景。
flowchart TD
Start(["开始节点"]) --> CallLLM["调用 LLM (指数退避重试)"]
CallLLM --> Retry{"重试次数 < 3 ?"}
Retry --> |是| Wait["等待 2^n 秒"] --> CallLLM
Retry --> |否| Fail["标记失败 + 通知用户"]
CallLLM --> Timeout{"节点超时?"}
Timeout --> |是| AutoRecovery["自动恢复 (最多2次)"]
Timeout --> |否| Complete["节点完成 + 通知用户"]
AutoRecovery --> Requeue["重新入队"] --> CallLLM
图表来源
章节来源
[本节为通用发布策略说明,未直接分析具体源码文件,故不附加“章节来源”]
自动化依赖
Gogs Webhook、Python Webhook 服务、systemd 服务单元、PM2。
graph LR
Env[".env / models.json"] --> Config["配置加载"]
Redis["Redis"] --> Limiter["速率限制"]
OSS["OSS"] --> Storage["存储服务"]
LocalFS["本地文件系统"] --> Storage
Nginx["Nginx 配置"] --> API["后端API"]
API --> Limiter
API --> Storage
API --> DB["MySQL"]
图表来源
章节来源
[本节提供通用指导,未直接分析具体源码文件,故不附加“章节来源”]
章节来源
本部署文档基于仓库现有脚本与模块,给出了生产环境的部署流程、自动化与回滚策略、安全加固、监控与可观测性实践,并提供了A/B、蓝绿与金丝雀发布的实施建议。建议在现有基础上补充Prometheus/Grafana指标采集、数据库备份与灾备演练,持续完善生产治理。
章节来源
章节来源
[本节为通用建议,未直接分析具体源码文件,故不附加“章节来源”]