news 2026/6/8 22:50:10

告别繁琐配置:手把手教你用 Docker 在 Windows 上部署 wvp-GB28181-pro 和 ZLMediaKit

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别繁琐配置:手把手教你用 Docker 在 Windows 上部署 wvp-GB28181-pro 和 ZLMediaKit

Windows 容器化部署指南:wvp-GB28181-pro 与 ZLMediaKit 的黄金组合

在流媒体服务领域,GB28181-2016 标准已经成为视频监控互联互通的行业规范。传统部署方式往往需要面对复杂的依赖环境、繁琐的配置步骤和难以维护的系统架构。本文将介绍如何利用 Docker 容器技术,在 Windows 平台上快速搭建一套完整的 wvp-GB28181-pro 信令服务和 ZLMediaKit 流媒体服务组合。

1. 环境准备与基础概念

1.1 为什么选择容器化部署

传统部署方式面临三大痛点:

  • 环境污染:原生安装会向系统注入大量依赖,可能导致版本冲突
  • 配置复杂:需要手动处理多个组件的交互关系
  • 迁移困难:环境难以复制,无法保证开发与生产环境一致性

容器化方案的优势对比:

特性传统部署容器化部署
隔离性优秀
部署速度
资源占用
可移植性优秀
版本管理困难简单

1.2 系统要求

确保您的 Windows 系统满足以下条件:

  • Windows 10/11 Pro/Enterprise 或 Windows Server 2016+
  • 至少 8GB 内存(推荐 16GB)
  • 已启用 Hyper-V 和容器功能
  • Docker Desktop 4.12+ 版本

检查系统兼容性:

# 检查 Hyper-V 状态 Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V # 检查容器功能 Get-WindowsOptionalFeature -Online -FeatureName Containers

2. Docker 环境配置

2.1 安装 Docker Desktop

  1. 从 Docker 官网下载最新稳定版安装包
  2. 运行安装程序,勾选以下选项:
    • Enable WSL 2 Backend
    • Add shortcut to desktop
  3. 安装完成后重启系统

验证安装:

docker --version docker-compose --version

2.2 配置 Docker 资源

  1. 右键系统托盘 Docker 图标,选择 Settings
  2. 在 Resources 选项卡中调整:
    • CPUs: ≥4
    • Memory: ≥6GB
    • Swap: 1GB

提示:流媒体服务对内存要求较高,建议分配足够资源

3. 容器化部署方案

3.1 项目结构设计

推荐的文件目录结构:

gb28181-stack/ ├── docker-compose.yml ├── zlm/ │ ├── config/ │ │ └── config.ini │ └── logs/ ├── wvp/ │ ├── application.yml │ └── logs/ └── mysql/ └── data/

3.2 docker-compose 编排文件

创建docker-compose.yml文件:

version: '3.8' services: zlm: image: zlmediakit/zlmediakit:latest container_name: zlmediakit restart: unless-stopped ports: - "1935:1935" # RTMP - "554:554" # RTSP - "9980:9980" # HTTP - "10000:10000" # RTP volumes: - ./zlm/config:/ZLMediaKit/conf - ./zlm/logs:/ZLMediaKit/log environment: - TZ=Asia/Shanghai mysql: image: mysql:5.7 container_name: gb28181-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: gb28181@2023 MYSQL_DATABASE: wvp volumes: - ./mysql/data:/var/lib/mysql ports: - "3306:3306" wvp: image: 648540858/wvp-pro:latest container_name: wvp-pro restart: unless-stopped depends_on: - mysql - zlm ports: - "9970:9970" # Web界面 - "9960:9960" # SIP信令 volumes: - ./wvp/application.yml:/wvp/application.yml - ./wvp/logs:/wvp/logs environment: - TZ=Asia/Shanghai

3.3 配置文件定制

ZLMediaKit 配置(zlm/config/config.ini):

[http] port=9980 rootPath=/ZLMediaKit/www dirMenu=1 [rtmp] port=1935 [rtsp] port=554 [hook] enable=1 on_flow_report=http://wvp:9970/index/hook/on_flow_report on_http_access=http://wvp:9970/index/hook/on_http_access on_play=http://wvp:9970/index/hook/on_play on_publish=http://wvp:9970/index/hook/on_publish on_record_mp4=http://wvp:9970/index/hook/on_record_mp4 on_rtsp_auth=http://wvp:9970/index/hook/on_rtsp_auth on_rtsp_realm=http://wvp:9970/index/hook/on_rtsp_realm on_shell_login=http://wvp:9970/index/hook/on_shell_login on_stream_changed=http://wvp:9970/index/hook/on_stream_changed on_stream_none_reader=http://wvp:9970/index/hook/on_stream_none_reader on_stream_not_found=http://wvp:9970/index/hook/on_stream_not_found

wvp-GB28181-pro 配置(wvp/application.yml) 关键部分:

