容器化部署WVP-Pro全栈指南:从零构建GB28181视频平台

在视频监控与流媒体服务领域,GB28181协议已经成为行业标准协议之一。WVP-Pro作为基于该协议的开源视频平台,能够实现设备接入、流媒体转发、录像回放等核心功能。传统部署方式需要手动安装Java、Maven、Node.js、MySQL、Redis等一系列组件,过程繁琐且容易出错。本文将展示如何通过Docker Compose实现一键式容器化部署,解决环境配置难题。

1. 环境准备与架构设计

在开始部署前,我们需要明确整个系统的架构组成。WVP-Pro的容器化部署主要包含四个核心组件:

  • WVP-Pro后端服务 :处理GB28181协议信令与业务逻辑
  • WVP-Pro前端服务 :提供Web管理界面
  • MySQL数据库 :存储设备信息、用户数据等
  • Redis缓存 :用于会话管理和临时数据存储

1.1 系统要求

推荐使用Ubuntu 22.04 LTS作为宿主机系统,硬件配置建议:

组件 最低配置 推荐配置
CPU 4核 8核
内存 8GB 16GB
存储 50GB 100GB
网络 1Gbps 1Gbps

提示:如果计划接入大量摄像头或需要高并发处理,建议增加资源配置

1.2 Docker环境安装

确保系统已安装最新版Docker和Docker Compose:

# 安装Docker
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

验证安装:

docker --version
docker-compose --version

2. Docker Compose编排文件详解

我们将使用一个精心设计的docker-compose.yml文件来管理所有服务。这个文件定义了服务之间的依赖关系、网络配置和存储策略。

2.1 完整编排文件

创建 docker-compose.yml 文件并填入以下内容:

version: '3.8'

services:
  redis:
    image: redis:6.2-alpine
    container_name: wvp-redis
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: redis-server --requirepass your_redis_password --appendonly yes
    networks:
      - wvp-network

  mysql:
    image: mysql:8.0
    container_name: wvp-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_password
      MYSQL_DATABASE: wvp
      TZ: Asia/Shanghai
      SQL_MODE: "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d
    command: 
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-time-zone=+8:00
    networks:
      - wvp-network

  wvp-pro:
    image: 648540858/wvp-pro:latest
    container_name: wvp-pro
    restart: always
    depends_on:
      - redis
      - mysql
    ports:
      - "18080:18080"
      - "5060:5060"
    volumes:
      - ./config:/app/config
    environment:
      TZ: Asia/Shanghai
      SPRING_PROFILES_ACTIVE: prod
    networks:
      - wvp-network

volumes:
  redis_data:
  mysql_data:

networks:
  wvp-network:
    driver: bridge

2.2 关键配置解析

  1. 网络配置

    • 所有服务连接到自定义的 wvp-network 网络
    • 容器间可通过服务名直接通信
  2. 数据持久化

    • Redis数据存储在 redis_data 卷中
    • MySQL数据存储在 mysql_data 卷中
  3. 初始化脚本

    • MySQL容器启动时会自动执行 ./sql 目录下的SQL文件
    • 这是初始化WVP-Pro数据库表结构的理想方式
  4. WVP-Pro配置

    • 将宿主机的 ./config 目录挂载到容器内
    • 可以方便地修改配置文件而无需重建容器

3. 服务部署与初始化

3.1 启动所有服务

执行以下命令启动整个堆栈:

docker-compose up -d

系统将按顺序启动Redis、MySQL,最后是WVP-Pro服务。可以使用以下命令查看服务状态:

docker-compose ps

3.2 数据库初始化

WVP-Pro需要特定的数据库表结构。将官方提供的SQL文件放入 sql 目录:

mkdir -p sql
wget -O sql/wvp-init.sql https://raw.githubusercontent.com/648540858/wvp-GB28181-pro/master/sql/mysql.sql
wget -O sql/wvp-update.sql https://raw.githubusercontent.com/648540858/wvp-GB28181-pro/master/sql/update.sql

MySQL容器启动时会自动执行这些SQL文件。如果需要手动执行:

docker exec -it wvp-mysql mysql -uroot -p

3.3 配置WVP-Pro

WVP-Pro的主要配置文件是 application.yml ,我们需要将其放置在 config 目录下。可以从官方仓库获取默认配置:

mkdir -p config
wget -O config/application.yml https://raw.githubusercontent.com/648540858/wvp-GB28181-pro/master/src/main/resources/all-application.yml

然后修改以下关键配置项:

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/wvp?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: your_mysql_password
  redis:
    host: redis
    port: 6379
    password: your_redis_password

4. 运维与故障排查

4.1 常用运维命令

  • 查看服务日志:

    docker-compose logs -f wvp-pro
    
  • 重启单个服务:

    docker-compose restart wvp-pro
    
  • 更新服务镜像:

    docker-compose pull wvp-pro
    docker-compose up -d
    

4.2 常见问题解决

问题1:WVP-Pro无法连接MySQL

检查步骤:

  1. 确认MySQL容器正常运行:
    docker-compose ps
    
  2. 检查WVP-Pro日志中的连接错误
  3. 验证MySQL用户名密码是否正确

问题2:Redis连接超时

解决方案:

  1. 检查Redis容器状态
  2. 确认WVP-Pro配置中的Redis密码匹配
  3. 验证网络连通性:
    docker exec -it wvp-pro ping redis
    

问题3:前端访问异常

排查方法:

  1. 检查18080端口是否暴露
  2. 查看WVP-Pro是否正常启动
  3. 验证前端静态资源是否正确加载

4.3 性能优化建议

  1. JVM调参 : 在WVP-Pro服务中添加环境变量:

    environment:
      JAVA_OPTS: "-Xms2g -Xmx4g"
    
  2. MySQL优化 : 创建自定义MySQL配置文件:

    mkdir -p mysql-conf
    echo "[mysqld]
    innodb_buffer_pool_size = 1G
    max_connections = 200" > mysql-conf/my.cnf
    

    然后在docker-compose.yml中挂载:

    volumes:
      - ./mysql-conf/my.cnf:/etc/mysql/conf.d/my.cnf
    
  3. Redis持久化 : 调整Redis的持久化策略:

    command: redis-server --requirepass your_redis_password --appendonly yes --save 60 1000
    

5. 与ZLMediaKit集成

WVP-Pro通常需要与ZLMediaKit配合使用,后者负责媒体流的处理和转发。我们也可以将ZLMediaKit容器化:

zlm:
  image: zlmediakit/zlmediakit:latest
  container_name: zlmediakit
  restart: always
  ports:
    - "1935:1935"
    - "8080:8080"
    - "554:554"
    - "10000-10050:10000-10050/udp"
  volumes:
    - ./zlm-conf/config.ini:/ZLMediaKit/conf/config.ini
  networks:
    - wvp-network

然后在WVP-Pro的配置中设置ZLMediaKit地址:

media:
  id: 34020000002000000001
  ip: 你的服务器IP
  stream:
    default-push-ip: zlm
    default-sdp-ip: zlm

这种全容器化的部署方式不仅简化了安装过程,还提高了系统的可维护性和可扩展性。当需要升级某个组件时,只需更新对应的容器镜像即可,不会影响其他服务的运行。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