当前位置: 首页 > news >正文

手把手教你用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-proGB28181信令与设备管理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.crtgb28181.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 常见问题排查

遇到服务异常时,可参考以下排查步骤:

  1. ZLM与WVP连接失败

    • 检查media.secret是否一致
    • 验证网络连通性:docker exec gb28181-wvp ping zlm
  2. 录像文件无法生成

    • 确认挂载目录权限:chmod -R 777 ./record
    • 检查FFmpeg路径是否正确
  3. 国标设备无法注册

    • 验证SIP端口(5060)是否开放
    • 检查domainid是否符合规范

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分析服务,实现人脸识别、行为分析等功能。典型工作流:

  1. WVP-PRO获取设备视频流
  2. ZLM将流转发给AI分析服务
  3. 分析结果回传至业务系统
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栈集中管理日志:

  1. 配置Filebeat收集容器日志
  2. 通过Logstash进行日志处理
  3. 在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
http://www.rkmt.cn/news/1431622.html

相关文章:

  • ThinkPad X1 Carbon相机罢工?别急着重装驱动,先试试这个‘暂停更新’大法(附0x80070103错误解决)
  • 告别手动点点点!用Auto.js脚本一键直达抖音直播间和用户主页(附完整Scheme清单)
  • 【AI Daily】AI日报 | 2026-05-30
  • 【Lindy函数计算自动化白皮书】:基于17个行业真实案例,验证MTBF提升3.8倍的关键公式
  • 别再用MNIST了!用路透社数据集实战多分类,解决新闻主题自动归类问题
  • CTF新手必看:用PHP弱类型绕过HUBUCTF新生赛checkin题(附详细payload)
  • 王铎这行书,90%的人只看了热闹,没看懂这个保命动作
  • 保姆级教程:用VASP和VESTA搞定CO吸附Pt(111)的差分电荷密度图
  • 图像处理入门:5分钟看懂MATLAB中值滤波(medfilt2)与卷积滤波的区别,附代码对比
  • 2026年环境污染犯罪资深辩护律师哪家好?京顺律师事务所值得信赖 - myqiye
  • Win10/Win11系统下,EndNote20中文版保姆级安装与汉化配置全流程(附资源)
  • Ubuntu20.04下LVI-SAM复现避坑全记录:从环境配置到成功跑通数据集
  • 群晖NAS硬盘用了3年不敢换?手把手教你用硬盘阵列盒低成本扩容(附RAID1配置)
  • 15-5PH钢材性价比高的有哪些? - mypinpai
  • MBIST参数错误处理:max_read_cycles_per_op问题解析
  • 避坑指南:SPSS做多元对应分析时,权重设置和‘最优刻度’千万别选错
  • Miniconda3 vs Anaconda vs 原生pip:我为什么最终选择了轻量级的它?
  • 2026年紫外光固化修复品牌哪家好 - mypinpai
  • RTMDet的CachedMosaic到底快了多少?实测数据增强缓存机制对训练速度的影响
  • 2026年河南pe给水管品牌推荐,惠洁管业实力上榜 - mypinpai
  • Keil C51中SFR重复定义问题与源浏览器高效导航
  • 告别玄学调试:用Wireshark抓包实战分析USB3.0 LTSSM链路训练全过程
  • 别再为许可证发愁!手把手教你用LMS_RLM_Server本地部署AMESim 2021许可服务
  • 身份证校验码背后的设计逻辑:从权重数组到模11除余,一个有趣的编码故事
  • 兴珹传动品牌靠谱吗? - mypinpai
  • UE5.3 + Rider 编译GAS插件避坑实录:从DirectX报错到模块配置,一次搞定
  • PDM、DAM、AM... 广播工程师如何根据覆盖需求选择中波发射机调制方案?
  • 2026年浙江宠物医疗院校择校:浙江技校/浙江护理学校/浙江电商学校/浙江电子商务学校/浙江美容保健学校/浙江美容学校/选择指南 - 优质品牌商家
  • 2026年至今,四川咖啡店加盟如何破局?深度剖析A咖啡的靠谱选择逻辑 - 2026年企业资讯
  • 【卫健委AI应用白皮书核心解码】:2024新规下,未完成这3类AI工具合规改造的医院将暂停等保三级评审