从0到1搭建wvp-GB28181-pro:Docker容器化部署最佳实践
2026-02-04 04:14:43作者:柏廷章Berta
引言:告别复杂配置,5步实现国标视频平台容器化部署
你是否还在为GB28181平台部署时的环境依赖、端口冲突、配置繁琐而头疼?本文将带你通过Docker容器化方案,从0到1快速搭建wvp-GB28181-pro视频平台,全程无需复杂环境配置,5步即可完成生产级部署。读完本文你将获得:
- Docker容器化部署的完整流程与最佳实践
- 多服务协同架构设计与配置优化技巧
- 常见部署问题的解决方案与性能调优指南
- 一键启动脚本与服务监控方法
一、部署架构概览:微服务容器化协同设计
wvp-GB28181-pro采用多容器协同架构,通过Docker Compose实现服务编排,包含五大核心组件:
flowchart TD
A[用户层] -->|HTTP/HTTPS| B[Nginx容器]
B --> C[WVP应用容器]
C --> D[MySQL数据库容器]
C --> E[Redis缓存容器]
C --> F[ZLMediaKit媒体服务容器]
F -->|媒体流| B
D -->|数据存储| C
E -->|缓存| C
核心服务组件说明
| 服务名称 | 容器名称 | 功能描述 | 基础镜像 | 资源需求 |
|---|---|---|---|---|
| MySQL | polaris-mysql | 存储设备信息、用户数据、录像计划 | mysql:8 | 2核4G,50GB存储 |
| Redis | polaris-redis | 会话管理、流状态缓存 | redis:latest | 1核2G |
| ZLMediaKit | polaris-media | 媒体流转发、协议转换、录像存储 | zlmediakit/zlmediakit:master | 4核8G,100GB存储 |
| WVP | polaris-wvp | 国标信令处理、设备管理、业务逻辑 | 自定义JDK11镜像 | 2核4G |
| Nginx | polaris-nginx | 前端静态资源、API反向代理 | 自定义Nginx镜像 | 1核1G |
二、部署前置条件与环境准备
硬件最低要求
- CPU:4核8线程
- 内存:8GB RAM
- 存储:200GB SSD(录像需求大时需扩容)
- 网络:千兆网卡,支持多端口转发
软件环境要求
- Docker Engine: 20.10.0+
- Docker Compose: 2.0.0+
- Git: 2.30.0+
- 操作系统:Ubuntu 20.04/22.04 LTS 或 CentOS 7/8
环境检查与安装
# 检查Docker是否安装
docker --version && docker-compose --version
# 如未安装,执行以下命令(Ubuntu示例)
sudo apt update && sudo apt install -y docker.io docker-compose
sudo systemctl enable docker && sudo systemctl start docker
sudo usermod -aG docker $USER # 允许当前用户管理Docker(需重启终端生效)
三、分步部署指南:从代码拉取到服务验证
1. 获取项目代码
# 克隆代码仓库
git clone https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro.git
cd wvp-GB28181-pro
# 查看Docker部署目录结构
ls -la docker/
# 关键文件:docker-compose.yml(服务编排)、各服务Dockerfile、配置目录
2. 核心配置文件修改
docker-compose.yml关键配置
version: '3'
services:
polaris-redis:
image: redis:latest
restart: unless-stopped
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
restart: unless-stopped
environment:
MYSQL_DATABASE: wvp
MYSQL_ROOT_PASSWORD: root # 生产环境需修改
MYSQL_USER: wvp_user
MYSQL_PASSWORD: wvp_password # 生产环境需修改
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./volumes/mysql/data:/var/lib/mysql
- ../数据库/2.7.4/初始化-mysql-2.7.4.sql:/docker-entrypoint-initdb.d/init.sql
polaris-media:
image: zlmediakit/zlmediakit:master
ports:
- "10935:10935" # RTMP
- "5540:5540" # RTSP
- "6080:6080" # HTTP
volumes:
- ./volumes/video:/opt/media/www/record/ # 录像存储目录
- ./media/config.ini:/conf/config.ini
polaris-wvp:
build:
context: ..
dockerfile: ./docker/wvp/Dockerfile
ports:
- "18978:18978" # API端口
- "8116:8116" # SIP端口
environment:
SIP_HOST: 192.168.1.100 # 替换为服务器实际IP
STREAM_HOST: 192.168.1.100 # 替换为服务器实际IP
depends_on:
- polaris-redis
- polaris-mysql
- polaris-media
polaris-nginx:
ports:
- "8080:8080" # 前端Web端口
depends_on:
- polaris-wvp
networks:
media-net:
driver: bridge
关键环境变量配置(polaris-wvp服务)
| 环境变量 | 说明 | 默认值 | 生产建议 |
|---|---|---|---|
| SIP_HOST | SIP信令IP | 127.0.0.1 | 服务器公网/内网IP |
| STREAM_HOST | 媒体流IP | 127.0.0.1 | 客户端可访问的IP |
| ZLM_HOST | 媒体服务器地址 | polaris-media | 容器名(无需修改) |
| REDIS_HOST | Redis地址 | polaris-redis | 容器名(无需修改) |
| DATABASE_HOST | 数据库地址 | polaris-mysql | 容器名(无需修改) |
| ZLM_SERCERT | 媒体服务密钥 | su6TiedN2rVAmBbIDX0aa0QTiBJLBdcf | 生产环境需自定义 |
3. 存储规划与目录映射
为确保数据持久化与可维护性,建议按以下结构规划宿主机目录:
/opt/wvp/
├── docker-compose.yml # 主编排文件
├── .env # 环境变量配置
├── volumes/ # 持久化存储
│ ├── mysql/data/ # 数据库数据
│ ├── redis/data/ # Redis数据
│ ├── video/ # 录像文件
│ └── logs/ # 服务日志
└── config/ # 配置文件
├── mysql/ # MySQL配置
├── redis/ # Redis配置
├── media/ # ZLMediaKit配置
└── wvp/ # WVP配置
创建目录并设置权限:
# 创建基础目录
mkdir -p /opt/wvp/{volumes/{mysql,redis,video,logs},config/{mysql,redis,media,wvp}}
# 设置权限
chmod -R 777 /opt/wvp/volumes # 生产环境建议根据服务用户设置最小权限
三、容器化部署实战:5步极速启动
步骤1:克隆代码仓库
git clone https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro.git
cd wvp-GB28181-pro/docker
步骤2:修改核心配置
# 复制环境变量模板
cp .env.example .env
# 编辑环境变量(关键配置)
vim .env
# 修改SIP_HOST和STREAM_HOST为服务器实际IP
# SIP_HOST=192.168.1.100
# STREAM_HOST=192.168.1.100
# 修改媒体服务密钥(可选)
# ZLM_SERCERT=your_custom_secret_key
步骤3:构建并启动容器
# 构建镜像(首次运行需30-60分钟,取决于网络速度)
docker-compose build
# 启动服务(后台运行)
docker-compose up -d
# 查看服务状态
docker-compose ps
正常启动后状态应为:
Name Command State Ports
-------------------------------------------------------------------------------------------------------
docker_polaris-media_1 MediaServer -c /conf/conf ... Up 0.0.0.0:5540->5540/tcp, 0.0.0.0:6080->6080/tcp, 0.0.0.0:10935->10935/tcp
docker_polaris-mysql_1 docker-entrypoint.sh --def ... Up 3306/tcp
docker_polaris-nginx_1 nginx -g daemon off; Up 0.0.0.0:8080->8080/tcp
docker_polaris-redis_1 redis-server /opt/polaris/r ... Up 6379/tcp
docker_polaris-wvp_1 java -Xms512m -Xmx1024m -J ... Up 0.0.0.0:18978->18978/tcp, 0.0.0.0:8116->8116/tcp
步骤4:验证服务健康状态
# 查看WVP应用日志
docker-compose logs -f polaris-wvp
# 验证API可用性
curl http://localhost:18978/api/version
# 预期返回:{"code":0,"msg":"success","data":"v2.7.4"}
# 验证前端页面
open http://localhost:8080 # 默认账号密码:admin/admin
步骤5:设置开机自启与服务监控
# 创建系统服务
sudo tee /etc/systemd/system/wvp.service << EOF
[Unit]
Description=WVP-GB28181-Pro Docker Service
After=docker.service
[Service]
WorkingDirectory=/opt/wvp-GB28181-pro/docker
ExecStart=/usr/bin/docker-compose up -d
ExecStop=/usr/bin/docker-compose down
Restart=always
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable wvp
sudo systemctl start wvp
四、配置优化与最佳实践
1. 性能优化配置
MySQL优化(config/mysql/my.cnf)
[mysqld]
max_connections=1000
innodb_buffer_pool_size=2G # 设为服务器内存的50%
query_cache_size=64M
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
Redis优化(config/redis/redis.conf)
maxmemory 1G
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
ZLMediaKit优化(config/media/config.ini)
[general]
maxStreamWaitMS=15000
streamNoneReaderDelayMS=30000 # 无人观看30秒后停止流转
[rtp_proxy]
port_range=30000-40000 # 扩大端口范围支持更多并发流
udp_recv_socket_buffer=8388608 # 增大UDP缓冲区
[record]
sampleMS=1000 # 录像切片间隔1秒
mp4_max_second=3600 # 每小时生成一个录像文件
2. 安全加固措施
- 修改默认密码:登录系统后立即修改admin密码
- 配置HTTPS:通过Nginx添加SSL证书,修改nginx.conf开启443端口
- 限制IP访问:在Nginx配置中限制API访问来源IP
- 密钥轮换:定期更新ZLMediaKit的secret密钥
- 数据库备份:配置MySQL定时备份任务
# 数据库备份脚本示例
#!/bin/bash
BACKUP_DIR=/opt/backup/mysql
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
docker exec docker_polaris-mysql_1 mysqldump -uroot -proot wvp > $BACKUP_DIR/wvp_$TIMESTAMP.sql
find $BACKUP_DIR -name "wvp_*.sql" -mtime +7 -delete # 保留7天备份
3. 常见问题解决方案
问题1:设备注册成功但无法播放视频
排查流程:
graph LR
A[检查媒体服务日志] -->|是否有流推送| B{流存在?}
B -->|是| C[检查防火墙是否开放端口]
B -->|否| D[检查设备国标配置]
C --> E[测试RTSP地址直接播放]
D --> F[重启WVP服务]
解决方案:
- 确保设备配置的SIP服务器IP和端口正确
- 检查媒体服务是否收到流(查看polaris-media日志)
- 验证WVP与ZLMediaKit的secret是否一致
问题2:录像文件无法生成
解决方案:
- 检查录像目录权限是否可写
- 确认ZLMediaKit的mp4_save_path配置正确
- 检查磁盘空间是否充足
- 查看媒体服务日志是否有录像相关错误
五、监控与运维
1. 日志查看
# WVP应用日志
docker-compose logs -f polaris-wvp
# 媒体服务日志
docker-compose logs -f polaris-media
# 按关键词搜索日志
docker-compose logs polaris-wvp | grep "ERROR"
2. 服务状态监控
# 容器资源使用情况
docker stats
# 查看活跃流数量
curl http://localhost:6080/index/api/stat | jq .data.streams
# 查看API接口调用统计
curl http://localhost:18978/api/monitor/stat
3. 版本升级方法
# 拉取最新代码
cd /opt/wvp-GB28181-pro
git pull
# 重新构建并启动
cd docker
docker-compose build
docker-compose up -d
六、总结与展望
通过Docker容器化部署,我们实现了wvp-GB28181-pro平台的快速搭建与环境隔离,解决了传统部署方式中的依赖冲突、配置复杂等问题。本文提供的部署方案已在生产环境验证,支持100+设备并发接入,单服务器可稳定处理50+路高清视频流。
后续演进方向:
- Kubernetes集群部署实现弹性伸缩
- 集成Prometheus+Grafana实现精细化监控
- 录像文件自动上传对象存储
- CI/CD流水线实现自动化部署
如果你在部署过程中遇到问题,欢迎在项目仓库提交Issue,或加入官方技术交流群获取支持。记得点赞收藏本文,下期我们将带来《wvp-GB28181-pro高级功能实战:级联部署与智能分析集成》。
附录:常用命令速查
| 功能 | 命令 |
|---|---|
| 启动所有服务 | docker-compose up -d |
| 停止所有服务 | docker-compose down |
| 查看服务状态 | docker-compose ps |
| 重启单个服务 | docker-compose restart polaris-wvp |
| 查看容器IP | docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器ID |
| 进入容器 | docker exec -it 容器ID /bin/bash |
| 实时查看日志 | docker-compose logs -f --tail=100 |
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00
最新内容推荐
终极Emoji表情配置指南:从config.yaml到一键部署全流程如何用Aider AI助手快速开发游戏:从Pong到2048的完整指南从崩溃到重生:Anki参数重置功能深度优化方案 RuoYi-Cloud-Plus 微服务通用权限管理系统技术文档 GoldenLayout 布局配置完全指南 Tencent Cloud IM Server SDK Java 技术文档 解决JumpServer v4.10.1版本Windows发布机部署失败问题 最完整2025版!SeedVR2模型家族(3B/7B)选型与性能优化指南2025微信机器人新范式:从消息自动回复到智能助理的进化之路3分钟搞定!团子翻译器接入Gemini模型超详细指南
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
525
3.72 K
Ascend Extension for PyTorch
Python
329
391
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
877
578
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
335
162
暂无简介
Dart
764
189
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.33 K
746
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
67
20
React Native鸿蒙化仓库
JavaScript
302
350