基于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/HTTPS80/443Nginx反代SIP信令5060GB28181标准端口媒体流30000-35000RTP传输范围管理端口18080WVP-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-compose2. Docker Compose编排实现2.1 服务架构设计我们采用微服务架构各组件职责如下服务名称功能描述依赖关系wvp-proGB28181信令与设备管理MySQL, Redis, ZLMzlmediakit流媒体处理与转发无wvp-assist录像管理与文件处理Redis, ZLMmysql数据存储无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?useSSLfalsecharacterEncodingUTF8 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,350003.2 ZLMediaKit优化配置./zlm/config.ini需要特别关注以下参数[api] secretLluEd5evhoTswSZ1qDnafNEFTCFnnWCe [hook] enable1 on_playhttp://wvp-pro:18080/index/hook/on_play on_publishhttp://wvp-pro:18080/index/hook/on_publish [rtp_proxy] port_range30000-350003.3 录像服务整合录像服务的./assist/application.yml配置示例record: path: /record day: 7 ffmpeg: path: /usr/bin/ffmpeg threads: 24. Nginx反向代理与安全加固4.1 SSL证书配置在./nginx/ssl/目录下放置您的证书文件如gb28181.crt和gb28181.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 -pStrongPassword1235.2 常见问题排查遇到服务异常时可参考以下排查步骤ZLM与WVP连接失败检查media.secret是否一致验证网络连通性docker exec gb28181-wvp ping zlm录像文件无法生成确认挂载目录权限chmod -R 777 ./record检查FFmpeg路径是否正确国标设备无法注册验证SIP端口5060是否开放检查domain和id是否符合规范6. 生产环境优化建议6.1 高可用部署方案对于关键业务场景建议采用以下高可用架构------------- | Nginx LB | ------------ | ---------------------------- | | -------------------- -------------------- | Docker Host (Node1) | | Docker Host (Node2) | | - WVP-PRO | | - WVP-PRO | | - ZLM | | - ZLM | --------------------- ---------------------6.2 监控与告警配置推荐使用PrometheusGrafana监控平台运行状态关键指标包括流媒体服务并发流、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: 1234567.2 智能分析集成通过RTSP流接入AI分析服务实现人脸识别、行为分析等功能。典型工作流WVP-PRO获取设备视频流ZLM将流转发给AI分析服务分析结果回传至业务系统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栈集中管理日志配置Filebeat收集容器日志通过Logstash进行日志处理在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
手把手教你用Docker Compose一键部署WVP-PRO+ZLM+录像服务(含Nginx反代)
发布时间:2026/5/31 3:11:23
基于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/HTTPS80/443Nginx反代SIP信令5060GB28181标准端口媒体流30000-35000RTP传输范围管理端口18080WVP-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-compose2. Docker Compose编排实现2.1 服务架构设计我们采用微服务架构各组件职责如下服务名称功能描述依赖关系wvp-proGB28181信令与设备管理MySQL, Redis, ZLMzlmediakit流媒体处理与转发无wvp-assist录像管理与文件处理Redis, ZLMmysql数据存储无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?useSSLfalsecharacterEncodingUTF8 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,350003.2 ZLMediaKit优化配置./zlm/config.ini需要特别关注以下参数[api] secretLluEd5evhoTswSZ1qDnafNEFTCFnnWCe [hook] enable1 on_playhttp://wvp-pro:18080/index/hook/on_play on_publishhttp://wvp-pro:18080/index/hook/on_publish [rtp_proxy] port_range30000-350003.3 录像服务整合录像服务的./assist/application.yml配置示例record: path: /record day: 7 ffmpeg: path: /usr/bin/ffmpeg threads: 24. Nginx反向代理与安全加固4.1 SSL证书配置在./nginx/ssl/目录下放置您的证书文件如gb28181.crt和gb28181.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 -pStrongPassword1235.2 常见问题排查遇到服务异常时可参考以下排查步骤ZLM与WVP连接失败检查media.secret是否一致验证网络连通性docker exec gb28181-wvp ping zlm录像文件无法生成确认挂载目录权限chmod -R 777 ./record检查FFmpeg路径是否正确国标设备无法注册验证SIP端口5060是否开放检查domain和id是否符合规范6. 生产环境优化建议6.1 高可用部署方案对于关键业务场景建议采用以下高可用架构------------- | Nginx LB | ------------ | ---------------------------- | | -------------------- -------------------- | Docker Host (Node1) | | Docker Host (Node2) | | - WVP-PRO | | - WVP-PRO | | - ZLM | | - ZLM | --------------------- ---------------------6.2 监控与告警配置推荐使用PrometheusGrafana监控平台运行状态关键指标包括流媒体服务并发流、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: 1234567.2 智能分析集成通过RTSP流接入AI分析服务实现人脸识别、行为分析等功能。典型工作流WVP-PRO获取设备视频流ZLM将流转发给AI分析服务分析结果回传至业务系统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栈集中管理日志配置Filebeat收集容器日志通过Logstash进行日志处理在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