Files
video_socket-server/.qoder/repowiki/zh/content/部署指南/环境配置.md
2026-05-16 13:24:02 +08:00

347 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 环境配置
<cite>
**本文引用的文件**
- [package.json](file://package.json)
- [src/index.ts](file://src/index.ts)
- [src/class/options.ts](file://src/class/options.ts)
- [src/server.ts](file://src/server.ts)
- [run.bat](file://run.bat)
- [tsconfig.json](file://tsconfig.json)
- [tsconfig.build.json](file://tsconfig.build.json)
- [.eslintrc.cjs](file://.eslintrc.cjs)
- [.gitignore](file://.gitignore)
- [client/package.json](file://client/package.json)
- [jest.config.js](file://jest.config.js)
- [test/env_macos.postman_environment.json](file://test/env_macos.postman_environment.json)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本指南面向部署与运维人员,提供该视频 socket 服务器项目的环境配置说明,涵盖 Node.js 版本要求、操作系统兼容性、系统资源建议、开发与生产差异、环境变量与运行参数、以及常见问题排查。文档中的所有技术细节均来自仓库内现有配置文件与源码。
## 项目结构
该项目采用前后端同库的组织方式:服务端为 Node.js + Express + WebSocket前端静态资源位于 client/public 与 client/src构建与打包通过 TypeScript 编译器与 pkg 工具完成;测试与质量工具包括 Jest、ESLint、Swagger 文档生成等。
```mermaid
graph TB
subgraph "服务端"
IDX["src/index.ts<br/>入口与命令行参数解析"]
SRV["src/server.ts<br/>Express 应用与路由"]
OPT["src/class/options.ts<br/>运行参数接口"]
end
subgraph "客户端"
PUB["client/public<br/>静态页面与资源"]
SRC["client/src<br/>前端模块与示例"]
end
subgraph "构建与工具"
PKG["package.json<br/>脚本与依赖"]
TSC["tsconfig.json<br/>编译配置"]
TSB["tsconfig.build.json<br/>构建扩展"]
ESL[".eslintrc.cjs<br/>ESLint 规则"]
JST["jest.config.js<br/>测试配置"]
end
IDX --> SRV
SRV --> PUB
SRV --> SRC
PKG --> IDX
PKG --> SRV
TSC --> IDX
TSC --> SRV
TSB --> PKG
ESL --> IDX
ESL --> SRV
JST --> PKG
```
**图示来源**
- [src/index.ts:1-109](file://src/index.ts#L1-L109)
- [src/server.ts:1-90](file://src/server.ts#L1-L90)
- [src/class/options.ts:1-10](file://src/class/options.ts#L1-L10)
- [package.json:1-60](file://package.json#L1-L60)
- [tsconfig.json:1-13](file://tsconfig.json#L1-L13)
- [tsconfig.build.json:1-5](file://tsconfig.build.json#L1-L5)
- [.eslintrc.cjs:1-25](file://.eslintrc.cjs#L1-L25)
- [jest.config.js:1-196](file://jest.config.js#L1-L196)
**章节来源**
- [package.json:1-60](file://package.json#L1-L60)
- [src/index.ts:1-109](file://src/index.ts#L1-L109)
- [src/server.ts:1-90](file://src/server.ts#L1-L90)
- [tsconfig.json:1-13](file://tsconfig.json#L1-L13)
- [tsconfig.build.json:1-5](file://tsconfig.build.json#L1-L5)
- [.eslintrc.cjs:1-25](file://.eslintrc.cjs#L1-L25)
- [jest.config.js:1-196](file://jest.config.js#L1-L196)
## 核心组件
- 入口与参数解析负责从命令行读取运行参数支持端口、HTTPS 密钥证书、信令类型、通信模式、日志级别等;同时支持通过环境变量覆盖默认值。
- Express 应用统一处理静态资源、上传接口、Swagger 文档、CORS、JSON/URL 编码请求体等。
- 运行参数接口:定义了安全模式、端口、密钥/证书路径、信令类型、通信模式、日志级别等字段。
**章节来源**
- [src/index.ts:14-91](file://src/index.ts#L14-L91)
- [src/class/options.ts:1-10](file://src/class/options.ts#L1-L10)
- [src/server.ts:14-89](file://src/server.ts#L14-L89)
## 架构总览
下图展示了启动流程与关键组件交互:命令行参数解析后创建 Express 应用,按需启用 HTTPS随后根据信令类型选择 WebSocket 或 HTTP 轮询,并输出启动日志与访问地址。
```mermaid
sequenceDiagram
participant CLI as "命令行/环境变量"
participant IDX as "RenderStreaming.run()"
participant SRV as "createServer()"
participant HTTPS as "HTTPS 服务器"
participant HTTP as "HTTP 服务器"
participant WS as "WebSocket 信令"
CLI->>IDX : 解析参数(-p/-s/-k/-c/-t/-m/-l)
IDX->>SRV : 创建 Express 应用
alt 启用安全模式
IDX->>HTTPS : 使用 key/cert 创建 HTTPS 服务器
HTTPS-->>IDX : 输出 https : // 地址
else 非安全模式
IDX->>HTTP : 使用 Express 监听端口
HTTP-->>IDX : 输出 http : // 地址
end
IDX->>WS : 按信令类型启动 WebSocket 信令
WS-->>IDX : 信令就绪
```
**图示来源**
- [src/index.ts:14-91](file://src/index.ts#L14-L91)
- [src/server.ts:14-42](file://src/server.ts#L14-L42)
## 详细组件分析
### 命令行参数与环境变量
- 支持的参数与默认值(优先级:命令行 > 环境变量 > 默认值):
- 端口:-p/--port默认值来自环境变量 PORT未设置时为 80注意脚本 start/dev 默认 8080
- 安全模式:-s/--secure默认开启脚本 start/dev 默认开启)
- 密钥文件:-k/--keyfile默认 server.key
- 证书文件:-c/--certfile默认 server.cert
- 信令类型:-t/--type默认 websocket支持 websocket/http
- 通信模式:-m/--mode默认 public支持 public/private
- 日志级别:-l/--logging默认 dev支持 combined、dev、short、tiny、none
- 环境变量映射:
- PORT、SECURE、KEYFILE、CERTFILE、TYPE、MODE、LOGGING
```mermaid
flowchart TD
Start(["启动"]) --> Parse["解析命令行参数"]
Parse --> EnvCheck{"检查对应环境变量"}
EnvCheck --> |存在| UseEnv["使用环境变量值"]
EnvCheck --> |不存在| UseDefault["使用内置默认值"]
UseEnv --> Merge["合并为最终配置"]
UseDefault --> Merge
Merge --> Mode{"是否指定安全模式"}
Mode --> |是| HTTPS["启用 HTTPS 并加载 key/cert"]
Mode --> |否| HTTP["启用 HTTP"]
HTTPS --> Signaling["按信令类型启动"]
HTTP --> Signaling
Signaling --> Log["输出启动日志与访问地址"]
Log --> End(["完成"])
```
**图示来源**
- [src/index.ts:16-42](file://src/index.ts#L16-L42)
- [src/index.ts:55-91](file://src/index.ts#L55-L91)
**章节来源**
- [src/index.ts:16-42](file://src/index.ts#L16-L42)
- [src/index.ts:55-91](file://src/index.ts#L55-L91)
### Express 应用与静态资源
- CORS允许任意来源访问
- 请求体解析:支持 JSON 与 URL 编码
- 静态资源:
- 根路径 / 映射到 client/public/index.html
- /module 映射到 client/src
- /uploads 映射到 client/public/uploads
- 上传接口:/api/upload/avatar使用 multer 将头像保存至 uploads/avatars并按用户 ID 重命名
- Swagger 文档初始化
- /config 接口返回当前信令与模式、日志级别等配置
**章节来源**
- [src/server.ts:14-89](file://src/server.ts#L14-L89)
### 构建与打包配置
- TypeScript 编译:
- tsconfig.json目标 ES5输出目录 build包含 src 与 test
- tsconfig.build.json仅包含 src继承 tsconfig.json
- 打包:
- package.json 中的 pkg 字段声明 assets 与 targets其中 targets 包含 "node10",表明以 Node.js 10 可执行文件为目标进行打包
**章节来源**
- [tsconfig.json:1-13](file://tsconfig.json#L1-L13)
- [tsconfig.build.json:1-5](file://tsconfig.build.json#L1-L5)
- [package.json:50-58](file://package.json#L50-L58)
### 测试与质量工具
- Jest测试框架收集覆盖率测试匹配规则覆盖 src 与 test 下的 ts 文件
- ESLint基于 TypeScript 推荐规则与 jest 插件,解析 tsconfig.lint.json
- 客户端 JS 测试client/package.json 提供测试脚本与 eslint 配置
**章节来源**
- [jest.config.js:1-196](file://jest.config.js#L1-L196)
- [.eslintrc.cjs:1-25](file://.eslintrc.cjs#L1-L25)
- [client/package.json:1-19](file://client/package.json#L1-L19)
## 依赖关系分析
- 运行时依赖节选express、ws、cors、multer、morgan、swagger-jsdoc、swagger-ui-express、uuid、debug 等
- 开发依赖节选jest、ts-jest、ts-node、typescript、eslint、pkg 等
- 构建与打包:通过 tsc 与 pkg 实现pkg targets 指向 node10
```mermaid
graph LR
P["package.json 依赖"] --> E["express"]
P --> W["ws"]
P --> C["cors"]
P --> M["multer"]
P --> MO["morgan"]
P --> SW["swagger-jsdoc / ui-express"]
P --> U["uuid"]
P --> D["debug"]
P -.dev.-> J["jest / ts-jest / ts-node"]
P -.dev.-> T["typescript / eslint"]
P -.dev.-> K["pkg"]
K --> OUT["可执行产物(目标 node10)"]
```
**图示来源**
- [package.json:14-46](file://package.json#L14-L46)
- [package.json:50-58](file://package.json#L50-L58)
**章节来源**
- [package.json:14-46](file://package.json#L14-L46)
- [package.json:50-58](file://package.json#L50-L58)
## 性能考虑
- 日志级别dev/combined/short/tiny 可按需调整none 可减少 I/O 开销
- 上传与静态资源:头像上传使用磁盘存储,建议确保磁盘空间充足并定期清理
- 信令类型WebSocket 通常比 HTTP 轮询更高效,建议在生产环境使用 websocket
- 并发与资源Node.js 进程的并发能力取决于 CPU 核心数与内存大小,建议为每个实例分配至少 1GB 内存并预留系统开销
[本节为通用指导,不直接分析具体文件]
## 故障排查指南
- 端口占用或权限不足
- 症状:启动失败或端口被占用
- 排查:确认 -p/--port 指定端口可用;在类 Unix 系统上避免使用小于 1024 的特权端口
- HTTPS 证书缺失
- 症状:启动时报错无法读取 server.key/server.cert
- 排查:确认 -k/--keyfile 与 -c/--certfile 指向的文件存在且可读;或关闭安全模式 -s
- 信令类型错误
- 症状:日志提示信令类型不受支持并回退为 websocket
- 排查:确保 -t/--type 设置为 websocket 或 http
- 静态资源 404
- 症状:访问 / 或 /module 返回 404
- 排查:确认 client/public 与 client/src 目录存在且包含所需文件
- 上传失败
- 症状:/api/upload/avatar 返回错误
- 排查:确认 uploads/avatars 目录存在且写权限正常;检查文件名重命名逻辑
- 环境变量未生效
- 症状PORT/SECURE 等未按预期工作
- 排查:确认环境变量名正确且在启动前导出;命令行参数优先于环境变量
**章节来源**
- [src/index.ts:55-91](file://src/index.ts#L55-L91)
- [src/server.ts:29-39](file://src/server.ts#L29-L39)
- [src/server.ts:62-83](file://src/server.ts#L62-L83)
## 结论
本项目对 Node.js 的最低版本要求可参考打包目标 node10实际运行建议使用较新的 LTS 版本以获得更好的稳定性与性能。生产环境推荐使用 WebSocket 信令、HTTPS 加密、合理设置日志级别与磁盘空间,并通过环境变量或命令行参数进行灵活配置。
[本节为总结,不直接分析具体文件]
## 附录
### Node.js 版本要求
- 打包目标node10
- 建议使用Node.js LTS如 18.x/20.x
**章节来源**
- [package.json:55-57](file://package.json#L55-L57)
### 操作系统兼容性
- 服务器端Express 与 Node.js 核心模块在 Windows、Linux、macOS 上均可运行
- 客户端静态资源:无平台特定限制
- 注意Windows 批处理脚本 run.bat 用于本地快速启动
**章节来源**
- [run.bat:1-17](file://run.bat#L1-L17)
### 系统资源建议
- 内存:建议每实例至少 1GB视并发连接与媒体负载适当增加
- CPU多核 CPU 更有利于并发处理
- 磁盘:确保 uploads/avatars 目录有足够空间;静态资源目录 client/public 与 client/src 需要可读权限
**章节来源**
- [src/server.ts:44-57](file://src/server.ts#L44-L57)
### 开发环境与生产环境
- 开发环境
- 启动npm run dev使用 ts-node 直接运行 src/index.ts
- 参数示例:-s -p 8080 -m private -l dev
- 生产环境
- 构建npm run buildTypeScript 编译到 build
- 启动npm run start运行 build/index.js
- 参数示例:-s -p 8080 -m private -k ./server.key -c ./server.cert -l dev
- 打包npm run pack使用 pkg目标 node10
**章节来源**
- [package.json:5-12](file://package.json#L5-L12)
- [run.bat:3-4](file://run.bat#L3-L4)
### 环境变量与运行参数对照
- PORT覆盖端口默认值
- SECURE启用 HTTPS布尔
- KEYFILEHTTPS 秘钥文件路径
- CERTFILEHTTPS 证书文件路径
- TYPE信令类型 websocket/http
- MODE通信模式 public/private
- LOGGING日志级别 combined/dev/short/tiny/none
**章节来源**
- [src/index.ts:20-29](file://src/index.ts#L20-L29)
### 信令模式与通信模式
- 信令模式websocket默认或 http轮询
- 通信模式public默认或 private私有模式用于限制访问
**章节来源**
- [src/index.ts:26-27](file://src/index.ts#L26-L27)
- [src/server.ts:25-25](file://src/server.ts#L25-L25)
### 端口与证书路径
- 端口:可通过 -p/--port 或环境变量 PORT 指定
- 证书HTTPS 模式下需提供 -k/--keyfile 与 -c/--certfile
**章节来源**
- [src/index.ts:22-25](file://src/index.ts#L22-L25)
- [src/index.ts:56-59](file://src/index.ts#L56-L59)
### Swagger 与静态资源
- Swagger 文档:通过 initSwagger 初始化
- 静态资源:根路径与 /module、/uploads 均已配置
**章节来源**
- [src/server.ts:41-42](file://src/server.ts#L41-L42)
- [src/server.ts:27-28](file://src/server.ts#L27-L28)
- [src/server.ts:86-86](file://src/server.ts#L86-L86)
### Postman 环境
- macOS 环境示例:包含 url 变量 localhost:8080
**章节来源**
- [test/env_macos.postman_environment.json:1-14](file://test/env_macos.postman_environment.json#L1-L14)