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

保姆级教程:用Docker Compose一键部署WVP-PRO+ZLM+录像服务,告别繁琐配置

基于Docker Compose的WVP-PRO+ZLM流媒体平台一键部署方案

在视频监控与流媒体服务领域,快速搭建稳定可靠的平台一直是运维人员的核心诉求。传统部署方式需要逐个安装配置WVP-PRO、ZLMediaKit、Redis、MySQL等多个组件,不仅耗时费力,而且难以保证环境一致性。本文将介绍如何通过Docker Compose实现全栈服务的一键部署,让您5分钟内搭建起功能完备的GB28181流媒体平台。

1. 环境准备与架构设计

1.1 系统需求建议

部署前请确保宿主机满足以下条件:

  • 操作系统:Ubuntu 20.04/22.04 LTS或CentOS 7/8
  • Docker版本:20.10.0+
  • Docker Compose:v2.0.0+
  • 硬件配置
    • CPU:4核及以上(推荐8核)
    • 内存:8GB+(视频处理建议16GB)
    • 存储:100GB+ SSD(录像文件需额外空间)

提示:运行docker --versiondocker-compose version检查版本,过低版本可能导致兼容性问题。

1.2 服务架构图解

整套方案包含五个核心服务:

┌─────────────────────────────────────────────────┐ │ Docker Host │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ WVP-PRO │ │ ZLMedia │ │ MySQL │ │ │ │ (Java) │◄─┤ Kit │ │ 8.0 │ │ │ └───────────┘ └───────────┘ └───────────┘ │ │ ▲ ▲ ▲ │ │ │ │ │ │ │ ┌───────────┐ ┌───────────┐ │ │ │ │ Redis │ │ WVP-ASSIST│ │ │ │ │ 7.0 │ │ (录像服务)│ │ │ │ └───────────┘ └───────────┘ │ │ │ │ │ └─────────────────────────────────────┼─────────┘ │ ┌────┴────┐ │ 客户端 │ │(浏览器) │ └─────────┘

2. Docker Compose编排实战

2.1 完整配置文件解析

创建docker-compose.yml文件,内容如下:

version: '3.8' services: redis: image: redis:7.0-alpine container_name: wvp-redis restart: unless-stopped volumes: - redis_data:/data ports: - "6379:6379" environment: - TZ=Asia/Shanghai healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 mysql: image: mysql:8.0 container_name: wvp-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: wvp@1234 MYSQL_DATABASE: wvp TZ: Asia/Shanghai volumes: - mysql_data:/var/lib/mysql - ./config/mysql/conf.d:/etc/mysql/conf.d ports: - "3306:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 30s timeout: 10s retries: 3 zlm: image: zlmediakit/zlmediakit:master container_name: zlm-server restart: unless-stopped volumes: - ./config/zlm/config.ini:/opt/media/config/config.ini - ./record:/opt/media/bin/www/record ports: - "1935:1935" # RTMP - "80:80" # HTTP - "443:443" # HTTPS - "554:554" # RTSP - "10000:10000" # RTP - "30000-35000:30000-35000/udp" # RTP端口范围 environment: - TZ=Asia/Shanghai depends_on: redis: condition: service_healthy wvp-pro: image: 648540858/wvp-pro:latest container_name: wvp-pro restart: unless-stopped volumes: - ./config/wvp/application.yml:/app/config/application.yml ports: - "18080:18080" - "15060:15060" # SIP端口 environment: - TZ=Asia/Shanghai depends_on: redis: condition: service_healthy mysql: condition: service_healthy zlm: condition: service_started wvp-assist: image: panjjo/wvp-assist container_name: wvp-assist restart: unless-stopped volumes: - ./config/assist/application.yml:/app/config/application.yml - ./record:/record ports: - "18081:18081" depends_on: redis: condition: service_healthy volumes: redis_data: mysql_data:

关键配置说明:

  • 端口映射:按需调整左侧宿主机端口,右侧容器端口勿改
  • 持久化存储:MySQL和Redis数据、录像文件均持久化
  • 健康检查:确保服务依赖顺序启动
  • 时区统一:所有容器设置为Asia/Shanghai时区

2.2 配置文件定制

创建配置文件目录结构:

mkdir -p {config/wvp,config/zlm,config/assist,config/mysql/conf.d,record}

WVP-PRO主配置(config/wvp/application.yml):

spring: redis: host: redis port: 6379 database: 0 password: "" datasource: url: jdbc:mysql://mysql:3306/wvp?useUnicode=true&characterEncoding=UTF8 username: root password: wvp@1234 hikari: maximum-pool-size: 20 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

ZLM媒体服务器配置(config/zlm/config.ini):

[api] apiDebug=1 secret=LluEd5evhoTswSZ1qDnafNEFTCFnnWCe [hook] enable=0 alive_interval=10 [general] mediaServerId=zlm001 flowThreshold=1024

录像服务配置(config/assist/application.yml):

spring: redis: host: redis port: 6379 database: 1 record: path: /record days: 7 ffmpeg: path: /usr/bin/ffmpeg ffprobe: /usr/bin/ffprobe

3. 部署与运维实践

3.1 一键启动与停止

启动所有服务:

docker-compose up -d

停止服务:

