WVP-PRO国标平台容器化实战:基于Docker Compose的GB28181流媒体服务部署指南

在视频监控与智能安防领域,GB28181标准已经成为设备互联的通用协议语言。传统部署方式需要耗费数小时在环境配置和依赖解决上,而容器化技术让这一切变得像搭积木一样简单。本文将带您体验如何用Docker Compose在20分钟内搭建完整的WVP-PRO+ZLMediaKit国标平台。

1. 容器化部署的优势与架构设计

相比传统编译安装方式,容器化方案具有三个显著优势:

  • 环境一致性:消除"在我机器上能跑"的经典问题,确保开发、测试、生产环境完全一致
  • 快速部署:从零到可用的时间从小时级缩短到分钟级
  • 资源隔离:数据库、媒体服务、Web服务各自独立,互不干扰

典型部署架构包含以下组件:

服务组件功能描述推荐镜像版本
WVP-PRO国标信令控制与设备管理panjjo/wvp-pro
ZLMediaKit流媒体转发与处理核心zlmediakit
MySQL设备信息与配置存储mysql:5.7
Redis实时状态缓存与消息队列redis:alpine

提示:生产环境建议为每个服务单独配置数据卷,避免容器重建时数据丢失

2. 准备Docker环境与编排文件

2.1 基础环境配置

确保宿主机已安装最新版Docker和Docker Compose:

# Ubuntu安装示例
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker

验证安装:

docker --version && docker compose version

2.2 编写docker-compose.yml

创建项目目录并编写编排文件:

version: '3.8'

services:
  mysql:
    image: mysql:5.7
    container_name: wvp-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: wvp
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"
    restart: unless-stopped

  redis:
    image: redis:alpine
    container_name: wvp-redis
    command: redis-server --requirepass redis123
    volumes:
      - redis_data:/data
    ports:
      - "6379:6379"
    restart: unless-stopped

  zlm:
    image: zlmediakit/zlmediakit:latest
    container_name: zlmediakit
    volumes:
      - ./zlm/config.ini:/opt/zlmediakit/config/config.ini
    ports:
      - "80:80"
      - "1935:1935"
      - "554:554"
      - "30000-35000:30000-35000/udp"
    environment:
      - TZ=Asia/Shanghai
    restart: unless-stopped

  wvp:
    image: panjjo/wvp-pro:latest
    container_name: wvp-pro
    depends_on:
      - mysql
      - redis
      - zlm
    volumes:
      - ./wvp/application.yml:/app/config/application.yml
    ports:
      - "18080:18080"
      - "5060:5060/udp"
    restart: unless-stopped

volumes:
  mysql_data:
  redis_data:

关键配置说明:

  • 端口映射:5060/UDP用于SIP信令,30000-35000/UDP用于媒体流传输
  • 数据持久化:MySQL和Redis使用命名卷保存数据
  • 依赖关系:WVP服务等待数据库就绪后才启动

3. 服务配置详解

3.1 ZLMediaKit配置

创建zlm/config.ini文件:

[api]
secret=BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x

[general]
mediaServerId=FQ3TF8yT83wh5Wvz

[http]
port=80

[rtp_proxy]
port_range=30000-35000

3.2 WVP-PRO配置

创建wvp/application.yml文件,重点配置项:

server:
  port: 18080

sip:
  ip: 0.0.0.0
  port: 5060
  domain: 4401020049
  id: 44010200492000000001
  password: admin123

media:
  id: FQ3TF8yT83wh5Wvz
  ip: zlm  # 使用容器服务名
  http-port: 80
  secret: BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
  rtp:
    enable: true
    port-range: 30000,35000

datasource:
  dynamic:
    primary: master
    datasource:
      master:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://mysql:3306/wvp?useUnicode=true&characterEncoding=UTF8
        username: root
        password: root123

注意:容器间通信使用服务名称(如mysql/zlm)代替IP地址,这是Docker网络的内置DNS特性

4. 启动与测试验证

4.1 一键启动所有服务

docker compose up -d

观察日志确认各服务正常启动:

docker compose logs -f

4.2 功能测试步骤

  1. 访问WVP-PRO界面

    http://服务器IP:18080
    

    默认账号:admin/admin

  2. ZLMediaKit状态检查

    curl http://localhost/api/isMediaServer
    
  3. 模拟设备接入

    • 使用GB28181设备模拟器配置SIP服务器信息
    • 观察WVP-PRO的"设备列表"是否出现新设备

常见问题排查:

  • 数据库连接失败:检查MySQL容器日志,确认root密码与配置一致
  • 媒体流无法播放:验证UDP端口范围是否开放,检查防火墙设置
  • SIP注册失败:确认5060/UDP端口映射正确,抓包分析SIP信令

5. 生产环境优化建议

5.1 性能调优参数

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

services:
  zlm:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
    sysctls:
      - net.core.somaxconn=1024

5.2 高可用方案

  • 数据库集群:改用MySQL主从复制或Galera集群
  • 媒体服务负载均衡:部署多个ZLMediaKit实例,配置相同的mediaServerId
  • 使用Traefik实现反向代理
# 在docker-compose.yml中添加
services:
  traefik:
    image: traefik:v2.6
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command:
      - --providers.docker

5.3 监控与日志

集成Prometheus监控:

services:
  zlm:
    labels:
      - "prometheus.scrape=true"
      - "prometheus.port=80"
      - "prometheus.path=/metrics"

日志收集建议:

docker compose logs --tail=100 -f wvp

6. 进阶应用场景

6.1 与AI分析服务集成

通过ZLMediaKit的Hook机制将视频流推送到AI分析服务:

# 在config.ini中添加
[hook]
on_flow_report=https://ai-service/api/analysis

6.2 云端部署方案

AWS部署示例:

# 创建EC2实例
aws ec2 run-instances \
  --image-id ami-0c55b159cbfafe1f0 \
  --instance-type t3.medium \
  --security-group-ids sg-123456 \
  --user-data file://docker-install.sh

6.3 版本升级策略

采用蓝绿部署方式:

# 新版本测试
docker compose -f docker-compose.yml -f docker-compose.test.yml up

# 生产切换
docker compose pull && docker compose up -d --force-recreate

更多推荐