保姆级教程:用Docker Compose一键部署WVP-PRO+ZLMediaKit+Assist全栈监控系统

在视频监控与流媒体服务领域,WVP-PRO(Web Video Platform)与ZLMediaKit的组合已成为开源解决方案的黄金标准。但传统部署方式需要逐个配置Redis、MySQL、ZLMediaKit、Assist和WVP-PRO五个组件,不仅耗时费力,还容易因环境差异导致各种"玄学问题"。本文将彻底改变这一局面——通过Docker Compose实现 真正的一键部署 ,让复杂系统搭建变得像喝咖啡一样简单。

1. 环境准备与架构解析

1.1 为什么选择Docker Compose方案

传统部署方式存在三大痛点:

  • 依赖管理混乱 :组件启动顺序需要人工控制
  • 配置散落各处 :每个服务都有独立的配置文件
  • 网络隔离缺失 :端口冲突风险难以避免

我们的解决方案通过以下设计解决这些问题:

version: '3.8'
services:
  redis:
    image: redis:alpine
    networks:
      - media_net
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: securepassword
    networks:
      - media_net

注:实际完整配置见后续章节

1.2 硬件需求与前置条件

建议部署环境满足:

  • CPU :4核以上(视频转码需求)
  • 内存 :8GB起步(建议16GB)
  • 存储 :SSD硬盘,至少100GB可用空间

软件环境要求:

  • Docker Engine ≥ 20.10.14
  • Docker Compose ≥ 2.5.1
  • 已开启Linux内核的IPv4转发功能

验证环境准备:

# 检查Docker版本
docker --version
# 检查Compose版本
docker compose version
# 开启IP转发(需sudo权限)
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.conf
sudo sysctl -p

2. 全栈服务配置详解

2.1 网络与存储设计

创建独立的Docker网络和持久化卷:

networks:
  media_net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16

volumes:
  mysql_data:
  redis_data:
  zlm_conf:
  zlm_www:

关键设计考量:

  • 子网隔离 :避免与主机网络冲突
  • 命名卷 :数据持久化保障
  • 带宽预留 :为视频流预留足够网络资源

2.2 核心服务配置模板

完整docker-compose.yml结构示例:

services:
  zlmediakit:
    image: zlmediakit/zlmediakit:master
    ports:
      - "1935:1935"  # RTMP
      - "8080:80"    # HTTP-FLV
    volumes:
      - zlm_conf:/opt/media/conf
      - zlm_www:/opt/media/bin/www
    networks:
      - media_net
    restart: unless-stopped

  wvp-pro:
    image: wvp-pro:latest
    depends_on:
      - mysql
      - redis
      - zlmediakit
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/wvp?useSSL=false
    ports:
      - "18080:18080"
    networks:
      - media_net

配置要点说明:

  • 端口映射 :按需开放必要端口
  • 健康检查 :增加服务可用性保障
  • 资源限制 :避免单个服务耗尽资源

3. 实战部署流程

3.1 初始化数据库

创建MySQL初始化脚本 init.sql

CREATE DATABASE IF NOT EXISTS wvp CHARACTER SET utf8mb4;
CREATE USER 'wvp_user'@'%' IDENTIFIED BY 'StrongPassword123';
GRANT ALL PRIVILEGES ON wvp.* TO 'wvp_user'@'%';
FLUSH PRIVILEGES;

通过Docker Compose挂载初始化脚本:

mysql:
  volumes:
    - ./init.sql:/docker-entrypoint-initdb.d/init.sql

3.2 一键启动与验证

启动全部服务:

docker compose up -d

验证服务状态:

# 查看容器状态
docker compose ps
# 检查日志
docker compose logs -f zlmediakit

服务健康检查端点:

  • WVP-PRO: http://localhost:18080/api/health
  • ZLMediaKit: http://localhost:8080/index/api/getServerConfig

4. 高级配置与优化

4.1 性能调优参数

ZLMediaKit关键配置( config.ini ):

[rtmp]
timeout_sec=20
[general]
max_stream_wait_ms=5000

WVP-PRO的JVM参数调整:

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

4.2 安全加固方案

网络隔离策略:

zlmediakit:
  networks:
    media_net:
      aliases:
        - media-server

访问控制列表示例:

[api]
secret=YourComplexSecretKey
allow_ips=172.28.0.0/16,192.168.1.100

4.3 监控与运维

Prometheus监控配置:

zlmediakit:
  environment:
    ENABLE_PROMETHEUS: "true"

日志收集方案:

# 查看实时日志
docker compose logs --tail=100 -f
# 日志文件轮转配置
services:
  wvp-pro:
    logging:
      options:
        max-size: "10m"
        max-file: "3"

5. 故障排查与日常维护

常见问题解决速查表:

现象 可能原因 解决方案
504 Gateway Timeout 服务依赖未就绪 检查 depends_on 条件
视频流卡顿 网络带宽不足 调整 networks 配置
数据库连接失败 认证信息错误 验证 environment 变量

日常维护命令备忘:

# 批量更新镜像
docker compose pull
# 灰度重启服务
docker compose up -d --no-deps zlmediakit
# 数据备份
docker compose exec mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" wvp' > backup.sql

遇到容器启动失败时,建议分步调试:

# 单独启动基础服务
docker compose up -d mysql redis
# 验证数据库连接
docker compose exec mysql mysql -uroot -p
# 逐步添加其他服务

更多推荐