避坑指南:用Docker Compose一键部署WVP-Pro+MySQL+Redis,告别环境配置烦恼
容器化部署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 关键配置解析
-
网络配置 :
- 所有服务连接到自定义的
wvp-network网络 - 容器间可通过服务名直接通信
- 所有服务连接到自定义的
-
数据持久化 :
- Redis数据存储在
redis_data卷中 - MySQL数据存储在
mysql_data卷中
- Redis数据存储在
-
初始化脚本 :
- MySQL容器启动时会自动执行
./sql目录下的SQL文件 - 这是初始化WVP-Pro数据库表结构的理想方式
- MySQL容器启动时会自动执行
-
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
检查步骤:
- 确认MySQL容器正常运行:
docker-compose ps - 检查WVP-Pro日志中的连接错误
- 验证MySQL用户名密码是否正确
问题2:Redis连接超时
解决方案:
- 检查Redis容器状态
- 确认WVP-Pro配置中的Redis密码匹配
- 验证网络连通性:
docker exec -it wvp-pro ping redis
问题3:前端访问异常
排查方法:
- 检查18080端口是否暴露
- 查看WVP-Pro是否正常启动
- 验证前端静态资源是否正确加载
4.3 性能优化建议
-
JVM调参 : 在WVP-Pro服务中添加环境变量:
environment: JAVA_OPTS: "-Xms2g -Xmx4g" -
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 -
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
这种全容器化的部署方式不仅简化了安装过程,还提高了系统的可维护性和可扩展性。当需要升级某个组件时,只需更新对应的容器镜像即可,不会影响其他服务的运行。
更多推荐



所有评论(0)