基于WVP-Pro+Docker Compose搭建 GB28181 视频监控平台

WVP简介

WVP(WEB VIDEO PLATFORM)是一个基于GB28181-2016标准实现的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台;

WVP-Pro 平台部署

docker compose部署

准备环境

操作系统:Ubuntu 20.04 或更高版本
Docker 版本:20.10 或更高
硬件要求:至少 2 核 CPU,4GB 内存,10GB 可用存储空间

步骤 1:更新系统安装docker

  sudo apt update && sudo apt upgrade -y
  sudo apt install docker-ce  docker-compose -y

有关docker安装、源配置等请参考本人博客容器技术之Docker基础入门

步骤 2:拉取项目

git clone https://github.com/648540858/wvp-GB28181-pro.git

image

步骤 3:进入项目目录配置环境参数

image

如上对应IP地址、域、id等根据自己环境来设定即可;示例本人内网环境配置如下

root@wvp-pro-server:~/test/wvp-GB28181-pro/docker# cat .env
MediaRtmp=10001
MediaRtsp=10002
MediaRtp=10003

WebHttp=8080
WebHttps=8081

Stream_IP=192.168.112.222
SDP_IP=192.168.112.222

SIP_ShowIP=192.168.112.222
SIP_Port=8160
SIP_Domain=3502000000
SIP_Id=35020000002000000001
SIP_Password=admin123


RecordSip=true
RecordPushLive=
root@wvp-pro-server:~/test/wvp-GB28181-pro/docker# 

步骤 4:修改docker-compose.yml文件

