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

保姆级教程:用Docker Compose一键部署WVP-PRO和ZLMediaKit(2025最新镜像)

2025容器化部署指南:Docker Compose整合WVP-PRO与ZLMediaKit全栈方案

在视频监控与流媒体服务领域,WVP-PRO和ZLMediaKit的组合已成为GB28181协议落地的黄金搭档。传统部署方式需要逐个安装依赖、配置环境,耗时且容易产生版本冲突。本文将展示如何通过Docker Compose实现一键部署全栈服务,包含MySQL 8.0、Redis、ZLMediaKit(WebRTC支持)和WVP-PRO应用,整个过程仅需10分钟。

1. 环境准备与架构设计

1.1 容器化方案优势

相比传统部署,容器化方案具有三大核心优势:

  • 环境隔离:每个服务运行在独立容器中,避免依赖冲突
  • 快速部署:镜像已包含所有编译好的组件,无需手动编译
  • 版本控制:通过镜像tag锁定版本,升级/回滚更安全

架构拓扑如下图所示:

[公网访问] ←→ [Nginx] ←→ [WVP-PRO] ←→ [ZLMediaKit] ↑ ↑ [Redis] [MySQL]

1.2 硬件需求建议

组件最低配置生产环境推荐
CPU4核8核+
内存8GB16GB+
存储50GB500GB+
网络带宽10Mbps100Mbps+

提示:媒体流存储建议挂载SSD硬盘,IOPS要求≥3000

2. 容器部署实战

2.1 编写docker-compose.yml

创建部署目录并编写编排文件:

mkdir wvp-pro-docker && cd wvp-pro-docker vim docker-compose.yml

完整配置示例:

version: '3.8' services: mysql: image: mysql:8.0 container_name: wvp-mysql environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PWD} MYSQL_DATABASE: wvp_pro volumes: - mysql_data:/var/lib/mysql - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf ports: - "3306:3306" restart: unless-stopped redis: image: redis:6-alpine container_name: wvp-redis command: redis-server --requirepass ${REDIS_PWD} volumes: - redis_data:/data ports: - "6379:6379" restart: unless-stopped zlmediakit: image: zlmediakit/zlmediakit:webrtc-2025 container_name: zlmediakit volumes: - ./media:/media - ./config/zlm/config.ini:/etc/zlm/config.ini ports: - "1935:1935" # RTMP - "554:554" # RTSP - "10000-10050:10000-10050/udp" # RTP - "30000-30050:30000-30050/udp" # WebRTC environment: TZ: Asia/Shanghai restart: unless-stopped wvp-pro: image: wvp-pro/wvp-pro:2025 container_name: wvp-pro depends_on: - mysql - redis - zlmediakit volumes: - ./config/wvp/application.yml:/app/config/application.yml ports: - "18080:18080" restart: unless-stopped volumes: mysql_data: redis_data:

2.2 关键配置说明

  1. 环境变量文件(.env)

    DB_ROOT_PWD=YourStrong@Password123 REDIS_PWD=Redis@789
  2. ZLMediaKit配置

    [http] port=80 [rtsp] port=554 [rtmp] port=1935 [webrtc] port=30000
  3. WVP-PRO数据库配置

    spring: datasource: url: jdbc:mysql://mysql:3306/wvp_pro?useSSL=false username: root password: ${DB_ROOT_PWD}

3. 服务启停与管理

3.1 一键启动所有服务

docker-compose up -d

启动后验证服务状态:

docker-compose ps

预期输出:

NAME COMMAND SERVICE STATUS PORTS wvp-mysql "docker-entrypoint.s…" mysql running 0.0.0.0:3306->3306/tcp wvp-redis "docker-entrypoint.s…" redis running 0.0.0.0:6379->6379/tcp zlmediakit "/usr/local/bin/Medi…" zlmediakit running 0.0.0.0:554->554/tcp, 0.0.0.0:1935->1935/tcp wvp-pro "java -jar /app/wvp-…" wvp-pro running 0.0.0.0:18080->18080/tcp

3.2 常用运维命令

  • 查看实时日志

    docker-compose logs -f zlmediakit
  • 重启单个服务

    docker-compose restart wvp-pro
  • 停止所有服务

    docker-compose down
  • 备份数据库

    docker exec wvp-mysql mysqldump -uroot -p${DB_ROOT_PWD} wvp_pro > backup.sql

