保姆级教程:用Docker Compose一键部署WVP-PRO+ZLM+Redis+MySQL,附带录像服务
容器化GB28181视频平台:Docker Compose全栈部署指南
在视频监控与流媒体领域,GB28181标准已经成为国内安防行业的通用协议。但对于开发者而言,搭建一个完整的测试环境往往需要面对WVP-PRO、ZLMediaKit、Redis、MySQL等多个组件的复杂配置。本文将彻底改变这一现状,通过Docker Compose实现一键式容器化部署,涵盖从信令管理、媒体流转发到录像服务的完整解决方案。
1. 环境规划与准备工作
在开始部署之前,合理的环境规划能够避免后续的网络冲突和资源争用。我们建议采用以下架构设计:
- 网络拓扑 :创建独立的Docker网络
gb28181_net,使用172.28.0.0/24网段 - 存储规划 :
- MySQL数据卷:
gb28181_mysql_data - Redis数据卷:
gb28181_redis_data - 录像文件存储:
gb28181_record_volume
- MySQL数据卷:
- 端口映射 :
- WVP-PRO管理界面:18080/tcp
- ZLM HTTP API:88/tcp
- ZLM RTMP:1935/tcp
- ZLM RTSP:554/tcp
硬件配置建议:
最低配置:2核CPU/4GB内存/50GB存储
推荐配置:4核CPU/8GB内存/100GB SSD存储
2. Docker Compose全栈配置
创建 docker-compose.yml 文件,这是整个部署的核心。我们将采用多服务编排的方式,确保各组件之间的依赖关系正确建立。
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: gb28181_mysql
environment:
MYSQL_ROOT_PASSWORD: securepassword
MYSQL_DATABASE: wvp
volumes:
- gb28181_mysql_data:/var/lib/mysql
networks:
- gb28181_net
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 10s
retries: 3
redis:
image: redis:6.2
container_name: gb28181_redis
command: redis-server --requirepass redispwd
volumes:
- gb28181_redis_data:/data
networks:
- gb28181_net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 10s
retries: 3
zlm:
image: zlmediakit/zlmediakit:master
container_name: gb28181_zlm
ports:
- "1935:1935"
- "88:80"
- "554:554"
- "30000-35000:30000-35000/udp"
volumes:
- gb28181_record_volume:/opt/media/bin/www/record
environment:
TZ: Asia/Shanghai
networks:
- gb28181_net
depends_on:
- redis
wvp-pro:
image: panjjo/wvp-pro
container_name: gb28181_wvp
ports:
- "18080:18080"
- "15060:15060/udp"
volumes:
- ./config/application.yml:/config/application.yml
- gb28181_record_volume:/record
environment:
TZ: Asia/Shanghai
networks:
- gb28181_net
depends_on:
- mysql
- redis
- zlm
wvp-assist:
image: panjjo/wvp-assist
container_name: gb28181_assist
ports:
- "18081:18081"
volumes:
- ./config/assist.yml:/config/application.yml
- gb28181_record_volume:/record
networks:
- gb28181_net
depends_on:
- redis
- zlm
volumes:
gb28181_mysql_data:
gb28181_redis_data:
gb28181_record_volume:
networks:
gb28181_net:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/24
关键配置说明:
- 服务依赖 :通过
depends_on确保服务启动顺序 - 健康检查 :MySQL和Redis配置了健康检查机制
- 端口范围 :ZLM的RTP端口范围30000-35000/udp必须开放
- 时区设置 :所有容器统一使用Asia/Shanghai时区
3. 配置文件深度定制
在项目根目录创建 config 文件夹,存放各服务的配置文件。这是整个系统正常工作的关键。
3.1 WVP-PRO核心配置
创建 config/application.yml 文件:
spring:
redis:
host: redis
port: 6379
password: redispwd
database: 0
datasource:
url: jdbc:mysql://mysql:3306/wvp?useSSL=false&characterEncoding=UTF-8
username: root
password: securepassword
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
server:
port: 18080
record-assist-port: 18081
3.2 录像服务配置
创建 config/assist.yml 文件:
spring:
redis:
host: redis
port: 6379
password: redispwd
database: 1
record:
/record
ffmpeg: /usr/bin/ffmpeg
ffprobe: /usr/bin/ffprobe
server:
port: 18081
3.3 ZLM运行时配置
虽然我们使用了官方镜像,但有时需要调整ZLM的运行时参数。可以通过以下命令进入容器修改:
docker exec -it gb28181_zlm bash
vi /opt/media/config/config.ini
关键参数建议:
[api]
secret=LluEd5evhoTswSZ1qDnafNEFTCFnnWCe
[hook]
enable=0
alive_interval=10
[rtp_proxy]
port_range=30000-35000
4. 系统部署与运维
4.1 一键启动与停止
创建管理脚本 manage.sh :
#!/bin/bash
case "$1" in
start)
docker-compose up -d
;;
stop)
docker-compose down
;;
restart)
docker-compose restart
;;
logs)
docker-compose logs -f
;;
*)
echo "Usage: $0 {start|stop|restart|logs}"
exit 1
esac
赋予执行权限:
chmod +x manage.sh
4.2 服务健康检查
验证各服务状态:
# 检查容器状态
docker ps -a
# 检查WVP-PRO日志
docker logs -f gb28181_wvp
# 测试MySQL连接
docker exec -it gb28181_mysql mysql -uroot -psecurepassword
# 测试Redis连接
docker exec -it gb28181_redis redis-cli -a redispwd
4.3 常见问题排查
-
ZLM无法推流 :
- 检查30000-35000 UDP端口是否开放
- 验证ZLM和WVP-PRO的secret配置是否一致
-
录像文件无法生成 :
- 确认
gb28181_record_volume卷已正确挂载 - 检查wvp-assist的redis配置是否正确
- 确认
-
设备注册失败 :
- 确认SIP配置中的domain和id符合GB28181规范
- 检查15060 UDP端口是否开放
5. 高级功能实现
5.1 录像管理优化
默认的录像服务可能无法满足生产环境需求,我们可以通过以下方式增强:
- 定时清理脚本 :
docker exec -it gb28181_assist bash -c "find /record -type f -mtime +7 -delete"
- 录像文件转码 :
# 在wvp-assist容器中安装ffmpeg
docker exec -it gb28181_assist apt-get update && apt-get install -y ffmpeg
5.2 性能监控方案
添加Prometheus监控:
# 在docker-compose.yml中添加
monitor:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./monitor/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- gb28181_net
对应的prometheus.yml配置:
scrape_configs:
- job_name: 'wvp'
static_configs:
- targets: ['wvp:18080']
- job_name: 'zlm'
static_configs:
- targets: ['zlm:80']
5.3 HTTPS安全加固
为管理界面启用HTTPS:
- 准备SSL证书
- 修改WVP-PRO配置:
server:
ssl:
enabled: true
key-store: classpath:keystore.jks
key-store-password: yourpassword
6. 实际应用场景
6.1 设备接入测试
典型的IPC接入流程:
- 在IPC网页配置界面设置SIP服务器地址
- 填写WVP-PRO的SIP ID和域信息
- 配置认证密码(如有)
- 保存后等待设备注册
6.2 视频流调用
获取视频流的几种方式:
- RTSP流 :
rtsp://zlm:554/{streamId} - RTMP流 :
rtmp://zlm:1935/{streamId} - FLV-H5播放 :
http://zlm:88/{streamId}.flv
6.3 录像检索与回放
通过wvp-assist接口管理录像:
- 查询录像列表:
GET http://wvp-assist:18081/api/record/list - 下载录像文件:
GET http://wvp-assist:18081/api/record/download/{fileId} - 删除录像记录:
DELETE http://wvp-assist:18081/api/record/{fileId}
7. 生产环境建议
对于需要长期运行的业务环境,建议考虑以下优化措施:
- 数据库备份策略 :
docker exec gb28181_mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" wvp' > backup.sql
- 日志轮转配置 :
# 在WVP-PRO的application.yml中添加
logging:
file:
name: logs/wvp.log
max-size: 50MB
max-history: 30
- 资源限制 :
# 在docker-compose.yml中为每个服务添加
deploy:
resources:
limits:
cpus: '1'
memory: 2G
reservations:
cpus: '0.5'
memory: 1G
- 高可用方案 :
- MySQL主从复制
- Redis哨兵模式
- ZLM集群部署
这套容器化部署方案已经在多个实际项目中验证,最大的优势在于环境的一致性和可重复性。开发团队可以轻松地在本地复现生产环境,而运维团队则能够通过简单的命令完成整个系统的启停和维护。
更多推荐

所有评论(0)