spring: datasource: url: jdbc:mysql://mysql:3306/wvp?useUnicode=true&characterEncoding=UTF8 username: root password: gb28181@2023 sip: ip: 0.0.0.0 port: 5060 domain: 3714810000 id: 3714810000200000001 media: ip: zlm http-port: 9980 secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc

4. 系统启动与验证

4.1 启动服务栈

# 进入项目目录 cd gb28181-stack # 启动所有服务 docker-compose up -d

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

# 查看ZLM日志 docker logs -f zlmediakit # 查看WVP日志 docker logs -f wvp-pro

4.2 系统验证

  1. 访问http://localhost:9970进入Web界面
  2. 使用默认账号 admin/admin 登录
  3. 在"媒体服务器"页面确认 ZLMediaKit 连接状态
  4. 测试国标设备接入流程

常见问题排查命令:

# 检查容器运行状态 docker ps -a # 检查容器网络 docker network inspect gb28181-stack_default # 进入容器内部排查 docker exec -it zlmediakit bash

5. 高级配置与优化

5.1 性能调优建议

对于生产环境,建议调整以下参数:

ZLMediaKit 优化配置

[general] flowThreshold=2048 # 流量阈值 maxStreamWaitMS=30000 # 等待流超时 [rtp] videoMtuSize=1400 # 视频MTU大小 audioMtuSize=600 # 音频MTU大小

wvp-GB28181-pro JVM 参数

在 docker-compose.yml 中为 wvp 服务添加:

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

5.2 安全加固措施

  1. 修改默认密码:

    • MySQL root 密码
    • wvp 管理员密码
    • ZLM hook secret
  2. 启用 HTTPS:

    # 在ZLM配置中 [http] sslport=443 sslCertificate=/path/to/cert.pem sslKey=/path/to/key.pem
  3. 配置防火墙规则:

    • 仅开放必要端口(5060, 9980, 9970)
    • 限制访问IP范围

5.3 监控与维护

推荐监控方案:

  • Prometheus + Grafana:监控系统资源使用情况
  • ELK Stack:集中日志管理
  • 健康检查端点
    • ZLM:http://localhost:9980/index/api/getStat
    • WVP:http://localhost:9970/index/hook/on_server_keepalive

备份策略:

# 定期备份数据库 docker exec gb28181-mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" wvp' > backup.sql # 备份配置文件 tar czvf config_backup.tar.gz zlm/config wvp/application.yml

这套容器化部署方案在实际项目中表现出色,特别是在多平台迁移和版本升级场景下。通过合理的资源配置和性能调优,单节点可支持200路以上1080P视频流的稳定传输。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 22:49:33

浏览器市场与用户画像分析

助睿实验5-1:浏览器市场与用户画像分析-数据加工(2)1 实验目的本实验基于“用户-日-浏览器-小时”明细表,完成数据大屏所需的各项统计表加工,包括:浏览器市场格局统计(覆盖率、使用时长&#xf…

作者头像 李华
网站建设 2026/6/8 22:46:08

MC68HC705J1A驱动93C56 EEPROM:Bit-Banging软件模拟SPI实战

1. 项目概述与核心价值在嵌入式开发领域,尤其是面对一些资源受限的经典8位微控制器时,我们常常会遇到一个现实问题:芯片本身没有集成硬件SPI或I2C等串行通信外设,但项目又需要使用外部的串行EEPROM来存储关键数据。这时候&#xf…

作者头像 李华
网站建设 2026/6/8 22:46:07

嵌入式低功耗实战:从Cortex-M0+睡眠模式到KM35Z75 VLLS3微安级功耗实现

1. 项目概述在电池供电的嵌入式设备开发中,如何让设备在“待机”时几乎不耗电,是每个工程师都必须面对的硬骨头。你可能已经熟悉了让MCU进入普通睡眠模式,但看着数据手册上宣称的“微安级”待机电流,自己实测却总是毫安级别&#…

作者头像 李华
网站建设 2026/6/8 22:44:12

【飞机】基于数据驱动的多传感器飞机健康监测系统附Matlab代码

​✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书…

作者头像 李华
网站建设 2026/6/8 22:43:59

Nest.js 基础-8-Hello,NestJS

这一篇使用 NestJS CLI 初始化项目,详解项目目录结构、核心配置、运行脚本,跑通第一个经典的 Hello World建立对 NestJS 项目的整体认知。一、项目初始化与整体目录概述通过 NestJS CLI 快速初始化空白项目,初始化完成后使用 VS Code 打开工程…

作者头像 李华
网站建设 2026/6/8 22:39:20

基于LPC51U68与SCTimer的I2C总线鲁棒性测试与错误注入实战

1. 项目概述 在嵌入式开发中,I2C总线因其简洁的两线制(SCL时钟线和SDA数据线)和灵活的多主从架构,成为了连接传感器、EEPROM、RTC等外设的首选协议。然而,在实际的工业环境或复杂的电磁场景下,I2C总线极易受…

作者头像 李华