# 服务基础设施
**本文引用的文件**
- [server/src/app.ts](file://server/src/app.ts)
- [server/src/services/redis.service.ts](file://server/src/services/redis.service.ts)
- [server/src/services/oss.service.ts](file://server/src/services/oss.service.ts)
- [server/src/services/queue.service.ts](file://server/src/services/queue.service.ts)
- [server/src/services/sentry.service.ts](file://server/src/services/sentry.service.ts)
- [server/src/services/websocket.service.ts](file://server/src/services/websocket.service.ts)
- [server/src/services/storage.service.ts](file://server/src/services/storage.service.ts)
- [server/src/services/memory-queue.ts](file://server/src/services/memory-queue.ts)
- [server/src/modules/book-generator/book-queue.processor.ts](file://server/src/modules/book-generator/book-queue.processor.ts)
- [server/src/middleware/auth.ts](file://server/src/middleware/auth.ts)
- [server/src/middleware/errorHandler.ts](file://server/src/middleware/errorHandler.ts)
- [server/src/middleware/security.ts](file://server/src/middleware/security.ts)
- [server/src/middleware/performance.ts](file://server/src/middleware/performance.ts)
- [server/src/middleware/rate-limiter.ts](file://server/src/middleware/rate-limiter.ts)
- [server/src/config/index.ts](file://server/src/config/index.ts)
- [server/src/types/index.ts](file://server/src/types/index.ts)
- [server/src/models/index.ts](file://server/src/models/index.ts)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向AI有声书生成平台的服务基础设施,系统性梳理支撑业务模块运行的基础服务组件与中间件体系,覆盖以下主题:
- 队列服务:基于Bull的异步任务处理与降级策略
- 缓存服务:Redis缓存管理与连接健康检查
- 存储服务:阿里云OSS与本地存储的统一抽象
- 日志与监控:Sentry错误监控与性能追踪
- WebSocket服务:实时事件推送
- 中间件体系:认证、错误处理、安全、性能监控、限流
- 类型定义与配置管理
- 服务启动流程与优雅关闭
## 项目结构
后端采用Koa应用,按“服务层、中间件、控制器、配置与类型”分层组织;基础设施组件以“服务单例”的形式注入应用生命周期。
```mermaid
graph TB
subgraph "应用层"
APP["Koa 应用
server/src/app.ts"]
ROUTER["路由注册
server/src/app.ts"]
end
subgraph "基础设施服务"
REDIS["Redis 服务
server/src/services/redis.service.ts"]
QUEUE["队列服务(Bull)
server/src/services/queue.service.ts"]
MEMQ["内存队列(Fallback)
server/src/services/memory-queue.ts"]
OSS["OSS 服务
server/src/services/oss.service.ts"]
STORE["存储服务(统一封装)
server/src/services/storage.service.ts"]
WS["WebSocket 服务
server/src/services/websocket.service.ts"]
SENTRY["Sentry 监控
server/src/services/sentry.service.ts"]
end
subgraph "中间件"
AUTH["认证中间件
server/src/middleware/auth.ts"]
ERR["错误处理中间件
server/src/middleware/errorHandler.ts"]
SEC["安全中间件
server/src/middleware/security.ts"]
PERF["性能监控中间件
server/src/middleware/performance.ts"]
RL["限流中间件
server/src/middleware/rate-limiter.ts"]
end
subgraph "业务与配置"
CFG["配置管理
server/src/config/index.ts"]
TYPES["类型定义
server/src/types/index.ts"]
MODELS["数据库连接
server/src/models/index.ts"]
BOOKQ["书籍生成队列处理器
server/src/modules/book-generator/book-queue.processor.ts"]
end
APP --> ROUTER
APP --> AUTH
APP --> ERR
APP --> SEC
APP --> PERF
APP --> RL
ROUTER --> STORE
ROUTER --> QUEUE
ROUTER --> WS
ROUTER --> SENTRY
STORE --> OSS
STORE --> REDIS
QUEUE --> REDIS
QUEUE --> MEMQ
WS --> APP
SENTRY --> APP
BOOKQ --> QUEUE
BOOKQ --> MEMQ
CFG --> APP
TYPES --> APP
MODELS --> APP
```
图表来源
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
- [server/src/services/redis.service.ts:1-274](file://server/src/services/redis.service.ts#L1-L274)
- [server/src/services/oss.service.ts:1-256](file://server/src/services/oss.service.ts#L1-L256)
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/services/websocket.service.ts:1-136](file://server/src/services/websocket.service.ts#L1-L136)
- [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113)
- [server/src/services/memory-queue.ts:1-119](file://server/src/services/memory-queue.ts#L1-L119)
- [server/src/modules/book-generator/book-queue.processor.ts:1-124](file://server/src/modules/book-generator/book-queue.processor.ts#L1-L124)
- [server/src/middleware/auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81)
- [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [server/src/middleware/performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110)
- [server/src/middleware/rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)
- [server/src/types/index.ts:1-124](file://server/src/types/index.ts#L1-L124)
- [server/src/models/index.ts:1-15](file://server/src/models/index.ts#L1-L15)
章节来源
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
## 核心组件
- 队列服务(Bull + Redis/Fallback):负责任务排队、并发控制与状态跟踪,支持Redis队列与内存队列双通道降级。
- 缓存服务(Redis):提供键值、Hash、计数器等操作,具备连接健康检查与重试策略。
- 存储服务(OSS + 本地):统一抽象上传/下载/删除/签名URL能力,支持OSS与本地存储无缝切换。
- 日志与监控(Sentry):初始化错误监控与性能剖析,提供Koa错误处理中间件。
- WebSocket服务:提供升级握手、客户端连接管理与事件广播,用于实时推送生成结果。
- 中间件体系:认证、错误处理、安全防护、性能监控、限流。
- 配置与类型:集中管理模型配置、JWT、端口、上传目录等;定义用户、音频、订单、分页等类型。
章节来源
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/redis.service.ts:1-274](file://server/src/services/redis.service.ts#L1-L274)
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113)
- [server/src/services/websocket.service.ts:1-136](file://server/src/services/websocket.service.ts#L1-L136)
- [server/src/middleware/auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81)
- [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [server/src/middleware/performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110)
- [server/src/middleware/rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)
- [server/src/types/index.ts:1-124](file://server/src/types/index.ts#L1-L124)
## 架构总览
下图展示服务启动与组件交互的关键路径,包括启动顺序、依赖注入与优雅关闭流程。
```mermaid
sequenceDiagram
participant Boot as "应用启动
server/src/app.ts"
participant Sentry as "Sentry 初始化
server/src/services/sentry.service.ts"
participant DB as "数据库连接
server/src/models/index.ts"
participant Redis as "Redis 连接
server/src/services/redis.service.ts"
participant Store as "存储服务
server/src/services/storage.service.ts"
participant WS as "WebSocket 初始化
server/src/services/websocket.service.ts"
participant Q as "队列处理器
server/src/modules/book-generator/book-queue.processor.ts"
Boot->>Sentry : 初始化错误监控
Boot->>DB : 连接数据库
Boot->>Redis : 测试连接
Boot->>Store : 测试存储连接
Boot->>WS : 初始化WebSocket
Boot->>Q : 启动书籍生成队列处理器
Boot-->>Boot : 注册路由与中间件
Boot-->>Boot : 监听端口并输出启动信息
Boot->>Q : 恢复中断任务
Boot->>Boot : 注册SIGTERM/SIGINT优雅关闭
```
图表来源
- [server/src/app.ts:133-192](file://server/src/app.ts#L133-L192)
- [server/src/services/sentry.service.ts:7-43](file://server/src/services/sentry.service.ts#L7-L43)
- [server/src/models/index.ts:5-13](file://server/src/models/index.ts#L5-L13)
- [server/src/services/redis.service.ts:246-255](file://server/src/services/redis.service.ts#L246-L255)
- [server/src/services/storage.service.ts:252-272](file://server/src/services/storage.service.ts#L252-L272)
- [server/src/services/websocket.service.ts:102-133](file://server/src/services/websocket.service.ts#L102-L133)
- [server/src/modules/book-generator/book-queue.processor.ts:48-83](file://server/src/modules/book-generator/book-queue.processor.ts#L48-L83)
## 详细组件分析
### 队列服务(Bull + Redis/Fallback)
- 设计原则:单一职责,仅负责排队与并发控制;失败重试与超时由上层容错与LLM服务处理。
- 关键能力:
- 任务类型枚举与状态映射
- Redis队列创建与事件监听(完成/失败/错误)
- 任务添加与回退到内存队列
- 进度更新与回调管理
- 统计与暂停/恢复/清空队列
- 书籍生成队列处理器:
- 优先使用Redis队列,最大并发3
- 失败时更新书籍状态为failed
- 启动时恢复中断任务(根据数据库状态)
```mermaid
classDiagram
class QueueService {
-queues : Map
-progressCallbacks : Map
-queueAvailable : boolean
+isQueueAvailable() boolean
+addTask(queueType, data, options) Promise
+addAudioGenerationTask(data) Promise
+addVideoGenerationTask(data) Promise
+addBookGenerationTask(data) Promise
+getTaskStatus(queueType, jobId) Promise
+updateProgress(queueType, jobId, progress, data) Promise
+onProgress(jobId, callback) void
+clearQueue(queueType) Promise
+pauseQueue(queueType) Promise
+resumeQueue(queueType) Promise
+closeAll() Promise
}
class MemoryQueue {
-jobs : Map
-waitingJobs : Array
-processing : Set
-concurrency : number
+add(name, data) Promise
+process(concurrency, handler) void
+hasPendingJobs() boolean
+close() Promise
}
class BookQueueProcessor {
+initBookGenerationQueue() void
+resumeInterruptedTasks() Promise
}
QueueService --> MemoryQueue : "回退"
BookQueueProcessor --> QueueService : "使用"
BookQueueProcessor --> MemoryQueue : "回退"
```
图表来源
- [server/src/services/queue.service.ts:48-342](file://server/src/services/queue.service.ts#L48-L342)
- [server/src/services/memory-queue.ts:17-116](file://server/src/services/memory-queue.ts#L17-L116)
- [server/src/modules/book-generator/book-queue.processor.ts:16-83](file://server/src/modules/book-generator/book-queue.processor.ts#L16-L83)
章节来源
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/memory-queue.ts:1-119](file://server/src/services/memory-queue.ts#L1-L119)
- [server/src/modules/book-generator/book-queue.processor.ts:1-124](file://server/src/modules/book-generator/book-queue.processor.ts#L1-L124)
### 缓存服务(Redis)
- 连接与健康:支持重试策略、连接/错误/关闭事件监听;提供可用性检测。
- 基础操作:字符串、JSON、Hash、计数器、过期、存在性检查。
- 批量操作:支持通配符批量删除。
- 断线保护:在不可用时返回空/失败,避免阻塞主流程。
```mermaid
flowchart TD
Start(["调用缓存方法"]) --> CheckAvail["检查连接可用性"]
CheckAvail --> |不可用| ReturnNull["返回空/失败"]
CheckAvail --> |可用| OperSel{"选择操作类型"}
OperSel --> Get["GET/GET JSON"]
OperSel --> Set["SET/SETEX/SET JSON"]
OperSel --> Del["DEL/DEL Pattern"]
OperSel --> HGet["HGET/HGETALL/HSET"]
OperSel --> Incr["INCR/EXPIRE/EXISTS"]
Get --> Done(["返回结果"])
Set --> Done
Del --> Done
HGet --> Done
Incr --> Done
```
图表来源
- [server/src/services/redis.service.ts:43-255](file://server/src/services/redis.service.ts#L43-L255)
章节来源
- [server/src/services/redis.service.ts:1-274](file://server/src/services/redis.service.ts#L1-L274)
### 存储服务(OSS + 本地)
- 统一接口:上传音频/视频/封面、通用文件上传、Buffer上传、删除、目录删除、下载、签名URL、测试连接。
- 存储切换:通过环境变量STORAGE_TYPE在OSS与本地之间切换;OSS模式下支持CDN域名与签名URL。
- 本地模式:文件写入uploads目录,返回静态URL。
```mermaid
classDiagram
class StorageService {
-storageType : StorageType
+setStorageType(type) void
+getStorageType() StorageType
+uploadAudio(localPath, audioId) Promise
+uploadVideo(localPath, videoId) Promise
+uploadCover(localPath, bookId) Promise
+uploadFile(localPath, category, id) Promise
+uploadBuffer(buffer, objectKey, contentType) Promise
+deleteFile(url) Promise
+deleteDirectory(prefix, id) Promise
+downloadFile(url) Promise
+getSignedUrl(url, expires) Promise
+testConnection() Promise
}
class OSSService {
+uploadFile(localPath, objectKey) Promise
+uploadBuffer(buffer, objectKey, contentType) Promise
+uploadAudio(localPath, audioId) Promise
+uploadVideo(localPath, videoId) Promise
+uploadCover(localPath, bookId) Promise
+deleteFile(objectKey) Promise
+deleteDirectory(prefix) Promise
+getSignedUrl(objectKey, expires) Promise
+downloadFile(objectKey) Promise
+getFileUrl(objectKey) string
+testConnection() Promise
}
StorageService --> OSSService : "OSS模式委托"
```
图表来源
- [server/src/services/storage.service.ts:13-277](file://server/src/services/storage.service.ts#L13-L277)
- [server/src/services/oss.service.ts:13-256](file://server/src/services/oss.service.ts#L13-L256)
章节来源
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/services/oss.service.ts:1-256](file://server/src/services/oss.service.ts#L1-L256)
### 日志与监控(Sentry)
- 初始化:根据环境变量DSN启用,设置采样率与性能剖析集成;提供错误过滤策略。
- 上下文:设置用户、标签、额外上下文;提供Koa错误处理中间件。
- 使用场景:全局错误捕获、API异常上报、性能采样。
```mermaid
sequenceDiagram
participant App as "应用启动
server/src/app.ts"
participant Sentry as "Sentry 初始化
server/src/services/sentry.service.ts"
participant Koa as "Koa 中间件链
server/src/app.ts"
participant Ctrl as "控制器/服务"
App->>Sentry : initSentry()
App->>Koa : 使用 sentryErrorHandler()
Koa->>Ctrl : 调用业务逻辑
Ctrl-->>Koa : 抛出异常
Koa->>Sentry : captureException(error)
Sentry-->>Koa : 上报完成
```
图表来源
- [server/src/app.ts:64-65](file://server/src/app.ts#L64-L65)
- [server/src/services/sentry.service.ts:7-43](file://server/src/services/sentry.service.ts#L7-L43)
- [server/src/services/sentry.service.ts:92-110](file://server/src/services/sentry.service.ts#L92-L110)
章节来源
- [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113)
- [server/src/app.ts:133-137](file://server/src/app.ts#L133-L137)
### WebSocket服务(实时通信)
- 升级握手:仅接受/ws路径,从查询参数提取clientId并建立连接。
- 客户端管理:Map维护clientId到WebSocket实例映射,支持添加/移除。
- 事件推送:广播与定向推送,用于音频/视频生成完成与批量生成进度。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Server as "HTTP服务器
server/src/app.ts"
participant WS as "WebSocket服务
server/src/services/websocket.service.ts"
Client->>Server : HTTP Upgrade 请求 /ws?clientId=...
Server->>WS : 触发 upgrade 事件
WS->>WS : 校验路径与clientId
WS->>Client : 发送 connected 消息
WS->>Client : 广播/定向推送生成进度/完成事件
Client-->>WS : 断开连接
WS->>WS : 移除客户端
```
图表来源
- [server/src/app.ts:156-157](file://server/src/app.ts#L156-L157)
- [server/src/services/websocket.service.ts:102-133](file://server/src/services/websocket.service.ts#L102-L133)
章节来源
- [server/src/services/websocket.service.ts:1-136](file://server/src/services/websocket.service.ts#L1-L136)
- [server/src/app.ts:156-157](file://server/src/app.ts#L156-L157)
### 中间件体系
- 认证中间件:支持可选认证与强制认证,校验JWT并注入用户信息。
- 错误处理中间件:统一捕获异常,返回标准化错误响应。
- 安全中间件:XSS过滤、SQL注入检测、敏感数据脱敏。
- 性能监控中间件:统计总请求数、平均响应时间、慢请求、错误率与端点级指标。
- 限流中间件:基于Redis/Memory的限流器,支持多场景限流策略。
```mermaid
flowchart TD
Req["请求进入"] --> EH["错误处理中间件"]
EH --> PM["性能监控中间件"]
PM --> SEC["安全中间件(XSS/SQL/脱敏)"]
SEC --> AUTH["认证中间件(可选/强制)"]
AUTH --> RL["限流中间件(可插拔)"]
RL --> Route["路由匹配与控制器"]
Route --> RESP["响应返回"]
EH --> |异常| RESP
```
图表来源
- [server/src/app.ts:64-75](file://server/src/app.ts#L64-L75)
- [server/src/middleware/errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24)
- [server/src/middleware/performance.ts:29-76](file://server/src/middleware/performance.ts#L29-L76)
- [server/src/middleware/security.ts:7-27](file://server/src/middleware/security.ts#L7-L27)
- [server/src/middleware/auth.ts:7-18](file://server/src/middleware/auth.ts#L7-L18)
- [server/src/middleware/rate-limiter.ts:49-72](file://server/src/middleware/rate-limiter.ts#L49-L72)
章节来源
- [server/src/middleware/auth.ts:1-81](file://server/src/middleware/auth.ts#L1-L81)
- [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [server/src/middleware/performance.ts:1-110](file://server/src/middleware/performance.ts#L1-L110)
- [server/src/middleware/rate-limiter.ts:1-120](file://server/src/middleware/rate-limiter.ts#L1-L120)
### 类型定义与配置管理
- 类型定义:用户、音频、订单、分页、音色、会员配额等;扩展Koa Context以携带用户信息。
- 配置管理:加载.env,聚合模型配置,提供模型切换策略与默认值;JWT密钥与TTS参数等。
章节来源
- [server/src/types/index.ts:1-124](file://server/src/types/index.ts#L1-L124)
- [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117)
## 依赖关系分析
- 组件耦合:
- QueueService依赖RedisService与MemoryQueue;书籍生成处理器依赖QueueService/MemoryQueue。
- StorageService依赖OSSService与本地FS;在OSS模式下进一步依赖OSS SDK。
- Sentry中间件与服务贯穿全局;WebSocket服务由HTTP服务器升级触发。
- 中间件按顺序装配,形成统一的请求处理管线。
- 外部依赖:
- Bull(Redis队列)、ioredis(Redis客户端)、ali-oss(阿里云OSS)、ws(WebSocket)、rate-limiter-flexible(限流)等。
```mermaid
graph LR
Queue["QueueService"] --> Redis["RedisService"]
Queue --> MemQ["MemoryQueue"]
Store["StorageService"] --> OSS["OSSService"]
App["Koa App"] --> Sentry["Sentry服务"]
App --> WS["WebSocket服务"]
App --> Auth["认证中间件"]
App --> Err["错误处理中间件"]
App --> Sec["安全中间件"]
App --> Perf["性能监控中间件"]
App --> RL["限流中间件"]
```
图表来源
- [server/src/services/queue.service.ts:18-20](file://server/src/services/queue.service.ts#L18-L20)
- [server/src/services/storage.service.ts:6](file://server/src/services/storage.service.ts#L6)
- [server/src/app.ts:64-75](file://server/src/app.ts#L64-L75)
章节来源
- [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347)
- [server/src/services/storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278)
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
## 性能考量
- 队列并发:书籍生成队列最大并发3,避免资源争用;内存队列作为降级保障。
- 缓存命中:合理设置TTL与键命名规范,减少热点Key竞争。
- 存储I/O:OSS上传使用合适的内容类型与CDN加速;本地存储注意磁盘IO与目录层级。
- 监控指标:性能中间件统计慢请求与错误率,便于定位瓶颈。
- 限流策略:针对不同接口设定差异化限流,防止突发流量冲击。
## 故障排查指南
- Redis不可用:
- 现象:队列不可用标记,任务回退至内存队列;缓存读写返回空。
- 排查:检查连接参数、网络连通性、密码与DB索引。
- OSS上传失败:
- 现象:抛出错误并记录失败原因。
- 排查:确认Region、AccessKey、Bucket、Endpoint配置;检查权限与CDN域名。
- WebSocket连接异常:
- 现象:升级失败或客户端断开。
- 排查:确认路径为/ws;检查clientId与客户端状态。
- Sentry未上报:
- 现象:未配置DSN时跳过初始化。
- 排查:检查环境变量与采样率设置。
- 限流触发:
- 现象:429响应与Retry-After头部。
- 排查:检查限流键生成规则与Redis可用性。
章节来源
- [server/src/services/redis.service.ts:246-255](file://server/src/services/redis.service.ts#L246-L255)
- [server/src/services/oss.service.ts:53-56](file://server/src/services/oss.service.ts#L53-L56)
- [server/src/services/websocket.service.ts:104-130](file://server/src/services/websocket.service.ts#L104-L130)
- [server/src/services/sentry.service.ts:10-13](file://server/src/services/sentry.service.ts#L10-L13)
- [server/src/middleware/rate-limiter.ts:60-71](file://server/src/middleware/rate-limiter.ts#L60-L71)
## 结论
该服务基础设施以“服务单例 + 中间件管线”的方式构建,实现了高内聚、低耦合的解耦设计。通过Redis/Bull队列、OSS/本地存储、Sentry监控与WebSocket推送,满足了AI有声书生成平台对异步处理、大规模媒体存储、可观测性与实时性的需求。同时,完善的降级策略(Redis不可用时的内存队列)与中间件体系(认证、安全、性能、限流)提升了系统的鲁棒性与可运维性。
## 附录
- 启动流程要点:
- 初始化Sentry
- 连接数据库
- 测试Redis与存储连接
- 初始化WebSocket
- 注册路由与中间件
- 启动队列处理器并恢复中断任务
- 注册优雅关闭钩子
章节来源
- [server/src/app.ts:133-192](file://server/src/app.ts#L133-L192)
- [server/src/modules/book-generator/book-queue.processor.ts:88-124](file://server/src/modules/book-generator/book-queue.processor.ts#L88-L124)