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 +849 -179
- package/Dockerfile +42 -19
- package/README.md +15 -1
- package/docker-compose.yml +1 -1
- package/package.json +1 -1
package/DOCKER.md
CHANGED
|
@@ -1,20 +1,211 @@
|
|
|
1
|
-
# Docker
|
|
1
|
+
# Docker 部署完整指南
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本文档面向 Docker 新手,提供从零开始的完整部署指南。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 重要说明
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**项目命名:**
|
|
8
|
+
- **npm 包名**:`mb-rrvideo-server`(转码服务的 npm 包)
|
|
9
|
+
- **Docker 镜像名**:`mb-rrvideo-converter`(完整的转码系统镜像)
|
|
10
|
+
- **容器名**:`rrvideo-server`(运行中的容器)
|
|
8
11
|
|
|
9
|
-
|
|
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
|
-
|
|
13
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
239
|
+
### 步骤 3:构建镜像
|
|
49
240
|
|
|
50
241
|
```bash
|
|
51
|
-
|
|
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
|
-
|
|
255
|
+
### 步骤 4:启动服务
|
|
55
256
|
|
|
56
|
-
```
|
|
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-
|
|
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
|
-
###
|
|
471
|
+
### 方法 B:使用私有镜像仓库(适合多服务器部署)
|
|
81
472
|
|
|
82
|
-
|
|
83
|
-
# 使用预构建镜像
|
|
84
|
-
docker-compose up -d
|
|
473
|
+
#### 步骤 1:搭建私有仓库(在一台服务器上)
|
|
85
474
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
docker
|
|
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
|
-
|
|
488
|
+
#### 步骤 2:推送镜像到私有仓库
|
|
92
489
|
|
|
93
490
|
```bash
|
|
94
|
-
#
|
|
95
|
-
docker-compose logs -f
|
|
491
|
+
# 在源服务器上
|
|
96
492
|
|
|
97
|
-
#
|
|
98
|
-
|
|
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
|
-
|
|
509
|
+
#### 步骤 3:在目标服务器拉取镜像
|
|
102
510
|
|
|
103
511
|
```bash
|
|
104
|
-
|
|
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
|
-
|
|
521
|
+
sudo systemctl restart docker
|
|
110
522
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
###
|
|
532
|
+
### 方法 C:使用公有镜像仓库(Docker Hub / 阿里云)
|
|
533
|
+
|
|
534
|
+
#### 使用 Docker Hub:
|
|
117
535
|
|
|
118
536
|
```bash
|
|
119
|
-
|
|
120
|
-
|
|
537
|
+
# 在源服务器上
|
|
538
|
+
|
|
539
|
+
# 1. 登录 Docker Hub
|
|
540
|
+
docker login
|
|
121
541
|
|
|
122
|
-
|
|
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
|
-
|
|
550
|
+
# 在目标服务器上
|
|
551
|
+
|
|
552
|
+
# 1. 拉取镜像
|
|
553
|
+
docker pull your-username/mb-rrvideo-converter:latest
|
|
127
554
|
|
|
128
|
-
#
|
|
129
|
-
docker
|
|
555
|
+
# 2. 重新标记
|
|
556
|
+
docker tag your-username/mb-rrvideo-converter:latest mb-rrvideo-converter:latest
|
|
557
|
+
|
|
558
|
+
# 3. 部署
|
|
130
559
|
```
|
|
131
560
|
|
|
132
|
-
|
|
561
|
+
#### 使用阿里云容器镜像服务:
|
|
133
562
|
|
|
134
563
|
```bash
|
|
135
|
-
|
|
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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
656
|
+
# 查看镜像详细信息
|
|
657
|
+
docker inspect mb-rrvideo-converter:latest
|
|
209
658
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
- "8080:24203" # 宿主机8080 -> 容器24203
|
|
659
|
+
# 查看镜像构建历史
|
|
660
|
+
docker history mb-rrvideo-converter:latest
|
|
213
661
|
```
|
|
214
662
|
|
|
215
|
-
###
|
|
663
|
+
### 资源监控
|
|
216
664
|
|
|
217
|
-
|
|
665
|
+
```bash
|
|
666
|
+
# 查看容器资源使用
|
|
667
|
+
docker stats rrvideo-server
|
|
218
668
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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
|
-
|
|
676
|
+
---
|
|
231
677
|
|
|
232
|
-
|
|
678
|
+
## 故障排除
|
|
233
679
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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
|
-
|
|
695
|
+
2. 检查配置文件:
|
|
256
696
|
```bash
|
|
257
|
-
|
|
697
|
+
cat config.json
|
|
698
|
+
# 确保 JSON 格式正确
|
|
258
699
|
```
|
|
259
700
|
|
|
260
|
-
|
|
701
|
+
3. 检查端口占用:
|
|
261
702
|
```bash
|
|
262
|
-
|
|
703
|
+
netstat -tlnp | grep 24203
|
|
704
|
+
# 如果端口被占用,修改 docker-compose.yml 中的端口映射
|
|
263
705
|
```
|
|
264
706
|
|
|
265
|
-
|
|
707
|
+
4. 检查目录权限:
|
|
266
708
|
```bash
|
|
267
|
-
|
|
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
|
-
|
|
834
|
+
5. 启用自动删除转码后的文件:
|
|
296
835
|
```json
|
|
297
836
|
{
|
|
298
837
|
"convert": {
|
|
@@ -301,74 +840,205 @@ deploy:
|
|
|
301
840
|
}
|
|
302
841
|
```
|
|
303
842
|
|
|
304
|
-
|
|
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
|
|
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
|
-
|
|
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-
|
|
907
|
+
# 导出时压缩
|
|
908
|
+
docker save mb-rrvideo-converter:latest | gzip > mb-rrvideo-converter.tar.gz
|
|
324
909
|
|
|
325
|
-
#
|
|
326
|
-
|
|
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
|
-
#
|
|
333
|
-
|
|
943
|
+
# 导出并压缩
|
|
944
|
+
docker save mb-rrvideo-converter:latest | gzip > mb-rrvideo-converter.tar.gz
|
|
334
945
|
|
|
335
|
-
#
|
|
336
|
-
|
|
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
|
-
|
|
344
|
-
version: '3.8'
|
|
961
|
+
在内网搭建私有仓库,传输速度可达 100MB/s+。
|
|
345
962
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
54
|
+
# 第三步:配置 npm 国内镜像源(加速安装)
|
|
48
55
|
# ============================================
|
|
49
56
|
RUN npm config set registry https://registry.npmmirror.com
|
|
50
57
|
|
|
51
58
|
# ============================================
|
|
52
|
-
#
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
82
|
+
WORKDIR /app
|
|
83
|
+
COPY . /app
|
|
84
|
+
|
|
85
|
+
# 安装当前项目依赖并链接命令
|
|
86
|
+
RUN npm install -g . && npm cache clean --force
|
|
59
87
|
|
|
60
88
|
# ============================================
|
|
61
|
-
#
|
|
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
|
-
#
|
|
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
|
|
60
|
+
详细的 Docker 部署指南(包括镜像迁移、故障排除等)请查看 [DOCKER.md](https://www.npmjs.com/package/mb-rrvideo-server?activeTab=code)
|
|
47
61
|
|
|
48
62
|
## 配置
|
|
49
63
|
|
package/docker-compose.yml
CHANGED