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

保姆级教程:用Docker Compose一键部署WVP-PRO + ZLMediaKit + 录像服务(附完整配置文件)

基于Docker Compose的WVP-PRO+ZLMediaKit全栈部署实战指南

在视频监控与流媒体服务领域,GB28181标准已成为国内安防行业的主流协议。本文将分享如何通过Docker Compose快速搭建包含WVP-PRO、ZLMediaKit、Redis、MySQL及录像辅助服务的完整解决方案。相比传统手动部署方式,容器化方案具有以下优势:

  • 环境一致性:消除"在我机器上能跑"的经典问题
  • 快速部署:从零到可运行环境仅需5分钟
  • 资源隔离:各服务独立运行,避免端口冲突
  • 易于维护:通过声明式配置管理整个服务栈

1. 环境准备与架构设计

1.1 系统需求建议

推荐使用以下配置的Linux服务器(Ubuntu 20.04+/CentOS 7+):

资源类型开发环境生产环境
CPU4核8核+
内存8GB16GB+
存储50GB1TB+
网络100Mbps1Gbps+

关键依赖

# 安装Docker和Compose sudo apt-get update && sudo apt-get install -y docker.io docker-compose-plugin sudo systemctl enable --now docker

1.2 服务架构解析

整套系统包含五个核心组件:

  1. WVP-PRO:GB28181信令服务器,负责设备管理
  2. ZLMediaKit:流媒体处理引擎,实现流转发/录制
  3. MySQL:存储设备元数据和系统配置
  4. Redis:缓存实时流信息和会话状态
  5. WVP-PRO-ASSIST:录像文件管理与转码服务

提示:所有服务将通过自定义桥接网络互联,确保安全隔离同时允许服务间通信

2. Docker Compose配置详解

2.1 基础服务定义

创建docker-compose.yml文件:

version: '3.8' services: mysql: image: mysql:5.7 container_name: wvp-mysql environment: MYSQL_ROOT_PASSWORD: wvp123456 MYSQL_DATABASE: wvp volumes: - mysql_data:/var/lib/mysql networks: - wvp-net redis: image: redis:6-alpine container_name: wvp-redis command: redis-server --requirepass wvp123456 volumes: - redis_data:/data networks: - wvp-net

2.2 ZLMediaKit专项配置

zlm: image: zlmediakit/zlmediakit:master container_name: wvp-zlm ports: - "1935:1935" # RTMP - "80:80" # HTTP - "443:443" # HTTPS - "554:554" # RTSP - "10000:10000/tcp" # RTP over TCP - "30000-35000:30000-35000/udp" # RTP端口范围 volumes: - ./zlm/record:/opt/media/bin/www/record environment: - TZ=Asia/Shanghai networks: - wvp-net

关键参数说明:

  • ports:暴露各类流媒体协议端口
  • volumes:录像文件存储目录映射
  • environment:设置容器时区

2.3 WVP-PRO核心服务

wvp: image: 648540858/wvp-pro:latest container_name: wvp-pro depends_on: - mysql - redis - zlm ports: - "18080:18080" # 管理界面 - "5060:5060" # SIP信令 volumes: - ./wvp/config:/config environment: - TZ=Asia/Shanghai - JAVA_OPTS=-Xmx2g -Xms1g networks: - wvp-net

注意:WVP-PRO首次启动会自动初始化数据库,请确保MySQL服务先就绪

3. 录像服务集成方案

3.1 WVP-PRO-ASSIST配置

docker-compose.yml中追加:

assist: image: panjjo/wvp-pro-assist container_name: wvp-assist depends_on: - redis - zlm ports: - "18081:18081" volumes: - ./zlm/record:/record - /usr/bin/ffmpeg:/usr/bin/ffmpeg - /usr/bin/ffprobe:/usr/bin/ffprobe environment: - TZ=Asia/Shanghai networks: - wvp-net volumes: mysql_data: redis_data: networks: wvp-net: driver: bridge

3.2 录像服务常见问题处理

问题1:录像文件无法生成MP4

  • 解决方案:确保正确挂载ffmpeg二进制文件
  • 验证命令:
docker exec wvp-assist ffmpeg -version

问题2:录像文件不完整

  • 调整ZLMediaKit配置:
[record] fileBufSize=10485760 fileRepeat=0

4. 系统调优与运维实践

4.1 性能优化参数

wvp服务中添加环境变量:

environment: - SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE=20 - SPRING_REDIS_TIMEOUT=5000 - MEDIA_RTP_PORT-RANGE=30000,35000

4.2 监控与日志收集

推荐日志收集方案:

  1. 统一日志目录:
