
容器化GB28181视频平台Docker Compose全栈部署指南在视频监控与流媒体领域GB28181标准已经成为国内安防行业的通用协议。但对于开发者而言搭建一个完整的测试环境往往需要面对WVP-PRO、ZLMediaKit、Redis、MySQL等多个组件的复杂配置。本文将彻底改变这一现状通过Docker Compose实现一键式容器化部署涵盖从信令管理、媒体流转发到录像服务的完整解决方案。1. 环境规划与准备工作在开始部署之前合理的环境规划能够避免后续的网络冲突和资源争用。我们建议采用以下架构设计网络拓扑创建独立的Docker网络gb28181_net使用172.28.0.0/24网段存储规划MySQL数据卷gb28181_mysql_dataRedis数据卷gb28181_redis_data录像文件存储gb28181_record_volume端口映射WVP-PRO管理界面18080/tcpZLM HTTP API88/tcpZLM RTMP1935/tcpZLM RTSP554/tcp硬件配置建议最低配置2核CPU/4GB内存/50GB存储 推荐配置4核CPU/8GB内存/100GB SSD存储2. Docker Compose全栈配置创建docker-compose.yml文件这是整个部署的核心。我们将采用多服务编排的方式确保各组件之间的依赖关系正确建立。version: 3.8 services: mysql: image: mysql:8.0 container_name: gb28181_mysql environment: MYSQL_ROOT_PASSWORD: securepassword MYSQL_DATABASE: wvp volumes: - gb28181_mysql_data:/var/lib/mysql networks: - gb28181_net healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 5s timeout: 10s retries: 3 redis: image: redis:6.2 container_name: gb28181_redis command: redis-server --requirepass redispwd volumes: - gb28181_redis_data:/data networks: - gb28181_net healthcheck: test: [CMD, redis-cli, ping] interval: 5s timeout: 10s retries: 3 zlm: image: zlmediakit/zlmediakit:master container_name: gb28181_zlm ports: - 1935:1935 - 88:80 - 554:554 - 30000-35000:30000-35000/udp volumes: - gb28181_record_volume:/opt/media/bin/www/record environment: TZ: Asia/Shanghai networks: - gb28181_net depends_on: - redis wvp-pro: image: panjjo/wvp-pro container_name: gb28181_wvp ports: - 18080:18080 - 15060:15060/udp volumes: - ./config/application.yml:/config/application.yml - gb28181_record_volume:/record environment: TZ: Asia/Shanghai networks: - gb28181_net depends_on: - mysql - redis - zlm wvp-assist: image: panjjo/wvp-assist container_name: gb28181_assist ports: - 18081:18081 volumes: - ./config/assist.yml:/config/application.yml - gb28181_record_volume:/record networks: - gb28181_net depends_on: - redis - zlm volumes: gb28181_mysql_data: gb28181_redis_data: gb28181_record_volume: networks: gb28181_net: driver: bridge ipam: config: - subnet: 172.28.0.0/24关键配置说明服务依赖通过depends_on确保服务启动顺序健康检查MySQL和Redis配置了健康检查机制端口范围ZLM的RTP端口范围30000-35000/udp必须开放时区设置所有容器统一使用Asia/Shanghai时区3. 配置文件深度定制在项目根目录创建config文件夹存放各服务的配置文件。这是整个系统正常工作的关键。3.1 WVP-PRO核心配置创建config/application.yml文件spring: redis: host: redis port: 6379 password: redispwd database: 0 datasource: url: jdbc:mysql://mysql:3306/wvp?useSSLfalsecharacterEncodingUTF-8 username: root password: securepassword sip: ip: 0.0.0.0 port: 15060 domain: 4101050000 id: 41010500002000000001 media: id: ZLM001 ip: zlm http-port: 80 secret: LluEd5evhoTswSZ1qDnafNEFTCFnnWCe rtp: enable: true port-range: 30000,35000 server: port: 18080 record-assist-port: 180813.2 录像服务配置创建config/assist.yml文件spring: redis: host: redis port: 6379 password: redispwd database: 1 record: /record ffmpeg: /usr/bin/ffmpeg ffprobe: /usr/bin/ffprobe server: port: 180813.3 ZLM运行时配置虽然我们使用了官方镜像但有时需要调整ZLM的运行时参数。可以通过以下命令进入容器修改docker exec -it gb28181_zlm bash vi /opt/media/config/config.ini关键参数建议[api] secretLluEd5evhoTswSZ1qDnafNEFTCFnnWCe [hook] enable0 alive_interval10 [rtp_proxy] port_range30000-350004. 系统部署与运维4.1 一键启动与停止创建管理脚本manage.sh#!/bin/bash case $1 in start) docker-compose up -d ;; stop) docker-compose down ;; restart) docker-compose restart ;; logs) docker-compose logs -f ;; *) echo Usage: $0 {start|stop|restart|logs} exit 1 esac赋予执行权限chmod x manage.sh4.2 服务健康检查验证各服务状态# 检查容器状态 docker ps -a # 检查WVP-PRO日志 docker logs -f gb28181_wvp # 测试MySQL连接 docker exec -it gb28181_mysql mysql -uroot -psecurepassword # 测试Redis连接 docker exec -it gb28181_redis redis-cli -a redispwd4.3 常见问题排查ZLM无法推流检查30000-35000 UDP端口是否开放验证ZLM和WVP-PRO的secret配置是否一致录像文件无法生成确认gb28181_record_volume卷已正确挂载检查wvp-assist的redis配置是否正确设备注册失败确认SIP配置中的domain和id符合GB28181规范检查15060 UDP端口是否开放5. 高级功能实现5.1 录像管理优化默认的录像服务可能无法满足生产环境需求我们可以通过以下方式增强定时清理脚本docker exec -it gb28181_assist bash -c find /record -type f -mtime 7 -delete录像文件转码# 在wvp-assist容器中安装ffmpeg docker exec -it gb28181_assist apt-get update apt-get install -y ffmpeg5.2 性能监控方案添加Prometheus监控# 在docker-compose.yml中添加 monitor: image: prom/prometheus ports: - 9090:9090 volumes: - ./monitor/prometheus.yml:/etc/prometheus/prometheus.yml networks: - gb28181_net对应的prometheus.yml配置scrape_configs: - job_name: wvp static_configs: - targets: [wvp:18080] - job_name: zlm static_configs: - targets: [zlm:80]5.3 HTTPS安全加固为管理界面启用HTTPS准备SSL证书修改WVP-PRO配置server: ssl: enabled: true key-store: classpath:keystore.jks key-store-password: yourpassword6. 实际应用场景6.1 设备接入测试典型的IPC接入流程在IPC网页配置界面设置SIP服务器地址填写WVP-PRO的SIP ID和域信息配置认证密码如有保存后等待设备注册6.2 视频流调用获取视频流的几种方式RTSP流rtsp://zlm:554/{streamId}RTMP流rtmp://zlm:1935/{streamId}FLV-H5播放http://zlm:88/{streamId}.flv6.3 录像检索与回放通过wvp-assist接口管理录像查询录像列表GET http://wvp-assist:18081/api/record/list下载录像文件GET http://wvp-assist:18081/api/record/download/{fileId}删除录像记录DELETE http://wvp-assist:18081/api/record/{fileId}7. 生产环境建议对于需要长期运行的业务环境建议考虑以下优化措施数据库备份策略docker exec gb28181_mysql sh -c exec mysqldump -uroot -p$MYSQL_ROOT_PASSWORD wvp backup.sql日志轮转配置# 在WVP-PRO的application.yml中添加 logging: file: name: logs/wvp.log max-size: 50MB max-history: 30资源限制# 在docker-compose.yml中为每个服务添加 deploy: resources: limits: cpus: 1 memory: 2G reservations: cpus: 0.5 memory: 1G高可用方案MySQL主从复制Redis哨兵模式ZLM集群部署这套容器化部署方案已经在多个实际项目中验证最大的优势在于环境的一致性和可重复性。开发团队可以轻松地在本地复现生产环境而运维团队则能够通过简单的命令完成整个系统的启停和维护。