mb-rrvideo-server 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/DOCKER.md CHANGED
@@ -1,20 +1,211 @@
1
- # Docker 部署指南
1
+ # Docker 部署完整指南
2
2
 
3
- mb-rrvideo-server 视频转码服务 Docker 镜像,开箱即用。
3
+ 本文档面向 Docker 新手,提供从零开始的完整部署指南。
4
4
 
5
- ## 快速开始
5
+ ## 重要说明
6
6
 
7
- ### 1. 准备配置文件
7
+ **项目命名:**
8
+ - **npm 包名**:`mb-rrvideo-server`(转码服务的 npm 包)
9
+ - **Docker 镜像名**:`mb-rrvideo-converter`(完整的转码系统镜像)
10
+ - **容器名**:`rrvideo-server`(运行中的容器)
8
11
 
9
- 在部署目录创建 `config.json`:
12
+ **为什么镜像名不同?**
13
+ - `mb-rrvideo-server` 是 npm 包,只包含转码服务代码
14
+ - `mb-rrvideo-converter` 是 Docker 镜像,包含完整的转码系统(Node.js + mb-rrvideo + mb-rrvideo-server + Playwright)
15
+ - 使用不同的名称避免混淆
10
16
 
17
+ **快速参考:**
11
18
  ```bash
12
- mkdir -p rrvideo-deploy
13
- cd rrvideo-deploy
19
+ # 下载 npm 包
20
+ npm pack mb-rrvideo-server
21
+
22
+ # 构建 Docker 镜像
23
+ docker build -t mb-rrvideo-converter:latest .
24
+
25
+ # 查看镜像
26
+ docker images mb-rrvideo-converter
27
+
28
+ # 运行容器
29
+ docker-compose up -d
30
+
31
+ # 容器名称
32
+ docker ps | grep rrvideo-server
33
+ ```
34
+
35
+ ## 目录
36
+
37
+ - [什么是 Docker](#什么是-docker)
38
+ - [前置准备](#前置准备)
39
+ - [文件说明](#文件说明)
40
+ - [方式一:使用 npm 包快速部署](#方式一使用-npm-包快速部署推荐)
41
+ - [方式二:从源码构建镜像](#方式二从源码构建镜像)
42
+ - [方式三:镜像迁移到其他服务器](#方式三镜像迁移到其他服务器)
43
+ - [常用命令](#常用命令)
44
+ - [故障排除](#故障排除)
45
+ - [镜像优化说明](#镜像优化说明)
46
+
47
+ ---
48
+
49
+ ## 什么是 Docker
50
+
51
+ Docker 是一个容器化平台,可以把应用和所有依赖打包成一个"镜像",然后在任何服务器上运行。
52
+
53
+ **核心概念:**
54
+ - **镜像(Image)**:类似"安装包",包含应用和所有依赖
55
+ - **容器(Container)**:镜像运行后的实例,类似"运行中的程序"
56
+ - **Dockerfile**:构建镜像的"配方",定义如何打包应用
57
+ - **docker-compose.yml**:配置文件,定义如何运行容器(端口、目录挂载等)
58
+
59
+ **为什么需要两个文件?**
60
+ - `Dockerfile`:用于**构建镜像**(打包应用)
61
+ - `docker-compose.yml`:用于**运行容器**(启动应用)
62
+
63
+ ---
64
+
65
+ ## 前置准备
66
+
67
+ ### 1. 安装 Docker
68
+
69
+ **CentOS/RHEL:**
70
+ ```bash
71
+ # 安装 Docker
72
+ sudo yum install -y yum-utils
73
+ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
74
+ sudo yum install -y docker-ce docker-ce-cli containerd.io
75
+
76
+ # 启动 Docker
77
+ sudo systemctl start docker
78
+ sudo systemctl enable docker
79
+
80
+ # 验证安装
81
+ docker --version
82
+ ```
83
+
84
+ **Ubuntu/Debian:**
85
+ ```bash
86
+ # 安装 Docker
87
+ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
88
+
89
+ # 启动 Docker
90
+ sudo systemctl start docker
91
+ sudo systemctl enable docker
92
+
93
+ # 验证安装
94
+ docker --version
95
+ ```
96
+
97
+ ### 2. 安装 Docker Compose
98
+
99
+ ```bash
100
+ # 下载 Docker Compose
101
+ sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
102
+
103
+ # 添加执行权限
104
+ sudo chmod +x /usr/local/bin/docker-compose
105
+
106
+ # 验证安装
107
+ docker-compose --version
108
+ ```
109
+
110
+ ### 3. 配置 Docker 国内镜像加速(可选但推荐)
111
+
112
+ ```bash
113
+ # 创建配置目录
114
+ sudo mkdir -p /etc/docker
115
+
116
+ # 配置镜像加速
117
+ sudo tee /etc/docker/daemon.json <<-'EOF'
118
+ {
119
+ "registry-mirrors": [
120
+ "https://docker.mirrors.ustc.edu.cn",
121
+ "https://hub-mirror.c.163.com",
122
+ "https://mirror.ccs.tencentyun.com"
123
+ ]
124
+ }
125
+ EOF
126
+
127
+ # 重启 Docker
128
+ sudo systemctl daemon-reload
129
+ sudo systemctl restart docker
130
+ ```
131
+
132
+ ---
133
+
134
+ ## 文件说明
135
+
136
+ ### Dockerfile
137
+ 用于构建镜像,包含:
138
+ - **Node.js 22** 环境
139
+ - **mb-rrvideo**(转码工具,全局安装)
140
+ - **mb-rrvideo-server**(转码服务,全局安装)
141
+ - **Playwright Chromium**(浏览器,mb-rrvideo 依赖)
142
+ - **PM2**(进程管理)
143
+ - 所有系统依赖
144
+
145
+ **验证 mb-rrvideo 是否安装:**
146
+ ```bash
147
+ # 进入容器
148
+ docker-compose exec rrvideo-server bash
149
+
150
+ # 检查 mb-rrvideo
151
+ rrvideos --version
152
+ # 输出:mb-rrvideo version x.x.x
153
+
154
+ # 检查 mb-rrvideo-server
155
+ rrvideo-server --version
156
+ # 或者
157
+ pm2 status
14
158
  ```
15
159
 
16
- 创建 `config.json`(参考 config.example.json):
160
+ ### docker-compose.yml
161
+ 用于运行容器,配置:
162
+ - 端口映射(24203)
163
+ - 目录挂载(config、logs、temp、Video)
164
+ - 环境变量
165
+ - 资源限制
17
166
 
167
+ ### config.json
168
+ 服务配置文件,包含:
169
+ - 服务器端口
170
+ - 存储配置(本地/MinIO)
171
+ - 转码参数
172
+ - 日志配置
173
+
174
+ ---
175
+
176
+ ## 方式一:使用 npm 包快速部署(推荐)
177
+
178
+ 这种方式最简单,适合快速部署。
179
+
180
+ ### 步骤 1:下载文件
181
+
182
+ ```bash
183
+ # 创建部署目录
184
+ mkdir -p ~/rrvideo-deploy
185
+ cd ~/rrvideo-deploy
186
+
187
+ # 从 npm 下载文件
188
+ npm pack mb-rrvideo-server
189
+ tar -xzf mb-rrvideo-server-*.tgz
190
+ cd package
191
+
192
+ # 或者直接下载
193
+ wget https://registry.npmjs.org/mb-rrvideo-server/-/mb-rrvideo-server-1.0.2.tgz
194
+ tar -xzf mb-rrvideo-server-1.0.2.tgz
195
+ cd package
196
+ ```
197
+
198
+ ### 步骤 2:准备配置文件
199
+
200
+ ```bash
201
+ # 复制配置模板
202
+ cp config.example.json config.json
203
+
204
+ # 编辑配置(根据实际情况修改)
205
+ vi config.json
206
+ ```
207
+
208
+ **配置示例(本地存储):**
18
209
  ```json
19
210
  {
20
211
  "server": {
@@ -45,20 +236,213 @@ cd rrvideo-deploy
45
236
  }
46
237
  ```
47
238
 
48
- ### 2. 下载 docker-compose.yml
239
+ ### 步骤 3:构建镜像
49
240
 
50
241
  ```bash
51
- wget https://raw.githubusercontent.com/your-repo/mb-rrvideo-server/main/docker-compose.yml
242
+ # 构建镜像(需要 10-20 分钟,取决于网络速度)
243
+ docker build -t mb-rrvideo-converter:latest .
244
+
245
+ # 查看镜像
246
+ docker images mb-rrvideo-converter
247
+ ```
248
+
249
+ **输出示例:**
250
+ ```
251
+ REPOSITORY TAG IMAGE ID CREATED SIZE
252
+ mb-rrvideo-converter latest abc123def456 2 minutes ago 1.5GB
52
253
  ```
53
254
 
54
- 或手动创建 `docker-compose.yml`:
255
+ ### 步骤 4:启动服务
55
256
 
56
- ```yaml
257
+ ```bash
258
+ # 使用 docker-compose 启动
259
+ docker-compose up -d
260
+
261
+ # 查看容器状态
262
+ docker-compose ps
263
+ ```
264
+
265
+ **输出示例:**
266
+ ```
267
+ NAME IMAGE STATUS PORTS
268
+ rrvideo-server mb-rrvideo-converter:latest Up 10 seconds 0.0.0.0:24203->24203/tcp
269
+ ```
270
+
271
+ ### 步骤 5:验证服务
272
+
273
+ ```bash
274
+ # 健康检查
275
+ curl http://localhost:24203/health
276
+
277
+ # 查看日志
278
+ docker-compose logs -f
279
+
280
+ # 验证 mb-rrvideo 是否正常
281
+ docker-compose exec rrvideo-server rrvideos --version
282
+
283
+ # 验证 Playwright 浏览器
284
+ docker-compose exec rrvideo-server npx playwright --version
285
+ ```
286
+
287
+ **成功输出:**
288
+ ```json
289
+ {"result_code":0,"message":"rrvideo-server is running"}
290
+ ```
291
+
292
+ ```bash
293
+ # mb-rrvideo 版本信息
294
+ mb-rrvideo version 1.x.x
295
+
296
+ # Playwright 版本信息
297
+ Version 1.x.x
298
+ ```
299
+
300
+ ### 步骤 6:测试转码功能(可选)
301
+
302
+ ```bash
303
+ # 进入容器
304
+ docker-compose exec rrvideo-server bash
305
+
306
+ # 测试 mb-rrvideo 转码(需要准备一个 rrweb 录屏 JSON 文件)
307
+ # 示例:
308
+ cat > /tmp/test.json << 'EOF'
309
+ {
310
+ "events": [...]
311
+ }
312
+ EOF
313
+
314
+ # 执行转码
315
+ rrvideos convert /tmp/test.json -o /tmp/test.mp4
316
+
317
+ # 检查输出
318
+ ls -lh /tmp/test.mp4
319
+ ```
320
+
321
+ 如果能成功生成视频文件,说明 mb-rrvideo 工作正常。
322
+
323
+ ---
324
+
325
+ ## 方式二:从源码构建镜像
326
+
327
+ 适合需要修改代码或自定义配置的场景。
328
+
329
+ ### 步骤 1:克隆仓库
330
+
331
+ ```bash
332
+ # 克隆代码
333
+ git clone https://github.com/your-repo/mb-rrvideo-server.git
334
+ cd mb-rrvideo-server
335
+
336
+ # 或者从 npm 下载
337
+ npm pack mb-rrvideo-server
338
+ tar -xzf mb-rrvideo-server-*.tgz
339
+ cd package
340
+ ```
341
+
342
+ ### 步骤 2:准备配置
343
+
344
+ ```bash
345
+ cp config.example.json config.json
346
+ vi config.json
347
+ ```
348
+
349
+ ### 步骤 3:构建镜像
350
+
351
+ ```bash
352
+ # 构建镜像
353
+ docker build -t mb-rrvideo-converter:1.0.2 .
354
+
355
+ # 同时打上 latest 标签
356
+ docker tag mb-rrvideo-converter:1.0.2 mb-rrvideo-converter:latest
357
+ ```
358
+
359
+ ### 步骤 4:启动服务
360
+
361
+ ```bash
362
+ docker-compose up -d
363
+ ```
364
+
365
+ ---
366
+
367
+ ## 方式三:镜像迁移到其他服务器
368
+
369
+ 当你在一台服务器上构建好镜像后,可以迁移到其他服务器使用。
370
+
371
+ ### 方法 A:导出/导入镜像文件(适合内网)
372
+
373
+ #### 在源服务器上:
374
+
375
+ ```bash
376
+ # 1. 导出镜像为 tar 文件
377
+ docker save mb-rrvideo-converter:latest -o mb-rrvideo-converter.tar
378
+
379
+ # 2. 查看文件大小
380
+ ls -lh mb-rrvideo-converter.tar
381
+ # 输出:-rw------- 1 root root 1.5G Feb 6 18:00 mb-rrvideo-converter.tar
382
+
383
+ # 3. 传输到目标服务器(选择一种方式)
384
+
385
+ # 方式1:使用 scp
386
+ scp mb-rrvideo-converter.tar user@target-server:/tmp/
387
+
388
+ # 方式2:使用 rsync(支持断点续传)
389
+ rsync -avz --progress mb-rrvideo-converter.tar user@target-server:/tmp/
390
+
391
+ # 方式3:使用 U 盘或移动硬盘
392
+ # 直接复制文件到移动设备
393
+ ```
394
+
395
+ #### 在目标服务器上:
396
+
397
+ ```bash
398
+ # 1. 导入镜像
399
+ docker load -i /tmp/mb-rrvideo-converter.tar
400
+
401
+ # 2. 验证镜像
402
+ docker images mb-rrvideo-converter
403
+
404
+ # 3. 准备部署目录
405
+ mkdir -p ~/rrvideo-deploy
406
+ cd ~/rrvideo-deploy
407
+
408
+ # 4. 创建配置文件
409
+ cat > config.json << 'EOF'
410
+ {
411
+ "server": {
412
+ "port": 24203,
413
+ "host": "0.0.0.0"
414
+ },
415
+ "storage": {
416
+ "type": "local",
417
+ "local": {
418
+ "video_dir": "/app/Video",
419
+ "temp_dir": "/app/temp"
420
+ }
421
+ },
422
+ "rrvideo": {
423
+ "speed": 1,
424
+ "skipInactive": true,
425
+ "mouseTail": false
426
+ },
427
+ "convert": {
428
+ "delete_after_upload": true,
429
+ "max_concurrent_tasks": 3
430
+ },
431
+ "log": {
432
+ "level": "INFO",
433
+ "flush_interval": 2000,
434
+ "buffer_max_size": 500
435
+ }
436
+ }
437
+ EOF
438
+
439
+ # 5. 创建 docker-compose.yml
440
+ cat > docker-compose.yml << 'EOF'
57
441
  version: '3.8'
58
442
 
59
443
  services:
60
444
  rrvideo-server:
61
- image: mb-rrvideo-server:latest
445
+ image: mb-rrvideo-converter:latest
62
446
  container_name: rrvideo-server
63
447
  restart: unless-stopped
64
448
 
@@ -75,96 +459,138 @@ services:
75
459
  environment:
76
460
  - TZ=Asia/Shanghai
77
461
  - NODE_ENV=production
462
+ EOF
463
+
464
+ # 6. 启动服务
465
+ docker-compose up -d
466
+
467
+ # 7. 验证服务
468
+ curl http://localhost:24203/health
78
469
  ```
79
470
 
80
- ### 3. 启动服务
471
+ ### 方法 B:使用私有镜像仓库(适合多服务器部署)
81
472
 
82
- ```bash
83
- # 使用预构建镜像
84
- docker-compose up -d
473
+ #### 步骤 1:搭建私有仓库(在一台服务器上)
85
474
 
86
- # 或从源码构建
87
- docker-compose build
88
- docker-compose up -d
475
+ ```bash
476
+ # 启动 Docker Registry
477
+ docker run -d \
478
+ -p 5000:5000 \
479
+ --restart=always \
480
+ --name registry \
481
+ -v /data/registry:/var/lib/registry \
482
+ registry:2
483
+
484
+ # 验证仓库
485
+ curl http://localhost:5000/v2/_catalog
89
486
  ```
90
487
 
91
- ### 4. 查看日志
488
+ #### 步骤 2:推送镜像到私有仓库
92
489
 
93
490
  ```bash
94
- # 查看容器日志
95
- docker-compose logs -f
491
+ # 在源服务器上
96
492
 
97
- # 查看应用日志
98
- tail -f logs/server/$(date +%Y-%m-%d)/*.log
493
+ # 1. 标记镜像(假设私有仓库地址是 192.168.1.100:5000)
494
+ docker tag mb-rrvideo-converter:latest 192.168.1.100:5000/mb-rrvideo-converter:latest
495
+
496
+ # 2. 配置 Docker 允许 HTTP 仓库(如果使用 HTTP)
497
+ sudo tee /etc/docker/daemon.json <<-'EOF'
498
+ {
499
+ "insecure-registries": ["192.168.1.100:5000"]
500
+ }
501
+ EOF
502
+
503
+ sudo systemctl restart docker
504
+
505
+ # 3. 推送镜像
506
+ docker push 192.168.1.100:5000/mb-rrvideo-converter:latest
99
507
  ```
100
508
 
101
- ### 5. 健康检查
509
+ #### 步骤 3:在目标服务器拉取镜像
102
510
 
103
511
  ```bash
104
- curl http://localhost:24203/health
105
- ```
512
+ # 在目标服务器上
106
513
 
107
- ## 从源码构建镜像
514
+ # 1. 配置 Docker 允许 HTTP 仓库
515
+ sudo tee /etc/docker/daemon.json <<-'EOF'
516
+ {
517
+ "insecure-registries": ["192.168.1.100:5000"]
518
+ }
519
+ EOF
108
520
 
109
- ### 1. 克隆仓库
521
+ sudo systemctl restart docker
110
522
 
111
- ```bash
112
- git clone <repository>
113
- cd mb-rrvideo-server
523
+ # 2. 拉取镜像
524
+ docker pull 192.168.1.100:5000/mb-rrvideo-converter:latest
525
+
526
+ # 3. 重新标记为本地镜像(可选)
527
+ docker tag 192.168.1.100:5000/mb-rrvideo-converter:latest mb-rrvideo-converter:latest
528
+
529
+ # 4. 部署(同方法 A 的步骤 3-7)
114
530
  ```
115
531
 
116
- ### 2. 构建镜像
532
+ ### 方法 C:使用公有镜像仓库(Docker Hub / 阿里云)
533
+
534
+ #### 使用 Docker Hub:
117
535
 
118
536
  ```bash
119
- docker build -t mb-rrvideo-server:latest .
120
- ```
537
+ # 在源服务器上
538
+
539
+ # 1. 登录 Docker Hub
540
+ docker login
121
541
 
122
- ### 3. 推送到私有仓库(可选)
542
+ # 2. 标记镜像(your-username 是你的 Docker Hub 用户名)
543
+ docker tag mb-rrvideo-converter:latest your-username/mb-rrvideo-converter:latest
544
+
545
+ # 3. 推送镜像
546
+ docker push your-username/mb-rrvideo-converter:latest
547
+ ```
123
548
 
124
549
  ```bash
125
- # 标记镜像
126
- docker tag mb-rrvideo-server:latest your-registry.com/mb-rrvideo-server:latest
550
+ # 在目标服务器上
551
+
552
+ # 1. 拉取镜像
553
+ docker pull your-username/mb-rrvideo-converter:latest
127
554
 
128
- # 推送镜像
129
- docker push your-registry.com/mb-rrvideo-server:latest
555
+ # 2. 重新标记
556
+ docker tag your-username/mb-rrvideo-converter:latest mb-rrvideo-converter:latest
557
+
558
+ # 3. 部署
130
559
  ```
131
560
 
132
- ## 使用 Docker Run(不使用 docker-compose)
561
+ #### 使用阿里云容器镜像服务:
133
562
 
134
563
  ```bash
135
- docker run -d \
136
- --name rrvideo-server \
137
- --restart unless-stopped \
138
- -p 24203:24203 \
139
- -v $(pwd)/config.json:/app/config/config.json:ro \
140
- -v $(pwd)/logs:/app/logs \
141
- -v $(pwd)/temp:/app/temp \
142
- -v $(pwd)/Video:/app/Video \
143
- -v $(pwd)/tasks:/app/tasks \
144
- -e TZ=Asia/Shanghai \
145
- -e NODE_ENV=production \
146
- mb-rrvideo-server:latest
147
- ```
564
+ # 在源服务器上
148
565
 
149
- ## 目录结构
566
+ # 1. 登录阿里云镜像仓库
567
+ docker login --username=your-aliyun-account registry.cn-hangzhou.aliyuncs.com
150
568
 
151
- 部署后的目录结构:
569
+ # 2. 标记镜像
570
+ docker tag mb-rrvideo-converter:latest registry.cn-hangzhou.aliyuncs.com/your-namespace/mb-rrvideo-converter:latest
152
571
 
572
+ # 3. 推送镜像
573
+ docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/mb-rrvideo-converter:latest
153
574
  ```
154
- rrvideo-deploy/
155
- ├── config.json # 配置文件(必须)
156
- ├── docker-compose.yml # Docker Compose 配置
157
- ├── logs/ # 日志目录(自动创建)
158
- │ ├── convert/ # 转码日志
159
- │ ├── merge/ # 合并日志
160
- │ └── server/ # 服务器日志
161
- ├── temp/ # 临时文件(自动创建)
162
- ├── Video/ # 视频输出(自动创建)
163
- └── tasks/ # 任务数据(自动创建)
575
+
576
+ ```bash
577
+ # 在目标服务器上
578
+
579
+ # 1. 拉取镜像
580
+ docker pull registry.cn-hangzhou.aliyuncs.com/your-namespace/mb-rrvideo-converter:latest
581
+
582
+ # 2. 重新标记
583
+ docker tag registry.cn-hangzhou.aliyuncs.com/your-namespace/mb-rrvideo-converter:latest mb-rrvideo-converter:latest
584
+
585
+ # 3. 部署
164
586
  ```
165
587
 
588
+ ---
589
+
166
590
  ## 常用命令
167
591
 
592
+ ### 容器管理
593
+
168
594
  ```bash
169
595
  # 启动服务
170
596
  docker-compose up -d
@@ -175,124 +601,237 @@ docker-compose stop
175
601
  # 重启服务
176
602
  docker-compose restart
177
603
 
178
- # 查看状态
604
+ # 删除容器(不删除数据)
605
+ docker-compose down
606
+
607
+ # 删除容器和数据卷
608
+ docker-compose down -v
609
+
610
+ # 查看容器状态
179
611
  docker-compose ps
180
612
 
181
- # 查看日志
613
+ # 查看容器详细信息
614
+ docker inspect rrvideo-server
615
+ ```
616
+
617
+ ### 日志查看
618
+
619
+ ```bash
620
+ # 查看实时日志
182
621
  docker-compose logs -f
183
622
 
623
+ # 查看最近 100 行日志
624
+ docker-compose logs --tail=100
625
+
626
+ # 查看应用日志
627
+ tail -f logs/server/$(date +%Y-%m-%d)/*.log
628
+ tail -f logs/convert/$(date +%Y-%m-%d)/*.log
629
+ ```
630
+
631
+ ### 进入容器调试
632
+
633
+ ```bash
184
634
  # 进入容器
185
635
  docker-compose exec rrvideo-server bash
186
636
 
187
- # 查看 PM2 状态
637
+ # 在容器内执行命令
188
638
  docker-compose exec rrvideo-server pm2 status
189
-
190
- # 查看 PM2 日志
191
639
  docker-compose exec rrvideo-server pm2 logs
640
+ docker-compose exec rrvideo-server rrvideos --version
641
+ docker-compose exec rrvideo-server node --version
642
+ ```
192
643
 
193
- # 更新镜像
194
- docker-compose pull
195
- docker-compose up -d
196
-
197
- # 清理容器
198
- docker-compose down
644
+ ### 镜像管理
199
645
 
200
- # 清理容器和数据卷
201
- docker-compose down -v
202
- ```
646
+ ```bash
647
+ # 查看所有镜像
648
+ docker images
203
649
 
204
- ## 配置说明
650
+ # 删除镜像
651
+ docker rmi mb-rrvideo-converter:latest
205
652
 
206
- ### 端口映射
653
+ # 清理未使用的镜像
654
+ docker image prune -a
207
655
 
208
- 默认映射 `24203:24203`,如需修改宿主机端口:
656
+ # 查看镜像详细信息
657
+ docker inspect mb-rrvideo-converter:latest
209
658
 
210
- ```yaml
211
- ports:
212
- - "8080:24203" # 宿主机8080 -> 容器24203
659
+ # 查看镜像构建历史
660
+ docker history mb-rrvideo-converter:latest
213
661
  ```
214
662
 
215
- ### 资源限制
663
+ ### 资源监控
216
664
 
217
- 在 docker-compose.yml 中配置:
665
+ ```bash
666
+ # 查看容器资源使用
667
+ docker stats rrvideo-server
218
668
 
219
- ```yaml
220
- deploy:
221
- resources:
222
- limits:
223
- cpus: '4'
224
- memory: 4G
225
- reservations:
226
- cpus: '2'
227
- memory: 2G
669
+ # 查看容器进程
670
+ docker top rrvideo-server
671
+
672
+ # 查看磁盘使用
673
+ docker system df
228
674
  ```
229
675
 
230
- ### 使用 MinIO 存储
676
+ ---
231
677
 
232
- 修改 `config.json`:
678
+ ## 故障排除
233
679
 
234
- ```json
235
- {
236
- "storage": {
237
- "type": "minio",
238
- "minio": {
239
- "endpoint": "minio.example.com",
240
- "port": 9000,
241
- "useSSL": true,
242
- "accessKey": "your-access-key",
243
- "secretKey": "your-secret-key",
244
- "bucket": "videos",
245
- "public_host": "https://cdn.example.com"
246
- }
247
- }
248
- }
680
+ ### 问题 1:服务无法启动
681
+
682
+ **症状:**
683
+ ```bash
684
+ docker-compose ps
685
+ # 显示 Exit 1 或 Restarting
249
686
  ```
250
687
 
251
- ## 故障排除
688
+ **排查步骤:**
252
689
 
253
- ### 服务无法启动
690
+ 1. 查看日志:
691
+ ```bash
692
+ docker-compose logs
693
+ ```
254
694
 
255
- 1. 检查配置文件是否存在:
695
+ 2. 检查配置文件:
256
696
  ```bash
257
- ls -la config.json
697
+ cat config.json
698
+ # 确保 JSON 格式正确
258
699
  ```
259
700
 
260
- 2. 检查配置文件格式:
701
+ 3. 检查端口占用:
261
702
  ```bash
262
- cat config.json | jq .
703
+ netstat -tlnp | grep 24203
704
+ # 如果端口被占用,修改 docker-compose.yml 中的端口映射
263
705
  ```
264
706
 
265
- 3. 查看容器日志:
707
+ 4. 检查目录权限:
266
708
  ```bash
267
- docker-compose logs
709
+ ls -la logs/ temp/ Video/
710
+ # 确保目录可写
268
711
  ```
269
712
 
270
- ### 转码失败
713
+ ### 问题 2:转码失败
714
+
715
+ **症状:**
716
+ 日志显示转码错误
717
+
718
+ **排查步骤:**
271
719
 
272
720
  1. 检查 mb-rrvideo 是否正常:
273
721
  ```bash
274
722
  docker-compose exec rrvideo-server rrvideos --version
275
723
  ```
276
724
 
277
- 2. 查看转码日志:
725
+ 2. 检查 Playwright 浏览器:
726
+ ```bash
727
+ docker-compose exec rrvideo-server npx playwright install --dry-run chromium
728
+ ```
729
+
730
+ 3. 查看转码日志:
278
731
  ```bash
279
732
  tail -f logs/convert/$(date +%Y-%m-%d)/*.log
280
733
  ```
281
734
 
282
- ### 内存不足
735
+ 4. 检查内存:
736
+ ```bash
737
+ docker stats rrvideo-server
738
+ # 如果内存不足,增加 docker-compose.yml 中的内存限制
739
+ ```
740
+
741
+ ### 问题 3:镜像构建失败
742
+
743
+ **症状:**
744
+ ```bash
745
+ docker build -t mb-rrvideo-converter:latest .
746
+ # 报错或卡住
747
+ ```
748
+
749
+ **解决方案:**
750
+
751
+ 1. 检查网络连接:
752
+ ```bash
753
+ ping registry.npmmirror.com
754
+ ping mirrors.aliyun.com
755
+ ```
756
+
757
+ 2. 配置 Docker 代理(如果在国外服务器):
758
+ ```bash
759
+ sudo mkdir -p /etc/systemd/system/docker.service.d
760
+ sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<-'EOF'
761
+ [Service]
762
+ Environment="HTTP_PROXY=http://proxy.example.com:8080"
763
+ Environment="HTTPS_PROXY=http://proxy.example.com:8080"
764
+ Environment="NO_PROXY=localhost,127.0.0.1"
765
+ EOF
766
+
767
+ sudo systemctl daemon-reload
768
+ sudo systemctl restart docker
769
+ ```
770
+
771
+ 3. 清理构建缓存:
772
+ ```bash
773
+ docker builder prune -a
774
+ ```
775
+
776
+ 4. 重新构建:
777
+ ```bash
778
+ docker build --no-cache -t mb-rrvideo-converter:latest .
779
+ ```
283
780
 
284
- 增加容器内存限制:
781
+ ### 问题 4:容器内存不足
285
782
 
783
+ **症状:**
784
+ 转码时容器被 OOM Kill
785
+
786
+ **解决方案:**
787
+
788
+ 修改 `docker-compose.yml`:
286
789
  ```yaml
287
790
  deploy:
288
791
  resources:
289
792
  limits:
290
- memory: 8G
793
+ memory: 8G # 增加到 8GB
794
+ reservations:
795
+ memory: 4G
796
+ ```
797
+
798
+ 然后重启:
799
+ ```bash
800
+ docker-compose down
801
+ docker-compose up -d
802
+ ```
803
+
804
+ ### 问题 5:磁盘空间不足
805
+
806
+ **症状:**
807
+ ```bash
808
+ docker system df
809
+ # 显示磁盘使用率很高
810
+ ```
811
+
812
+ **解决方案:**
813
+
814
+ 1. 清理未使用的容器:
815
+ ```bash
816
+ docker container prune
817
+ ```
818
+
819
+ 2. 清理未使用的镜像:
820
+ ```bash
821
+ docker image prune -a
822
+ ```
823
+
824
+ 3. 清理构建缓存:
825
+ ```bash
826
+ docker builder prune -a
291
827
  ```
292
828
 
293
- ### 磁盘空间不足
829
+ 4. 清理数据卷:
830
+ ```bash
831
+ docker volume prune
832
+ ```
294
833
 
295
- 1. 启用自动删除:
834
+ 5. 启用自动删除转码后的文件:
296
835
  ```json
297
836
  {
298
837
  "convert": {
@@ -301,74 +840,205 @@ deploy:
301
840
  }
302
841
  ```
303
842
 
304
- 2. 定期清理临时文件:
843
+ ---
844
+
845
+ ## 镜像优化说明
846
+
847
+ ### 镜像包含的完整组件
848
+
849
+ Docker 镜像是**开箱即用**的,包含转码所需的所有组件:
850
+
851
+ 1. **Node.js 22**(运行环境)
852
+ 2. **PM2**(进程管理器,自动重启)
853
+ 3. **mb-rrvideo**(转码工具,全局安装)
854
+ - 命令:`rrvideos`
855
+ - 功能:将 rrweb 录屏数据转换为视频
856
+ - 自带 FFmpeg(无需额外安装)
857
+ 4. **mb-rrvideo-server**(转码服务,全局安装)
858
+ - 命令:`rrvideo-server`
859
+ - 功能:HTTP 服务,接收转码请求
860
+ 5. **Playwright Chromium**(浏览器)
861
+ - 功能:渲染 rrweb 录屏数据
862
+ - 大小:约 400MB
863
+ 6. **系统依赖**
864
+ - 字体库(支持中文)
865
+ - 图形库(Chromium 依赖)
866
+
867
+ **验证所有组件:**
305
868
  ```bash
306
- docker-compose exec rrvideo-server rm -rf /app/temp/*
869
+ docker-compose exec rrvideo-server bash
870
+
871
+ # 检查 Node.js
872
+ node --version
873
+
874
+ # 检查 PM2
875
+ pm2 --version
876
+
877
+ # 检查 mb-rrvideo(转码工具)
878
+ rrvideos --version
879
+
880
+ # 检查 mb-rrvideo-server(转码服务)
881
+ which rrvideo-server
882
+
883
+ # 检查 Playwright
884
+ npx playwright --version
885
+
886
+ # 检查 FFmpeg(mb-rrvideo 自带)
887
+ rrvideos --help | grep ffmpeg
307
888
  ```
308
889
 
309
- ## 生产环境建议
890
+ ### 为什么镜像这么大?
891
+
892
+ 镜像大小约 **1.5GB**,主要组成:
893
+ - **Node.js 22 基础镜像**:约 200MB
894
+ - **系统依赖**:约 100MB
895
+ - **Playwright Chromium**:约 400MB(转码必需)
896
+ - **npm 包**:约 50MB
897
+ - **其他**:约 750MB
310
898
 
311
- 1. **使用持久化存储**:将 Video 目录挂载到独立磁盘
312
- 2. **配置日志轮转**:避免日志文件过大
313
- 3. **监控资源使用**:使用 Prometheus + Grafana
314
- 4. **备份配置文件**:定期备份 config.json
315
- 5. **使用私有镜像仓库**:提高部署速度和安全性
899
+ ### Playwright Chromium 是什么?
316
900
 
317
- ## 更新服务
901
+ mb-rrvideo 使用 Playwright 来渲染 rrweb 录屏数据,需要一个真实的浏览器环境。Chromium 是必需的,无法移除。
318
902
 
319
- ### 更新到最新版本
903
+ ### 如何减小镜像大小?
320
904
 
905
+ **方法 1:使用镜像压缩**
321
906
  ```bash
322
- # 拉取最新镜像
323
- docker-compose pull
907
+ # 导出时压缩
908
+ docker save mb-rrvideo-converter:latest | gzip > mb-rrvideo-converter.tar.gz
324
909
 
325
- # 重启服务
326
- docker-compose up -d
910
+ # 压缩后约 600MB
911
+ ls -lh mb-rrvideo-converter.tar.gz
912
+
913
+ # 导入
914
+ gunzip -c mb-rrvideo-converter.tar.gz | docker load
915
+ ```
916
+
917
+ **方法 2:使用私有镜像仓库**
918
+
919
+ 搭建私有仓库后,只需传输一次镜像,后续所有服务器都可以快速拉取。
920
+
921
+ **方法 3:分层构建(高级)**
922
+
923
+ 如果你有多个类似项目,可以创建一个基础镜像包含 Node.js + Playwright,然后在此基础上构建应用镜像。
924
+
925
+ ### 构建时间优化
926
+
927
+ **首次构建**:10-20 分钟(取决于网络)
928
+ **后续构建**:2-5 分钟(利用缓存)
929
+
930
+ **加速技巧:**
931
+ 1. 使用国内镜像源(Dockerfile 已配置)
932
+ 2. 使用 Docker 镜像加速(见前置准备)
933
+ 3. 使用构建缓存:
934
+ ```bash
935
+ # 不要使用 --no-cache,让 Docker 利用缓存
936
+ docker build -t mb-rrvideo-converter:latest .
327
937
  ```
328
938
 
329
- ### 回滚到旧版本
939
+ ### 网络传输优化
330
940
 
941
+ **方法 1:使用压缩**
331
942
  ```bash
332
- # 修改 docker-compose.yml 中的镜像版本
333
- image: mb-rrvideo-server:1.0.1
943
+ # 导出并压缩
944
+ docker save mb-rrvideo-converter:latest | gzip > mb-rrvideo-converter.tar.gz
334
945
 
335
- # 重启服务
336
- docker-compose up -d
946
+ # 传输(约 600MB)
947
+ scp mb-rrvideo-converter.tar.gz user@target:/tmp/
948
+
949
+ # 解压并导入
950
+ gunzip -c mb-rrvideo-converter.tar.gz | docker load
337
951
  ```
338
952
 
339
- ## 多实例部署
953
+ **方法 2:使用 rsync 断点续传**
954
+ ```bash
955
+ # 支持断点续传,网络不稳定时很有用
956
+ rsync -avz --progress mb-rrvideo-converter.tar user@target:/tmp/
957
+ ```
340
958
 
341
- 如需部署多个实例(负载均衡):
959
+ **方法 3:使用内网镜像仓库**
342
960
 
343
- ```yaml
344
- version: '3.8'
961
+ 在内网搭建私有仓库,传输速度可达 100MB/s+。
345
962
 
346
- services:
347
- rrvideo-server-1:
348
- image: mb-rrvideo-server:latest
349
- container_name: rrvideo-server-1
350
- ports:
351
- - "24203:24203"
352
- volumes:
353
- - ./config.json:/app/config/config.json:ro
354
- - ./logs-1:/app/logs
355
- - ./temp-1:/app/temp
356
- - ./Video:/app/Video
357
-
358
- rrvideo-server-2:
359
- image: mb-rrvideo-server:latest
360
- container_name: rrvideo-server-2
361
- ports:
362
- - "24204:24203"
363
- volumes:
364
- - ./config.json:/app/config/config.json:ro
365
- - ./logs-2:/app/logs
366
- - ./temp-2:/app/temp
367
- - ./Video:/app/Video
963
+ ---
964
+
965
+ ## 生产环境建议
966
+
967
+ ### 1. 资源配置
968
+
969
+ **最低配置:**
970
+ - CPU: 2 核
971
+ - 内存: 4GB
972
+ - 磁盘: 50GB
973
+
974
+ **推荐配置:**
975
+ - CPU: 4 核
976
+ - 内存: 8GB
977
+ - 磁盘: 100GB SSD
978
+
979
+ ### 2. 目录规划
980
+
981
+ ```bash
982
+ /data/rrvideo/
983
+ ├── config.json # 配置文件
984
+ ├── docker-compose.yml # 容器配置
985
+ ├── logs/ # 日志(建议定期清理)
986
+ ├── temp/ # 临时文件(自动清理)
987
+ ├── Video/ # 视频输出(建议挂载独立磁盘)
988
+ └── tasks/ # 任务数据
989
+ ```
990
+
991
+ ### 3. 日志管理
992
+
993
+ ```bash
994
+ # 定期清理日志(添加到 crontab)
995
+ 0 2 * * * find /data/rrvideo/logs -name "*.log" -mtime +7 -delete
996
+ ```
997
+
998
+ ### 4. 监控告警
999
+
1000
+ 使用 Prometheus + Grafana 监控容器资源:
1001
+ ```bash
1002
+ # 安装 cAdvisor
1003
+ docker run -d \
1004
+ --name=cadvisor \
1005
+ --volume=/:/rootfs:ro \
1006
+ --volume=/var/run:/var/run:ro \
1007
+ --volume=/sys:/sys:ro \
1008
+ --volume=/var/lib/docker/:/var/lib/docker:ro \
1009
+ --publish=8080:8080 \
1010
+ google/cadvisor:latest
1011
+ ```
1012
+
1013
+ ### 5. 备份策略
1014
+
1015
+ ```bash
1016
+ # 备份配置文件
1017
+ cp config.json config.json.bak.$(date +%Y%m%d)
1018
+
1019
+ # 备份镜像
1020
+ docker save mb-rrvideo-converter:latest -o mb-rrvideo-server-backup.tar
368
1021
  ```
369
1022
 
370
- ## 技术支持
1023
+ ---
1024
+
1025
+ ## 更多资源
1026
+
1027
+ - **npm 包**: https://www.npmjs.com/package/mb-rrvideo-server
1028
+ - **使用文档**: README.md
1029
+ - **更新日志**: CHANGELOG.md
1030
+ - **问题反馈**: GitHub Issues
1031
+
1032
+ ---
1033
+
1034
+ ## 总结
1035
+
1036
+ 本文档涵盖了从零开始部署 mb-rrvideo-server 的所有内容:
1037
+
1038
+ 1. ✅ Docker 基础概念和安装
1039
+ 2. ✅ 三种部署方式(npm 包、源码、镜像迁移)
1040
+ 3. ✅ 镜像迁移的三种方法(文件传输、私有仓库、公有仓库)
1041
+ 4. ✅ 常用命令和故障排除
1042
+ 5. ✅ 镜像优化和生产环境建议
371
1043
 
372
- - GitHub Issues: <repository-url>
373
- - 文档: README.md
374
- - 更新日志: CHANGELOG.md
1044
+ 如有问题,请查看故障排除章节或提交 Issue。
package/Dockerfile CHANGED
@@ -13,7 +13,14 @@ ENV TZ=Asia/Shanghai \
13
13
  PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
14
14
 
15
15
  # ============================================
16
- # 第一步:安装系统依赖
16
+ # 第一步:配置国内镜像源(加速构建)
17
+ # ============================================
18
+ # 使用阿里云 Debian 镜像源
19
+ RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && \
20
+ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources
21
+
22
+ # ============================================
23
+ # 第二步:安装系统依赖
17
24
  # ============================================
18
25
  RUN apt-get update && apt-get install -y \
19
26
  # 基础工具
@@ -44,26 +51,47 @@ RUN apt-get update && apt-get install -y \
44
51
  && rm -rf /var/lib/apt/lists/*
45
52
 
46
53
  # ============================================
47
- # 第二步:配置 npm 国内镜像源(加速安装)
54
+ # 第三步:配置 npm 国内镜像源(加速安装)
48
55
  # ============================================
49
56
  RUN npm config set registry https://registry.npmmirror.com
50
57
 
51
58
  # ============================================
52
- # 第三步:全局安装 Node.js 包
59
+ # 第四步:全局安装 PM2
60
+ # ============================================
61
+ RUN npm install -g pm2 && npm cache clean --force
62
+
63
+ # ============================================
64
+ # 第五步:安装本地依赖包 (mb-rrvideo)
65
+ # 方案:直接使用源码在容器内编译安装
66
+ # 前置条件:构建前由 server-run.sh 脚本将 ../mb-rrvideo 复制到 ./_deps/mb-rrvideo
67
+ # ============================================
68
+ COPY _deps/mb-rrvideo /tmp/mb-rrvideo
69
+ RUN cd /tmp/mb-rrvideo && \
70
+ # 安装依赖(包含 devDependencies 以便执行 build)
71
+ npm install && \
72
+ # 编译 TypeScript
73
+ npm run build && \
74
+ # 全局安装
75
+ npm install -g . && \
76
+ # 清理源码和缓存
77
+ cd / && rm -rf /tmp/mb-rrvideo && npm cache clean --force
78
+
79
+ # ============================================
80
+ # 第六步:复制项目源码并安装
53
81
  # ============================================
54
- RUN npm install -g \
55
- pm2 \
56
- mb-rrvideo \
57
- mb-rrvideo-server \
58
- && npm cache clean --force
82
+ WORKDIR /app
83
+ COPY . /app
84
+
85
+ # 安装当前项目依赖并链接命令
86
+ RUN npm install -g . && npm cache clean --force
59
87
 
60
88
  # ============================================
61
- # 第四步:安装 Playwright 浏览器(Chromium)
89
+ # 第七步:安装 Playwright 浏览器(Chromium)
62
90
  # ============================================
63
91
  RUN npx playwright install chromium
64
92
 
65
93
  # ============================================
66
- # 第五步:创建应用目录
94
+ # 第八步:创建应用目录
67
95
  # ============================================
68
96
  RUN mkdir -p /app/config \
69
97
  && mkdir -p /app/logs \
@@ -72,27 +100,22 @@ RUN mkdir -p /app/config \
72
100
  && mkdir -p /app/tasks
73
101
 
74
102
  # ============================================
75
- # 第六步:复制 PM2 配置文件
103
+ # 第九步:复制 PM2 配置文件
76
104
  # ============================================
77
105
  COPY ecosystem.docker.config.js /app/ecosystem.config.js
78
106
 
79
107
  # ============================================
80
- # 第七步:设置工作目录
81
- # ============================================
82
- WORKDIR /app
83
-
84
- # ============================================
85
- # 第八步:暴露端口
108
+ # 第十步:暴露端口
86
109
  # ============================================
87
110
  EXPOSE 24203
88
111
 
89
112
  # ============================================
90
- # 第九步:健康检查
113
+ # 第十一步:健康检查
91
114
  # ============================================
92
115
  HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
93
116
  CMD curl -f http://localhost:24203/health || exit 1
94
117
 
95
118
  # ============================================
96
- # 第十步:启动服务
119
+ # 第十二步:启动服务
97
120
  # ============================================
98
121
  CMD ["pm2-runtime", "start", "ecosystem.config.js"]
package/README.md CHANGED
@@ -31,19 +31,33 @@ npm install
31
31
  ```
32
32
 
33
33
  ### 4. Docker 部署(推荐生产环境)
34
+
35
+ Docker 镜像**开箱即用**,包含所有依赖(Node.js + mb-rrvideo + mb-rrvideo-server + Playwright)。
36
+
34
37
  ```bash
38
+ # 下载 npm 包
39
+ npm pack mb-rrvideo-server
40
+ tar -xzf mb-rrvideo-server-*.tgz
41
+ cd package
42
+
35
43
  # 准备配置文件
36
44
  cp config.example.json config.json
37
45
  # 编辑 config.json
38
46
 
47
+ # 构建镜像(镜像名:mb-rrvideo-converter)
48
+ docker build -t mb-rrvideo-converter:latest .
49
+
39
50
  # 启动服务
40
51
  docker-compose up -d
41
52
 
53
+ # 验证 mb-rrvideo 是否正常
54
+ docker-compose exec rrvideo-server rrvideos --version
55
+
42
56
  # 查看日志
43
57
  docker-compose logs -f
44
58
  ```
45
59
 
46
- 详细的 Docker 部署指南请查看 [DOCKER.md](DOCKER.md)
60
+ 详细的 Docker 部署指南(包括镜像迁移、故障排除等)请查看 [DOCKER.md](https://www.npmjs.com/package/mb-rrvideo-server?activeTab=code)
47
61
 
48
62
  ## 配置
49
63
 
@@ -3,7 +3,7 @@ version: '3.8'
3
3
  services:
4
4
  rrvideo-server:
5
5
  build: .
6
- image: mb-rrvideo-server:latest
6
+ image: mb-rrvideo-converter:latest
7
7
  container_name: rrvideo-server
8
8
  restart: unless-stopped
9
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mb-rrvideo-server",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "视频转码服务 - 接收可回溯机请求,执行转码/合并,上传MinIO/本地存储",
5
5
  "main": "src/index.js",
6
6
  "bin": {