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

保姆级教程:用Docker Compose一键部署WVP-PRO+ZLM+录像服务(含Nginx反代)

容器化流媒体平台实战:WVP-PRO+ZLM+Docker Compose全栈部署指南

在视频监控与流媒体服务领域,GB28181标准已成为行业通用协议。传统部署方式需要手动安装Java环境、配置数据库、调整防火墙规则等一系列繁琐操作,而今天我们将使用Docker Compose实现一键部署生产级流媒体平台,包含WVP-PRO信令服务器、ZLM媒体服务器、录像服务、MySQL、Redis以及Nginx反向代理的完整解决方案。

1. 环境规划与准备工作

部署前需要确认服务器满足以下基础要求:

  • 硬件配置:建议4核CPU/8GB内存/100GB SSD存储(高清视频流处理对IOPS要求较高)
  • 网络环境:确保1935(RTMP)、554(RTSP)、30000-35000(RTP)等端口可访问
  • 域名准备:若需HTTPS访问,提前准备域名并完成DNS解析

创建项目目录结构:

mkdir -p wvp-pro-docker/{config,record,nginx/ssl} cd wvp-pro-docker

此结构将用于存放:

  • config/:各服务配置文件
  • record/:录像文件存储
  • nginx/ssl/:SSL证书文件

2. Docker Compose核心编排

以下是经过生产验证的docker-compose.yml文件,实现了服务依赖管理、网络隔离与资源限制:

version: '3.8' services: # MySQL数据库服务 mysql: image: mysql:8.0 container_name: wvp-mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: wvp TZ: Asia/Shanghai volumes: - ./config/mysql:/etc/mysql/conf.d - mysql_data:/var/lib/mysql networks: - wvp-network deploy: resources: limits: cpus: '1' memory: 2G # Redis缓存服务 redis: image: redis:6-alpine container_name: wvp-redis command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - redis_data:/data networks: - wvp-network # ZLMediaKit媒体服务器 zlm: image: zlmediakit/zlmediakit:master container_name: zlm-server ports: - "1935:1935" # RTMP - "554:554" # RTSP - "10000:10000/udp" # RTP - "30000-35000:30000-35000/udp" # RTP端口范围 environment: TZ: Asia/Shanghai volumes: - ./config/zlm/config.ini:/opt/media/config/config.ini - ./record:/opt/media/bin/www/record networks: - wvp-network depends_on: - redis # WVP-PRO信令服务器 wvp-pro: image: pan648540858/wvp-pro:latest container_name: wvp-pro ports: - "18080:18080" volumes: - ./config/wvp/application.yml:/app/config/application.yml environment: TZ: Asia/Shanghai networks: - wvp-network depends_on: - mysql - redis - zlm # 录像辅助服务 wvp-assist: image: pan648540858/wvp-pro-assist:latest container_name: wvp-assist ports: - "18081:18081" volumes: - ./config/assist/application.yml:/app/config/application.yml - ./record:/record - /usr/bin/ffmpeg:/usr/bin/ffmpeg - /usr/bin/ffprobe:/usr/bin/ffprobe networks: - wvp-network depends_on: - zlm - redis # Nginx反向代理 nginx: image: nginx:alpine container_name: wvp-nginx ports: - "80:80" - "443:443" volumes: - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf - ./config/nginx/conf.d:/etc/nginx/conf.d - ./nginx/ssl:/etc/nginx/ssl networks: - wvp-network depends_on: - wvp-pro - wvp-assist volumes: mysql_data: redis_data: networks: wvp-network: driver: bridge

关键配置说明:

  1. 网络隔离:所有服务通过wvp-network互联,避免暴露不必要的端口
  2. 资源限制:对MySQL等资源密集型服务设置CPU/内存上限
  3. 数据持久化:数据库和录像文件通过volume实现持久存储
  4. 环境变量:敏感信息通过.env文件管理(需自行创建)

3. 关键服务配置详解

3.1 WVP-PRO核心配置

config/wvp/application.yml的必须修改项:

spring: datasource: url: jdbc:mysql://mysql:3306/wvp?useSSL=false&characterEncoding=UTF8 username: root password: ${MYSQL_ROOT_PASSWORD} redis: host: redis password: ${REDIS_PASSWORD} sip: ip: 0.0.0.0 port: 5060 media: id: ${MEDIA_SERVER_ID} ip: zlm http-port: 80 secret: ${ZLM_API_SECRET} rtp: enable: true port-range: 30000,35000

3.2 ZLM媒体服务器优化配置

config/zlm/config.ini需要特别注意以下参数:

[api] secret = ${ZLM_API_SECRET} # 需与WVP配置一致 [rtp_proxy] port_range = 30000-35000 # RTP端口范围 [hook] enable = 1 on_play = http://wvp-pro:18080/index/hook/on_play on_publish = http://wvp-pro:18080/index/hook/on_publish

