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

保姆级教程:用Docker Compose一键部署WVP-Pro+ZLMediaKit+Assist监控平台(附配置文件)

基于Docker Compose的WVP-Pro+ZLMediaKit+Assist监控平台全栈部署指南

在视频监控与流媒体服务领域,WVP-Pro、ZLMediaKit和Assist的组合已成为许多企业构建智能监控系统的首选方案。传统手动部署方式需要逐个启动容器、管理端口映射和卷挂载,不仅效率低下,还容易出错。本文将彻底改变这一局面——通过Docker Compose实现一键式全栈部署,让复杂系统的搭建变得像喝咖啡一样简单。

1. 环境准备与架构解析

在开始部署之前,我们需要先理解这套技术栈的核心组件及其协作关系:

  • WVP-Pro:开源的视频管理平台,负责设备接入、视频流转发和用户管理
  • ZLMediaKit:高性能流媒体服务器,处理RTSP/RTMP/HLS等协议转换
  • Assist:辅助服务模块,提供信令交换和系统状态监控
  • Redis:缓存服务,加速会话管理和状态同步
  • MySQL:持久化存储系统配置和设备信息

这套架构的典型数据流向是:摄像头→ZLMediaKit→WVP-Pro→终端用户。Docker Compose将把这些服务编排为一个有机整体,解决手动部署面临的三大痛点:

  1. 依赖管理混乱:各组件启动顺序难以把控
  2. 配置同步困难:环境变量和配置文件分散各处
  3. 运维效率低下:启停需要逐个操作容器

推荐的基础环境配置:

组件最低配置推荐配置
CPU4核8核及以上
内存8GB16GB
存储100GB HDD500GB SSD
操作系统Ubuntu 20.04Ubuntu 22.04

提示:生产环境建议使用专用网络存储(NAS)挂载视频录像目录,避免容器重建导致数据丢失

2. Docker Compose全栈配置详解

下面是我们精心设计的docker-compose.yml文件,每个配置项都经过生产环境验证:

version: '3.8' services: redis: image: redis:7.2-alpine container_name: wvp-redis ports: - "6379:6379" volumes: - redis_data:/data restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 3 mysql: image: mysql:8.0 container_name: wvp-mysql environment: MYSQL_ROOT_PASSWORD: SecurePass123! MYSQL_DATABASE: wvp_db MYSQL_USER: wvp_user MYSQL_PASSWORD: Wvp@2023 ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf restart: unless-stopped healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 3 zlmediakit: image: zlmediakit/zlmediakit:master container_name: wvp-zlm ports: - "1935:1935" # RTMP - "8080:80" # HTTP - "8443:443" # HTTPS - "554:554" # RTSP - "10000:10000" # RTP over TCP - "10000:10000/udp" # RTP over UDP - "8000:8000/udp" # 媒体端口 - "9000:9000/udp" # 媒体端口 volumes: - ./data/zlm/www:/opt/media/bin/www - ./config/zlm/config.ini:/opt/media/conf/config.ini environment: TZ: Asia/Shanghai depends_on: redis: condition: service_healthy restart: unless-stopped assist: image: wvp-assist:2.0 container_name: wvp-assist ports: - "18081:18081" volumes: - ./data/assist:/assist - ./config/assist/application.yml:/assist/config/application.yml environment: SPRING_REDIS_HOST: redis SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/wvp_db depends_on: mysql: condition: service_healthy redis: condition: service_healthy restart: unless-stopped wvp-pro: image: wvp-pro:2.7 container_name: wvp-pro ports: - "18080:18080" - "5060:5060" - "15060:15060" volumes: - ./data/wvp:/wvp - ./config/wvp/application.yml:/wvp/config/application.yml environment: SPRING_REDIS_HOST: redis SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/wvp_db MEDIA_SERVER_IP: ${SERVER_IP} depends_on: assist: condition: service_started zlmediakit: condition: service_started restart: unless-stopped volumes: redis_data: mysql_data:

关键配置解析:

  1. 网络拓扑:所有服务默认加入同一个Docker网络,通过服务名直接通信
  2. 健康检查:确保服务依赖顺序,避免启动竞争条件
  3. 持久化存储
    • Redis和MySQL使用命名卷保证数据安全
    • 配置文件通过bind mount实现宿主机编辑
  4. 环境变量:敏感信息通过环境变量注入,避免硬编码

注意:部署前需要设置SERVER_IP环境变量,值为服务器公网IP:export SERVER_IP=你的服务器IP

3. 配置文件定制与优化

配置文件是系统稳定运行的核心,我们提供经过优化的模板配置:

ZLMediaKit配置(config/zlm/config.ini)关键参数:

[api] secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc enable_ffmpeg=true [hook] enable_flow_report=true on_publish=http://assist:18081/api/v1/stream/publish on_unpublish=http://assist:18081/api/v1/stream/unpublish on_play=http://assist:18081/api/v1/stream/play on_stop=http://assist:18081/api/v1/stream/stop

WVP-Pro配置(config/wvp/application.yml)关键参数:

spring: datasource: username: wvp_user password: Wvp@2023 url: jdbc:mysql://mysql:3306/wvp_db?useSSL=false&allowPublicKeyRetrieval=true redis: host: redis port: 6379 media: ip: ${MEDIA_SERVER_IP} port: 10000 secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc

性能调优建议:

  1. ZLMediaKit工作线程数设置(根据CPU核心数调整):
    [thread] rtsp=4 rtmp=4 http=4
  2. MySQL连接池配置(application.yml):
    spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000
  3. JVM内存分配(通过环境变量设置):
    environment: JAVA_OPTS: "-Xms2g -Xmx4g -XX:MaxMetaspaceSize=512m"

