保姆级教程:用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+):
| 资源类型 | 开发环境 | 生产环境 |
|---|---|---|
| CPU | 4核 | 8核+ |
| 内存 | 8GB | 16GB+ |
| 存储 | 50GB | 1TB+ |
| 网络 | 100Mbps | 1Gbps+ |
关键依赖:
# 安装Docker和Compose sudo apt-get update && sudo apt-get install -y docker.io docker-compose-plugin sudo systemctl enable --now docker1.2 服务架构解析
整套系统包含五个核心组件:
- WVP-PRO:GB28181信令服务器,负责设备管理
- ZLMediaKit:流媒体处理引擎,实现流转发/录制
- MySQL:存储设备元数据和系统配置
- Redis:缓存实时流信息和会话状态
- 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-net2.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: bridge3.2 录像服务常见问题处理
问题1:录像文件无法生成MP4
- 解决方案:确保正确挂载ffmpeg二进制文件
- 验证命令:
docker exec wvp-assist ffmpeg -version问题2:录像文件不完整
- 调整ZLMediaKit配置:
[record] fileBufSize=10485760 fileRepeat=04. 系统调优与运维实践
4.1 性能优化参数
在wvp服务中添加环境变量:
environment: - SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE=20 - SPRING_REDIS_TIMEOUT=5000 - MEDIA_RTP_PORT-RANGE=30000,350004.2 监控与日志收集
推荐日志收集方案:
- 统一日志目录:
volumes: - ./logs:/logs- 各服务日志配置:
# 查看实时日志 docker-compose logs -f wvp zlm4.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_password5.3 定期更新策略
设置watchtower自动更新:
docker run -d --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower \ --cleanup \ --interval 3600