3.3 Nginx反向代理配置

实现HTTPS访问与负载均衡的示例配置(config/nginx/conf.d/wvp.conf):

server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; location / { proxy_pass http://wvp-pro:18080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /assist/ { proxy_pass http://wvp-assist:18081/; } }

4. 部署与运维实践

启动所有服务:

docker compose up -d

常用运维命令:

  • 查看服务日志:docker compose logs -f wvp-pro
  • 重启单个服务:docker compose restart zlm
  • 备份数据库:docker exec wvp-mysql mysqldump -uroot -p$MYSQL_ROOT_PASSWORD wvp > backup.sql

性能监控建议:

# 查看容器资源使用情况 docker stats # 监控ZLM的流媒体状态 curl http://localhost:88/index/api/getServerConfig

5. 常见问题解决方案

问题1:WVP-PRO无法连接ZLM

  • 检查media.secret是否与ZLM的[api].secret一致
  • 确认网络连通性:docker exec -it wvp-pro ping zlm

问题2:录像文件无法播放

  1. 确认录像服务挂载目录权限:
    chown -R 1000:1000 ./record
  2. 检查FFmpeg路径映射:
    volumes: - /usr/bin/ffmpeg:/usr/bin/ffmpeg

问题3:RTP流传输不稳定

  • 在防火墙开放UDP端口30000-35000
  • 调整ZLM配置:
    [rtp_proxy] timeout_sec = 3600

这套容器化方案已在多个生产环境稳定运行,相比传统部署方式节省了80%的配置时间。通过Docker Compose的版本控制能力,可以轻松实现配置变更追踪和快速回滚。

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

相关文章:

  • 2026年防火门厂家推荐:河南瑞安盾门业,木质/钢制/玻璃/隧道防火门全品类供应 - 品牌推荐官
  • 2026软件公司排名出炉:第一名意料之中,但“黑马”为什么是它? - 资讯焦点
  • 前端测试覆盖率从40%到80%:我是如何用AI工具做到的
  • 利用CSS动画打造动态语音发送波纹效果
  • 别只调参了!用LoRA微调Qwen2.5打造专属“数学家教”:从数据清洗到效果评测
  • 2026年分散剂厂家实力推荐:维波斯新材料,油墨/颜料/涂料/石墨烯分散剂专业供应商 - 品牌推荐官
  • 量子背锅术:把错误抛到其他时间线
  • 预算5000元电动车怎么选?要动力要智能,看这一篇就够了 - 资讯焦点
  • Synology Photos CPU驱动人脸识别补丁:解锁旧设备AI相册的终极方案
  • 大麦协议软件:从自动化工具到合规抢票系统的技术实现与演进
  • 2026年超声波清洗机厂家推荐:济南科尔,大型/全自动/工业/多槽/实验室清洗机全系供应 - 品牌推荐官
  • LED照明设计必看:TIR透镜在LightTools中的准直与均匀优化技巧
  • 别再只盯着FLOPs了!用thop和fvcore库实测PyTorch模型的计算量与参数量
  • 2026体重管理新观察:从“吃饱”到“吃对”,这家减肥产品品牌的“AI大脑”究竟强在哪? - 资讯焦点
  • Alice-Tools高效处理游戏资源全流程指南:从零基础到专业应用
  • AI 创作者指南:04.AI写作:从草稿到润色的全流程协作
  • 杭州华贸企业管理咨询有限公司靠谱吗?实打实的实力说话 - 资讯焦点
  • 20252818 2025-2026-2 《网络攻防实践》第二周作业
  • 2026年CNAS资质咨询服务行业评估报告:制造业首选解决方案推荐 - 博客湾
  • 终极压缩革命:7-Zip ZS如何用六种算法重塑文件处理新范式
  • 2026年内墙装饰材料厂家推荐:潍坊天鹅绒装饰建材,墙衣/雨沙/艺术漆等全系产品供应 - 品牌推荐官
  • 2026眼周护理困局破解!HNF双萃焕活眼霜实测:2周淡黑眼圈、8周紧眼袋,全肤质零踩雷 - 资讯焦点
  • League Akari终极指南:基于LCU API的英雄联盟智能助手深度解析
  • BthPS3驱动技术指南:实现PS3手柄在Windows 11系统的蓝牙适配与优化
  • BFBY淡纹眼霜全肤质适配,97.65%去眼袋率,4周逆袭少女眼 - 资讯焦点
  • 从零开始:用Python搭建你的第一个加密货币量化交易机器人(附完整代码)
  • 【赵渝强老师】Redis中的字符串
  • OpenCV+YOLOv3目标检测实战:5分钟搞定视频流实时检测(附Python/C++代码)
  • 2026年广州靠谱的讯灵AI渠道经理推荐,联系方式查询 - 工业推荐榜
  • 用LoRA低成本定制你的Qwen模型:单卡搞定角色扮演AI(附西游记数据集)