4. 部署操作与日常运维

一键启动命令:

docker-compose up -d

系统启动后,可以通过以下命令观察日志:

# 查看整体状态 docker-compose ps # 跟踪WVP-Pro日志 docker-compose logs -f wvp-pro # 检查ZLMediaKit运行状态 docker exec wvp-zlm ./MediaServer -h

常用运维操作:

操作命令
停止所有服务docker-compose down
重启单个服务docker-compose restart wvp-pro
更新镜像docker-compose pull && docker-compose up -d
备份数据库docker exec wvp-mysql mysqldump -u root -pSecurePass123! wvp_db > backup.sql
查看网络带宽使用docker stats

故障排查指南:

  1. 端口冲突:使用netstat -tulnp | grep 端口号检查
  2. 容器启动失败:查看详细日志docker-compose logs 服务名
  3. 视频流无法播放
    • 检查ZLMediaKit的hook地址是否可达
    • 验证SIP信令是否正常:tcpdump -i any port 5060 -vv
  4. 性能瓶颈定位
    # CPU使用率 docker stats --no-stream # 容器内进程分析 docker exec wvp-zlm top

5. 安全加固与扩��方案

基础安全措施:

  1. 修改默认凭证:
    • WVP-Pro管理员密码
    • MySQL root密码
    • ZLMediaKit api.secret
  2. 网络隔离:
    networks: wvp-net: driver: bridge internal: true
  3. 防火墙规则:
    ufw allow 18080/tcp # WVP-Pro web ufw allow 5060/udp # SIP ufw allow 10000:20000/udp # 媒体端口范围

高可用架构建议:

  1. 数据库集群:使用MySQL主从复制或Galera集群
  2. Redis哨兵:配置Redis Sentinel实现自动故障转移
  3. ZLM集群
    • 部署多个ZLM实例
    • 通过WVP-Pro的媒体服务器集群功能管理
  4. 负载均衡:使用Nginx对WVP-Pro做HTTP负载均衡

监控集成方案:

  1. Prometheus监控指标收集:
    # docker-compose.yml新增 prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
  2. Grafana仪表板配置示例:
    grafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana

这套部署方案已经在多个生产环境稳定运行,处理着每天TB级的视频流量。相比传统部署方式,Docker Compose方案将部署时间从小时级缩短到分钟级,且极大降低了运维复杂度。

http://www.jsqmd.com/news/943552/

相关文章:

  • 微星B75MA-E31主板BIOS设置
  • 代码随想录算法训练营Day59 图论09 | Dijkstra(堆优化版)精讲、Bellman_ford 算法精讲
  • 匠心守护:2026万国官方售后全链路服务实录及网点分布 - 速递信息
  • FastAPI 分层架构深度解析:从 Controller 到 Service 与 CRUD 层
  • 使用 hionic 将 Web 应用部署到鸿蒙PC平台
  • 效率提升:用快马平台为wsl环境定制自动化开发脚本工具
  • 若依 RuoYi-Vue 自定义车间设备模块 + 数据权限完整实现教程
  • 遥感影像分割不再靠蒙:eCognition ESP2插件保姆级安装与参数调试指南
  • 3分钟快速上手:Windows原生运行安卓应用的终极解决方案
  • 远恒集团荣登“2026中国品牌500强”,并斩获“品牌强国黑马榜·十大投资价值品牌”
  • 2026年上海市PMP培训机构哪家好?官方授权R.E.P.报考指南 - 众智商学院课程中心
  • 石家庄市地区2026年权威甄选:黄金回收白银铂金回收优质门店 TOP5 含详细电话 - 诚金汇钻回收公司
  • 【Flutter】Flutter 异步方法调用 ( async 和 await 关键字解析 | Dart 单线程 | await 调用方式对比 | Future<void> 返回值作用 )
  • 终极免费甘特图工具:GanttProject 让你轻松管理复杂项目
  • OpenRocket模型火箭设计软件:从零开始掌握火箭仿真与优化
  • 火灾事故动画还原需要注意哪些细节?
  • 保姆级教程:在Ubuntu 20.04上用Docker容器搞定PX4开发环境(附Java报错解决)
  • 微信收藏的图片到底存了几份?我用Python脚本帮你理清了Data、Temp、Thumb三大文件夹的关系
  • 2026年6月全国百达翡丽官方维修服务网点汇总,门店地址及售后电话一览 - 资讯快报
  • 免费开源图片去重神器:3步告别重复照片困扰的终极解决方案
  • CPT Markets:多维度评估平台运营与服务细节
  • 计算机毕业设计之基于flask框架的微博实时热点数据可视化设计与实现
  • 基于LM317的DIY可调稳压电源制作全攻略:从原理到实践
  • 基于ESP32-CAM的3D打印机无线监控方案:从硬件选型到软件集成
  • 2026年 磁铁全品类推荐榜单:钕铁硼/异形/方形/圆形/电机磁铁及锂电磁棒/磁组件源头厂家实力解析! - 品牌企业推荐师(官方)
  • 产品寿命预测实战:手把手用Python+Weibull模型评估5000次循环后的可靠性(附双侧/单侧置信区间代码)
  • 2026年6月昭通贵金属回收权威门店排行 TOP5 黄金 + 铂金 + 白银回收 附电话地址 - 中业金奢再生回收中心
  • C#零基础通关第十五篇:吃透特性Attribute与AOP编程,实现数据校验、权限拦截、架构解耦
  • TestDisk与PhotoRec:免费开源数据恢复双雄的完整使用指南
  • 不止于杀毒:火绒安全这些隐藏功能,才是电脑高手的秘密武器