volumes: - ./logs:/logs
  1. 各服务日志配置:
# 查看实时日志 docker-compose logs -f wvp zlm

4.3 备份与恢复策略

数据库备份示例:

# 备份 docker exec wvp-mysql mysqldump -uroot -pwvp123456 wvp > wvp-backup.sql # 恢复 docker exec -i wvp-mysql mysql -uroot -pwvp123456 wvp < wvp-backup.sql

录像文件备份建议:

  • 使用rsync定期同步录像目录
  • 设置recordDay参数自动清理过期文件

5. 安全加固措施

5.1 网络隔离配置

networks: wvp-net: driver: bridge enable_ipv6: false internal: false # 设为true可禁止外部访问

5.2 敏感信息管理

推荐使用Docker Secret:

echo "wvp123456" | docker secret create mysql_root_password -

然后在compose文件中引用:

environment: - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_root_password secrets: - mysql_root_password

5.3 定期更新策略

设置watchtower自动更新:

docker run -d --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ --interval 3600
http://www.jsqmd.com/news/920322/

相关文章:

  • 抖音Scheme跳转避坑指南:从抓包到脚本调用的完整链路解析
  • STM32G473 IAP实战:用CAN和USART两种方式给你的固件‘空中加油’(附完整源码)
  • 手把手教你用Flask搭个视频中转站:爬取m3u8流,本地/Cloudflare R2双备份实战
  • 不止于上报:用移远EC800M+QuecPython玩转MQTT双向通信(订阅/发布详解)
  • 别再死记硬背了!用Pikachu靶场实战,手把手教你理解XSS攻击的5种触发方式
  • 从零搭建一个AIoT小项目:用IMX6ULL和WS2812B灯带玩转智能环境感知
  • 2026实验室装修技术指南:大型写字楼装修、实验室装修、无尘车间装修、净化厂房装修、办公室装修、办公室设计、办公楼装修选择指南 - 优质品牌商家
  • ZYNQ7100实战:用AXI DMA把PL端ADC数据高速灌进PS DDR(Vivado 2017.4配置详解)
  • MySQL 5.7.44 安装后必做的5件事:从修改root密码到避免常见连接错误
  • 别再只会用默认参数了!MATLAB medfilt2滤波核大小[m n]和padopt参数实战避坑指南
  • QMCDecode终极指南:如何快速将QQ音乐加密格式转换为通用音频文件
  • 华为S5720/S6720交换机配置备份与恢复实操:FTP、TFTP、SFTP到底怎么选?
  • 从一次充电故障说起:我是如何通过分析USB PD消息头(Message Header)定位和解决握手问题的
  • Lindy安全响应自动化能力评估模型(Gartner未公开的7维成熟度框架)
  • 告别卡顿!实测最有效的CLion虚拟机参数调优与内存分配方案(Ubuntu环境)
  • 别再只盯着功放了!拆解TDA7294芯片,看它如何在400Hz精密电源里扮演‘稳压放大’核心角色
  • 2026年4月养老院软件系统诚信之选:智能化养老设备/最近养老院/养老管理系统/养老院平台运营/养老院护理系统/选择指南 - 优质品牌商家
  • RTMDet数据增强的‘缓存’黑科技:如何用CachedMosaic和MixUp让你的目标检测训练快起来
  • 别再手动写RAM了!Vivado里这个Distributed Memory Generator IP核,5分钟搞定ROM/RAM配置
  • 多智能体协作框架对比:LangGraph、AutoGen、CrewAI 的取舍维度
  • 告别手动抠图!用Labelme的AI-Polygon功能快速分割图像(Python 3.8 + Windows保姆级教程)
  • 保姆级教程:在Windows 10/11上手动配置MySQL 5.7.44的my.ini和环境变量
  • 手把手教你用Docker Compose一键部署WVP-PRO+ZLM+录像服务(含Nginx反代)
  • ThinkPad X1 Carbon相机罢工?别急着重装驱动,先试试这个‘暂停更新’大法(附0x80070103错误解决)
  • 从石英振荡到TDA7294功放:深入拆解一个400Hz中频电源的每个模块(含稳压电路设计)
  • 深入Xilinx AXI UART 16550 IP核:从16550历史到FIFO中断机制的底层逻辑全解析
  • 别再只盯着原理图了!400Hz电源设计中TDA7294功放芯片的实战选型与散热避坑指南
  • 【AI Daily】AI日报 | 2026-05-30
  • 【Lindy函数计算自动化白皮书】:基于17个行业真实案例,验证MTBF提升3.8倍的关键公式
  • 别再用MNIST了!用路透社数据集实战多分类,解决新闻主题自动归类问题