基于Docker Compose的WVP-PROZLMediaKit全栈部署实战指南在视频监控与流媒体服务领域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 docker1.2 服务架构解析整套系统包含五个核心组件WVP-PROGB28181信令服务器负责设备管理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: - TZAsia/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: - TZAsia/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: - TZAsia/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] fileBufSize10485760 fileRepeat04. 系统调优与运维实践4.1 性能优化参数在wvp服务中添加环境变量environment: - SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE20 - SPRING_REDIS_TIMEOUT5000 - MEDIA_RTP_PORT-RANGE30000,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 Secretecho 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