本文档引用的文件
本文件为AI有声书生成平台的环境搭建指南,覆盖开发环境、测试环境与生产环境的完整部署流程。内容包括Node.js、MySQL、Redis、FFmpeg等核心依赖的安装与配置,Docker容器化部署方案(含nginx反向代理、服务编排与网络设置),环境变量配置模板、数据库初始化脚本与缓存配置,以及开发工具链、IDE设置与调试环境准备。同时提供环境验证步骤与常见问题解决方案。
项目采用前后端分离架构,后端基于Node.js/Koa,前端基于uniapp/Vue3。后端使用Prisma进行数据库建模与迁移,TTS模块支持多家语音合成服务,视频生成功能基于FFmpeg。
graph TB
subgraph "前端"
FE_MY["my-uniapp-vue3<br/>H5/小程序"]
end
subgraph "后端"
BE_SERVER["server<br/>Koa 应用"]
BE_PRISMA["Prisma Schema<br/>MySQL"]
BE_REDIS["Redis 缓存"]
BE_OSS["阿里云 OSS"]
BE_FFMPEG["FFmpeg 音视频处理"]
end
subgraph "基础设施"
NGINX["Nginx 反向代理"]
DOCKER["Docker Compose"]
end
FE_MY --> NGINX
NGINX --> BE_SERVER
BE_SERVER --> BE_PRISMA
BE_SERVER --> BE_REDIS
BE_SERVER --> BE_OSS
BE_SERVER --> BE_FFMPEG
DOCKER --> NGINX
图表来源
章节来源
章节来源
后端应用启动时依次完成:Sentry初始化、数据库连接、Redis连接测试、存储连接测试、订阅套餐初始化、WebSocket服务初始化、队列处理器初始化与优雅关闭处理。Nginx作为反向代理,将/api前缀转发至后端服务,并提供静态资源服务与HTTPS支持。
sequenceDiagram
participant Client as "客户端"
participant Nginx as "Nginx 反向代理"
participant App as "Koa 应用"
participant DB as "MySQL"
participant Cache as "Redis"
participant Store as "存储(OSS/本地)"
Client->>Nginx : 请求 /api/*
Nginx->>App : 反向代理到 127.0.0.1 : 3000
App->>DB : 连接与查询
App->>Cache : 读取/写入缓存
App->>Store : 上传/下载文件
App-->>Nginx : 响应
Nginx-->>Client : 返回结果
图表来源
前端环境:根据运行平台自动选择API地址,H5环境默认使用相对路径并通过Nginx代理。
flowchart TD
Start(["加载 .env"]) --> LoadBE["后端配置加载<br/>config/index.ts"]
LoadBE --> LoadFE["前端API地址配置<br/>my-uniapp-vue3/src/utils/config.ts"]
LoadFE --> EnvOK["环境变量生效"]
图表来源
章节来源
支持MySQL数据源,通过DATABASE_URL连接字符串配置。
erDiagram
USER {
int id PK
string phone
string openid
string nickname
string avatar
int memberLevel
datetime memberExpireAt
int dailyUsage
string lastUsageDate
datetime createdAt
datetime updatedAt
}
BOOK {
int id PK
int userId
string title
string subtitle
text description
string coverUrl
string targetAudience
string style
string bookScale
int totalChapters
int estimatedWords
int progress
boolean isPublished
longtext outlineJson
text foreword
text afterword
text errorMsg
datetime createdAt
datetime updatedAt
string failedStage
string genStage
string status
text bookAnalysis
}
BOOK_CHAPTER {
int id PK
int bookId
int parentId
int level
int number
string title
longtext content
int wordCount
text contentError
datetime generatedAt
text audioUrl
int audioDuration
text videoUrl
int videoDuration
boolean isPublic
string genStage
text lrcLyrics
string status
}
ORDER {
int id PK
int userId
string orderNo
int planId
string productType
decimal amount
string status
string paymentMethod
string paymentId
datetime paidAt
datetime createdAt
datetime updatedAt
}
USER ||--o{ BOOK : "拥有"
BOOK ||--o{ BOOK_CHAPTER : "包含"
USER ||--o{ ORDER : "下单"
图表来源
章节来源
存储服务:统一OSS与本地存储接口,支持音频、视频、封面与通用文件的上传、下载、删除与签名URL生成。
classDiagram
class RedisService {
+isAvailable() boolean
+get(key) string
+set(key, value, ttl) boolean
+getJSON(key) T
+setJSON(key, value, ttl) boolean
+del(key) boolean
+delPattern(pattern) boolean
+hset(key, field, value) boolean
+hget(key, field) string
+hgetall(key) Record
+incr(key) number
+expire(key, seconds) boolean
+exists(key) boolean
+testConnection() boolean
+disconnect() void
}
class StorageService {
+setStorageType(type) void
+getStorageType() StorageType
+uploadAudio(localPath, audioId) string
+uploadVideo(localPath, videoId) string
+uploadCover(localPath, bookId) string
+uploadFile(localPath, category, id) string
+uploadBuffer(buffer, objectKey, contentType) string
+deleteFile(url) void
+deleteDirectory(prefix, id) void
+downloadFile(url) Buffer
+getSignedUrl(url, expires) string
+testConnection() boolean
}
RedisService <.. StorageService : "缓存/存储依赖"
图表来源
章节来源
视频生成:基于FFmpeg实现图片+音频合成、Ken Burns效果、字幕叠加与背景音乐混音。
sequenceDiagram
participant Client as "客户端"
participant TTS as "TTS服务"
participant Provider as "TTS提供商"
participant Merge as "音频合并"
participant Store as "存储服务"
Client->>TTS : 生成音频请求
TTS->>Provider : 分段合成
Provider-->>TTS : 音频片段/云端URL
TTS->>Merge : 合并音频
Merge-->>TTS : 输出MP3
TTS->>Store : 上传到OSS/本地
Store-->>TTS : 返回访问URL
TTS-->>Client : 返回音频URL
图表来源
章节来源
Nginx配置:将bookapi.rrbrr.com域名的所有请求代理到host.docker.internal:3000(即宿主机的3000端口)。
graph TB
subgraph "宿主机"
HostPort["端口 80 -> 容器 80"]
Conf["bookapi.conf"]
App["后端应用:3000"]
end
subgraph "Docker容器"
Nginx["nginx:latest"]
end
HostPort --> Nginx
Conf --> Nginx
Nginx --> App
图表来源
章节来源
部署依赖:PM2、Nginx、Docker、MySQL、Redis。
graph TB
BE_PKG["server/package.json 依赖"]
FE_PKG["my-uniapp-vue3/package.json 依赖"]
BE_PKG --> Koa["@koa/*"]
BE_PKG --> Prisma["@prisma/*"]
BE_PKG --> Redis["ioredis"]
BE_PKG --> FFmpeg["fluent-ffmpeg"]
BE_PKG --> LangChain["@langchain/*"]
BE_PKG --> Bull["bull"]
BE_PKG --> Axios["axios"]
FE_PKG --> UniApp["@dcloudio/uni-app"]
FE_PKG --> Pinia["pinia"]
FE_PKG --> Vue["vue"]
FE_PKG --> Vite["vite"]
图表来源
章节来源
[本节为通用指导,无需具体文件引用]
章节来源
通过本指南,您可以在开发、测试与生产环境中快速搭建AI有声书生成平台。建议在开发环境使用本地MySQL与Redis,在生产环境采用Docker容器化部署并结合Nginx反向代理与PM2进程管理,确保高可用与可扩展性。定期验证数据库迁移、缓存与存储连接,并建立完善的日志与监控体系。
[本节为总结性内容,无需具体文件引用]
章节来源
章节来源
章节来源
章节来源
章节来源