WVP-PRO国标平台实战:如何用Docker Compose一键部署并配置GB28181流媒体服务?
·
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 功能测试步骤
-
访问WVP-PRO界面:
http://服务器IP:18080默认账号:admin/admin
-
ZLMediaKit状态检查:
curl http://localhost/api/isMediaServer -
模拟设备接入:
- 使用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
更多推荐
所有评论(0)