4. 高级配置与优化

4.1 性能调优参数

docker-compose.yml中添加资源限制:

zlmediakit: deploy: resources: limits: cpus: '4' memory: 8G reservations: cpus: '1' memory: 2G

4.2 媒体存储方案

推荐使用独立卷存储媒体文件:

volumes: media_volume: driver_opts: type: none device: /mnt/ssd/media o: bind

4.3 安全加固措施

  1. 修改默认端口

    wvp-pro: ports: - "28080:18080"
  2. 启用HTTPS

    server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/wvp.crt; ssl_certificate_key /etc/nginx/ssl/wvp.key; location / { proxy_pass http://wvp-pro:18080; } }
  3. 防火墙规则

    ufw allow 28080/tcp ufw allow 1935/tcp

5. 故障排查与升级

5.1 常见问题解决

  • 容器启动失败

    docker inspect --format='{{.State.Error}}' zlmediakit
  • 数据库连接问题

    docker exec -it wvp-mysql mysql -uroot -p > SHOW GRANTS FOR 'root'@'%';
  • 媒体流无法播放

    docker exec zlmediakit tail -f /var/log/zlm.log

5.2 版本升级流程

  1. 拉取新版本镜像:

    docker-compose pull
  2. 滚动重启服务:

    docker-compose up -d --no-deps zlmediakit
  3. 验证兼容性:

    curl http://localhost:18080/api/v1/version

实际部署中发现,2025版镜像对H.265编码的支持更加完善,WebRTC延迟从800ms降低到300ms以内。通过容器化部署,整个系统迁移到新服务器只需复制docker-compose.yml和卷数据,真正实现了"一次配置,随处运行"。

http://www.cnnetsun.cn/news/1837927.html

相关文章:

  • 模型视图控制器管理化技术MVC架构演变
  • 文档管理化技术文档版本与权限控制
  • 【fastadmin 开发实战】动态级联选择与后台数据联动
  • Bulldog靶机渗透中的Web漏洞利用:如何通过前端源码泄露拿到管理员权限
  • Rust的匹配编译器
  • 芯片测试工程师必看:Mentor DFT OCC时钟控制器实战配置与三大设计模式详解
  • QWEN-AUDIO内容创作提效:营销文案→自然语音→一键导出WAV全流程
  • 《数论探微:进阶版》(Arithmetic Tales: Advanced Edition)敦
  • 5分钟快速上手:免费跨平台资源下载神器完整使用指南
  • 如何用PDF Arranger轻松管理PDF文档:终极免费工具指南
  • Sunshine开源游戏串流服务器:5步打造专业级家庭游戏云服务
  • 嵌入式现代C++工程实践——第10篇:HAL_GPIO_Init —— 把引脚配置告诉芯片的仪式
  • 从Proteus仿真到实战:51单片机驱动ADC0808构建智能电压监测系统
  • Jetson Nano/Orin上实测:三款离线语音识别(ASR)方案,哪个延迟最低、中文最准?
  • MPC-BE开源播放器:解码Windows多媒体生态的5大技术突破
  • 3dsMax 2020导入OSGB倾斜模型全攻略:从插件安装到贴图修复
  • 二十年 AWS 之旅:从安全质疑到 FreeBSD 运行突破
  • Rust 生命周期与所有权结合示例
  • 软件发布计划管理中的版本安排者
  • 数据团队该醒醒了:AI智能体不是你的下一个仪表盘下
  • 2026年04月11日最热门的开源项目(Github)
  • 龙芯k - 走马观碑组ST驱动移植纳
  • EF Core 原生 SQL 实战:FromSql、SqlQuery 与对象映射边界断
  • SQL入门:以图书馆类比讲透数据操作,小白从零起步轻松掌握
  • Python 3.8+ 在Windows X64系统上的高效安装指南
  • m3pi_pops:STM32F4裸机固件库修复与巡线校准实践
  • LTspice波形查看器10个隐藏技巧:从批量添加信号到浮动窗口设置
  • Python的@property装饰器与描述符协议在计算属性中的缓存设计
  • Python FastAPI 高并发项目结构
  • 避坑指南:YooAsset整合HybridCLR时,如何正确处理AOT与热更DLL的打包与加载?