docker-compose down

查看服务状态:

docker-compose ps

3.2 常见问题排查

服务启动顺序问题

# 查看容器日志 docker-compose logs -f wvp-pro # 进入容器调试 docker exec -it wvp-pro sh

数据库连接失败

  1. 检查MySQL容器是否健康运行
  2. 验证application.yml中的连接字符串
  3. 必要时初始化数据库:
docker exec -it wvp-pro java -jar /app/wvp-pro.jar --spring.config.location=/app/config/application.yml --init-db

媒体流无法播放

  1. 检查ZLM端口映射是否正确
  2. 验证WVP-PRO与ZLM的secret配置一致
  3. 测试直接访问ZLM流地址:
rtmp://服务器IP/live/流ID

4. 高级配置与优化

4.1 性能调优建议

MySQL优化(config/mysql/conf.d/my.cnf):

[mysqld] innodb_buffer_pool_size = 1G innodb_log_file_size = 256M max_connections = 200

JVM参数调整: 修改docker-compose.yml中wvp-pro服务:

environment: - JAVA_OPTS=-Xms2g -Xmx4g -XX:+UseG1GC

ZLM多实例负载均衡

zlm1: image: zlmediakit/zlmediakit:master # ...其他配置同前例 environment: - INSTANCE_ID=zlm1 zlm2: image: zlmediakit/zlmediakit:master # ...其他配置同前例 environment: - INSTANCE_ID=zlm2

4.2 安全加固措施

HTTPS配置

  1. 准备SSL证书文件
  2. 修改WVP-PRO配置:
server: ssl: enabled: true key-store: classpath:keystore.jks key-store-password: yourpassword

防火墙规则

# 只开放必要端口 ufw allow 80,443,1935,554,18080,15060 ufw enable

定期备份方案

# 备份数据库 docker exec wvp-mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" wvp' > wvp-backup.sql # 备份录像文件 tar czvf record-$(date +%Y%m%d).tar.gz record/

实际部署中发现,使用Docker Compose管理这套流媒体平台后,版本升级变得异常简单——只需修改镜像版本号重新部署即可。录像文件的持久化存储也使得服务重启后历史数据完好无损,这对监控场景尤为重要。

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

相关文章:

  • C166开发中的内存区域定位技术解析与应用
  • 5分钟快速解锁VMware macOS虚拟机:Unlocker 3.0终极指南
  • 终极指南:RPFM自动翻译功能文本截断问题深度解析与完美修复方案
  • 用 BAPI_PO_CREATE1 创建带自定义字段的采购订单,一次把 EXTENSIONIN 讲透
  • 如何5分钟搭建专业级在线LaTeX写作环境:WebLaTeX完全指南
  • 5分钟永久备份:GetQzonehistory让你轻松导出QQ空间所有历史说说
  • VinXiangQi:如何用深度学习技术革新传统象棋对弈体验
  • 别再死记硬背了!用Python手把手实现感知器算法,从鸢尾花分类到决策边界可视化
  • 3大实战策略:用OpenCore Legacy Patcher深度解锁老旧Mac的macOS升级潜能
  • 如何用qmcflac2mp3终极解锁QQ音乐加密文件:完整转换指南
  • 从游戏挂机到办公自动化:深入聊聊按键精灵里数字、文本、真假值互相转换的那些门道
  • 原神60帧限制终于被打破!这份完整指南教你如何免费解锁120帧流畅体验
  • 如何3步快速解密网易云音乐NCM文件:免费高效转换工具全攻略
  • 别再被1e-9搞懵了!Python科学计数法实战避坑指南(附数据处理案例)
  • 告别无效日志!手把手教你用CPAL脚本的writeToLog和writeToLogEx函数,打造可读性超强的自动化测试报告
  • Online-disk-direct-link-download-assistant:网盘直链解析技术深度解析与实战指南
  • 5步掌握SMUDebugTool:开源AMD Ryzen硬件性能优化终极指南
  • 终极指南:使用XUnity.AutoTranslator打破游戏语言障碍的完整解决方案
  • SystemC-TLM虚拟原型与模糊测试融合技术解析
  • 如何快速恢复Windows 11任务栏拖放功能:完整修复工具指南
  • AI教材编写必备:低查重AI工具助力,1小时生成10万字专业教材!
  • 收藏!小白程序员轻松入门大模型:手把手教你准备面试,提升求职成功率!
  • 3分钟解锁完整Windows体验:KMS_VL_ALL_AIO智能激活工具终极指南
  • 视频压缩革命:如何用开源工具CompressO将229MB视频瘦身至14MB而不损失画质
  • 如何高效转换CAJ为PDF:开源工具的完整解决方案
  • 大模型性能测试(二):使用 Locust 并发请求测算 API 吞吐量与延迟「附代码」
  • QMCDecode终极指南:轻松解锁QQ音乐加密音频文件
  • 南京景晟昊建筑装饰工程:栖霞靠谱的硅钙高晶板吊顶公司怎么联系 - LYL仔仔
  • ComfyUI-Impact-Pack V8完全指南:AI图像细节增强与语义分割的终极解决方案
  • Fast-GitHub浏览器扩展架构解析:智能路由与DOM注入技术实现GitHub加速方案