手把手教你用Docker Compose一键部署WVP-PRO+ZLM+录像服务(含Nginx反代)
基于Docker Compose的GB28181视频平台全栈部署指南
在视频监控与物联网应用快速发展的今天,GB28181标准作为国内安防领域的通用协议,其重要性日益凸显。本文将带您从零开始,通过Docker Compose编排技术,构建一个包含WVP-PRO、ZLMEDIAKIT、录像服务、MySQL和Redis的完整视频平台解决方案。这种容器化部署方式不仅简化了传统手动安装的复杂流程,更为团队协作和后期维护提供了标准化基础。
1. 环境准备与架构设计
1.1 系统需求分析
在开始部署前,我们需要明确平台的技术选型和硬件要求。整套系统建议运行在Linux服务器上(推荐Ubuntu 20.04 LTS或CentOS 7+),配置至少4核CPU、8GB内存和100GB存储空间。网络方面需要开放以下端口:
- HTTP/HTTPS :80/443(Nginx反代)
- SIP信令 :5060(GB28181标准端口)
- 媒体流 :30000-35000(RTP传输范围)
- 管理端口 :18080(WVP-PRO)、18081(录像服务)
1.2 Docker环境配置
确保主机已安装Docker引擎(≥20.10.7)和Docker Compose(≥1.29.2)。执行以下命令进行验证:
# 检查Docker版本
docker --version
# 检查Compose版本
docker-compose --version
若未安装,可通过官方脚本快速部署:
# Docker安装
curl -fsSL https://get.docker.com | sh
# Compose安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2. Docker Compose编排实现
2.1 服务架构设计
我们采用微服务架构,各组件职责如下:
| 服务名称 | 功能描述 | 依赖关系 |
|---|---|---|
| wvp-pro | GB28181信令与设备管理 | MySQL, Redis, ZLM |
| zlmediakit | 流媒体处理与转发 | 无 |
| wvp-assist | 录像管理与文件处理 | Redis, ZLM |
| mysql | 数据存储 | 无 |
| redis | 缓存与消息队列 | 无 |
| nginx | 反向代理与SSL卸载 | 所有Web服务 |
2.2 Compose文件详解
创建
docker-compose.yml
文件,内容如下:
version: '3.8'
services:
mysql:
image: mysql:5.7
container_name: gb28181-mysql
environment:
MYSQL_ROOT_PASSWORD: StrongPassword123
MYSQL_DATABASE: wvp
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
redis:
image: redis:6-alpine
container_name: gb28181-redis
command: redis-server --requirepass RedisPass123
volumes:
- redis_data:/data
restart: unless-stopped
zlm:
image: zlmediakit/zlmediakit:master
container_name: gb28181-zlm
ports:
- "1935:1935" # RTMP
- "80:80" # HTTP
- "443:443" # HTTPS
- "554:554" # RTSP
- "30000-35000:30000-35000/udp" # RTP
volumes:
- ./zlm/config.ini:/opt/media/config/config.ini
- ./record:/opt/media/bin/www/record
restart: unless-stopped
wvp-pro:
image: 648540858/wvp-pro
container_name: gb28181-wvp
ports:
- "18080:18080"
- "5060:5060/udp"
volumes:
- ./wvp/application.yml:/config/application.yml
depends_on:
- mysql
- redis
- zlm
restart: unless-stopped
wvp-assist:
image: panjjo/wvp-assist
container_name: gb28181-assist
ports:
- "18081:18081"
volumes:
- ./assist/application.yml:/config/application.yml
- ./record:/record
depends_on:
- redis
- zlm
restart: unless-stopped
nginx:
image: nginx:alpine
container_name: gb28181-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/ssl:/etc/nginx/ssl
depends_on:
- wvp-pro
- wvp-assist
restart: unless-stopped
volumes:
mysql_data:
redis_data:
3. 关键服务配置解析
3.1 WVP-PRO核心配置
在
./wvp/application.yml
中配置WVP-PRO的核心参数:
spring:
datasource:
url: jdbc:mysql://mysql:3306/wvp?useSSL=false&characterEncoding=UTF8
username: root
password: StrongPassword123
redis:
host: redis
password: RedisPass123
sip:
ip: 0.0.0.0
port: 5060
domain: 4101050000
id: 41010500002000000001
media:
id: ZLM001
ip: zlm
http-port: 80
secret: LluEd5evhoTswSZ1qDnafNEFTCFnnWCe
rtp:
enable: true
port-range: 30000,35000
3.2 ZLMediaKit优化配置
./zlm/config.ini
需要特别关注以下参数:
[api]
secret=LluEd5evhoTswSZ1qDnafNEFTCFnnWCe
[hook]
enable=1
on_play=http://wvp-pro:18080/index/hook/on_play
on_publish=http://wvp-pro:18080/index/hook/on_publish
[rtp_proxy]
port_range=30000-35000
3.3 录像服务整合
录像服务的
./assist/application.yml
配置示例:
record:
path: /record
day: 7
ffmpeg:
path: /usr/bin/ffmpeg
threads: 2
4. Nginx反向代理与安全加固
4.1 SSL证书配置
在
./nginx/ssl/
目录下放置您的证书文件(如
gb28181.crt
和
gb28181.key
),然后创建Nginx配置:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/nginx/ssl/gb28181.crt;
ssl_certificate_key /etc/nginx/ssl/gb28181.key;
location / {
proxy_pass http://wvp-pro:18080;
proxy_set_header Host $host;
}
location /assist/ {
proxy_pass http://wvp-assist:18081/;
}
}
4.2 性能优化建议
在Nginx配置中添加以下参数提升媒体流传输效率:
# 在http块中添加
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
5. 平台部署与验证
5.1 一键启动命令
完成所有配置后,执行以下命令启动整个平台:
docker-compose up -d
系统启动后,可以通过以下方式验证各服务状态:
# 检查容器运行状态
docker-compose ps
# 查看WVP-PRO日志
docker logs -f gb28181-wvp
# 测试MySQL连接
docker exec -it gb28181-mysql mysql -uroot -pStrongPassword123
5.2 常见问题排查
遇到服务异常时,可参考以下排查步骤:
-
ZLM与WVP连接失败 :
-
检查
media.secret是否一致 -
验证网络连通性:
docker exec gb28181-wvp ping zlm
-
检查
-
录像文件无法生成 :
-
确认挂载目录权限:
chmod -R 777 ./record - 检查FFmpeg路径是否正确
-
确认挂载目录权限:
-
国标设备无法注册 :
- 验证SIP端口(5060)是否开放
-
检查
domain和id是否符合规范
6. 生产环境优化建议
6.1 高可用部署方案
对于关键业务场景,建议采用以下高可用架构:
+-------------+
| Nginx LB |
+------+------+
|
+--------------+--------------+
| |
+----------+----------+ +----------+----------+
| Docker Host (Node1) | | Docker Host (Node2) |
| - WVP-PRO | | - WVP-PRO |
| - ZLM | | - ZLM |
+---------------------+ +---------------------+
6.2 监控与告警配置
推荐使用Prometheus+Grafana监控平台运行状态,关键指标包括:
- 流媒体服务 :并发流���、CPU使用率、内存占用
- 数据库 :查询延迟、连接数
- 网络 :带宽使用、丢包率
示例Prometheus配置:
scrape_configs:
- job_name: 'wvp'
static_configs:
- targets: ['wvp-pro:18080']
- job_name: 'zlm'
static_configs:
- targets: ['zlm:80']
7. 进阶功能扩展
7.1 级联部署实现
在跨区域场景下,可通过GB28181级联功能实现平台互联。在WVP-PRO配置中添加:
sip:
upstream:
- id: 41010500002000000002
domain: 4101050000
ip: 192.168.1.100
port: 5060
password: 123456
7.2 智能分析集成
通过RTSP流接入AI分析服务,实现人脸识别、行为分析等功能。典型工作流:
- WVP-PRO获取设备视频流
- ZLM将流转发给AI分析服务
- 分析结果回传至业务系统
graph LR
A[IPC] -->|GB28181| B(WVP-PRO)
B -->|RTSP| C(ZLM)
C -->|RTMP| D[AI Server]
D --> E[Result Storage]
注意:实际部署时应根据具体AI服务调整协议和接口
8. 运维管理实践
8.1 日志收集方案
建议采用ELK栈集中管理日志:
- 配置Filebeat收集容器日志
- 通过Logstash进行日志处理
- 在Kibana中可视化分析
示例Filebeat配置:
filebeat.inputs:
- type: container
paths:
- '/var/lib/docker/containers/*/*.log'
output.logstash:
hosts: ["logstash:5044"]
8.2 备份恢复策略
关键数据备份应包括:
- MySQL数据 :定期mysqldump备份
- 录像文件 :rsync同步到备份服务器
- 配置文件 :版本控制(Git)
创建每日备份脚本:
#!/bin/bash
# MySQL备份
docker exec gb28181-mysql mysqldump -uroot -pStrongPassword123 wvp > /backup/wvp-$(date +%Y%m%d).sql
# 配置文件备份
tar czf /backup/config-$(date +%Y%m%d).tar.gz ./wvp ./zlm ./assist
# 清理7天前备份
find /backup -type f -mtime +7 -delete
更多推荐


所有评论(0)