root@wvp-pro-server:~/test/wvp-GB28181-pro/docker# pwd
/root/test/wvp-GB28181-pro/docker
root@wvp-pro-server:~/test/wvp-GB28181-pro/docker# ls
build.sh  docker-compose.yml  docker-compose.yml.bak  docker-upgrade.sh  logs  media  mysql  nginx  push.sh  README.md  redis  volumes  wvp
root@wvp-pro-server:~/test/wvp-GB28181-pro/docker# cat docker-compose.yml
version: '3'
services:
  polaris-redis:
    image: redis:latest  # 使用官方Redis镜像
    restart: unless-stopped
    healthcheck:
      test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
      interval: 15s
      timeout: 5s
      retries: 10
      start_period: 10s
    networks:
      - media-net
    # ports:
    #   - 6379:6379
    volumes:
      - ./redis/conf/redis.conf:/opt/polaris/redis/redis.conf
      - ./volumes/redis/data/:/data
    environment:
      TZ: "Asia/Shanghai"
    command: redis-server /opt/polaris/redis/redis.conf --appendonly yes

  polaris-mysql:
    image: mysql:8  # 使用官方MySQL 8镜像
    restart: unless-stopped
    healthcheck:
      test: [ "CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/3306" ]
      interval: 15s
      timeout: 5s
      retries: 10
      start_period: 10s
    networks:
      - media-net
    environment:
      MYSQL_DATABASE: wvp
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: wvp_user
      MYSQL_PASSWORD: wvp_password
      TZ: Asia/Shanghai
    # ports:
    #   - 3306:3306
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./logs/mysql:/logs
      - ./volumes/mysql/data:/var/lib/mysql  
      - ../数据库/2.7.4/初始化-mysql-2.7.4.sql:/docker-entrypoint-initdb.d/init.sql  # 初始化SQL脚本目录
    command: [
          # '--default-authentication-plugin=mysql_native_password',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_general_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]

  polaris-media:
    image: zlmediakit/zlmediakit:master  # 替换为官方镜像
    restart: always
    networks:
      - media-net
    ports:
     #- "6080:80/tcp"     # [播流]HTTP  安全考虑-非测试阶段需要注释掉,改为由nginx代理播流地址
     #- "4443:443/tcp"     # [播流]HTTPS 安全考虑-非测试阶段需要注释掉,改为由nginx代理播流地址
      - "${MediaRtmp:-10935}:${MediaRtmp:-10935}/tcp"   # [收流]RTMP  
      - "${MediaRtmp:-10935}:${MediaRtmp:-10935}/udp"   # [收流]RTMP  
     #- "41935:41935/tcp"   # [收流]RTMPS 无效
      - "${MediaRtsp:-5540}:${MediaRtsp:-5540}/tcp"     # [收流]RTSP  
      - "${MediaRtsp:-5540}:${MediaRtsp:-5540}/udp"     # [收流]RTSP  
     #- "45540:45540/tcp"   # [收流]RTSPS 无效
      - "${MediaRtp:-10000}:${MediaRtp:-10000}/tcp"   # [收流]RTP   
      - "${MediaRtp:-10000}:${MediaRtp:-10000}/udp"   # [收流]RTP   
      - "80:80"
    volumes:
      - ./volumes/video:/opt/media/bin/www/record/
      - ./logs/media:/opt/media/log/
      - ./media/config.ini:/conf/config.ini
    command: [
        'MediaServer',
        '-c', '/conf/config.ini',
        '-l', '0'
    ]

  polaris-wvp:
    # 显式指定构建上下文和Dockerfile路径
    build:
      context: ..  # 构建上下文的根路径
      dockerfile: ./docker/wvp/Dockerfile  # 相对于上下文路径的Dockerfile位置
    restart: always
    networks:
      - media-net
    ports:
      - "18978:18978"
      - "${SIP_Port:-8116}:${SIP_Port:-8116}/udp"
      - "${SIP_Port:-8116}:${SIP_Port:-8116}/tcp"
    depends_on:
      - polaris-redis
      - polaris-mysql
      - polaris-media
    volumes:
      - ./wvp/config:/opt/wvp/config
      - ./wvp/wvp/:/opt/ylcx/wvp/
      - ./logs/wvp:/opt/wvp/logs/
    environment:
      TZ: "Asia/Shanghai"
      # docker env
      RUN_ENV: "docker"
      # 流链接的IP
      Stream_IP: ${Stream_IP}
      # SDP里的IP
      SDP_IP: ${SDP_IP}
      # [可选] zlm服务器访问WVP所使用的IP, 默认使用127.0.0.1,zlm和wvp没有部署在同一台服务器时必须配置
      ZLM_HOOK_HOST: polaris-wvp
      ZLM_HOST: polaris-media
      ZLM_SERCERT: su6TiedN2rVAmBbIDX0aa0QTiBJLBdcf

      MediaHttp: ${WebHttp:-8080}
      #MediaHttps: ${WebHttps:-8081}
      MediaRtmp: ${MediaRtmp:-10935}
      MediaRtsp: ${MediaRtsp:-5540}
      MediaRtp: ${MediaRtp:-10000}

      REDIS_HOST: polaris-redis
      REDIS_PORT: 6379

      DATABASE_HOST: polaris-mysql
      DATABASE_PORT: 3306
      DATABASE_USER: wvp_user
      DATABASE_PASSWORD: wvp_password

      SIP_ShowIP: ${SIP_ShowIP}
      SIP_Port: ${SIP_Port:-8116}
      SIP_Domain: ${SIP_Domain}
      SIP_Id: ${SIP_Id}
      SIP_Password: ${SIP_Password}

      RecordSip: ${RecordSip}
      RecordPushLive: ${RecordPushLive}

  polaris-nginx:
    # 显式指定构建上下文和Dockerfile路径
    build:
      context: ..  # 构建上下文的根路径
      dockerfile: ./docker/nginx/Dockerfile  # 相对于上下文路径的Dockerfile位置
    ports:
      - "${WebHttp:-8080}:8080"
    depends_on:
      - polaris-wvp
    volumes:
      - ./nginx/templates/:/etc/nginx/templates
      - ./logs/nginx:/var/log/nginx
    environment:
      # 流链接的IP
      Stream_IP: ${Stream_IP}
    networks:
      - media-net
      
networks:
  media-net:
    driver: bridge
root@wvp-pro-server:~/test/wvp-GB28181-pro/docker# 

image

这里需要把wvp容器里的80端口暴露出来,否者会出现在线预览黑屏;

步骤 5:启动docker compose 拉起项目

root@wvp-pro-server:~/test/wvp-GB28181-pro/docker# docker compose up -d
WARN[0000] /root/test/wvp-GB28181-pro/docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 6/6
 ✔ Network docker_media-net          Created                                                                            0.1s 
 ✔ Container docker-polaris-mysql-1  Started                                                                            0.4s 
 ✔ Container docker-polaris-redis-1  Started                                                                            0.5s 
 ✔ Container docker-polaris-media-1  Started                                                                            0.7s 
 ✔ Container docker-polaris-wvp-1    Started                                                                            0.9s 
 ✔ Container docker-polaris-nginx-1  Started                                                                            1.2s 
root@wvp-pro-server:~/test/wvp-GB28181-pro/docker#

第一次启动会下载镜像,构建镜像需要耐心等待;

验证:查看对应容器是否启动?

image

通过使用docker compose ps 命令来查看对应容器的状态。如果状态都是UP说明容器启动成功;

步骤 6:访问平台

image

在浏览器访问服务器地址和端口即可;这里的端口就是我们前边用.env文件中定义的WebHttp端口;默认账号密码是admin/admin

image

步骤 7:查看sip服务器相关信息

image

登录平台找到设备接入---国标设备---接入信息;这里显示的信息,摄像头必须填写对应内容和这里一样即可;

步骤 8:登录摄像头后台设置平台相关参数

image

以海康摄像头为例,在配置---网络---高级配置---平台接入,平台接入方式选28181,本段sip端口协议保持默认5060/udp即可,勾选启用填写对应sip服务器相关信息;SIP用户用户名,和SIP用户认证ID视频通道编码ID这三个通常配置一样即可,需要注意的是第11-13需配置132或131,其他可以自己编,通常按照地市州的编码来编即可;如下

image

查看注册状态

image

如果填写对应信息后注册刷新后注册状态在线,说明对应摄像头成功注册到平台;

步骤 9:在GB28181视频平台查看监控

image

验证:查看监控

image

能够在视频平台上正常预览摄像头,说明摄像头接入平台成功;
至此基于wvp容器化搭建GB28181视频监控平台就完成了;更多项目介绍功能使用请参考官方文档https://gitee.com/pan648540858/wvp-GB28181-pro

posted @ 2026-07-14 00:40  Linux-1874  阅读(55)  评论(0)    收藏  举报