基于Docker Compose的流媒体监控平台高效部署指南

引言

在当今快速发展的流媒体监控领域,WVP-PRO、ZLMediaKit和Assist三大组件的组合已成为行业标配。然而,传统的手动部署方式往往让开发者陷入繁琐的配置和依赖管理泥潭。本文将介绍如何利用Docker Compose这一现代化工具,实现三大组件的无缝集成与一键部署。

对于需要快速搭建流媒体监控平台的开发者而言,Docker Compose提供了三大核心优势:

  1. 环境一致性 :消除"在我机器上能运行"的经典问题
  2. 配置即代码 :所有服务配置版本化,便于团队协作
  3. 一键启停 :简化开发、测试和生产环境的切换流程

1. 环境准备与基础配置

1.1 系统要求与Docker环境

推荐使用Ubuntu 22.04 LTS作为基础操作系统,确保系统内核版本不低于5.4:

# 检查内核版本
uname -r
# 输出示例:5.15.0-76-generic

安装最新版Docker Engine和Compose插件:

# 安装Docker官方GPG密钥
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加Docker仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证安装
docker compose version
# 预期输出:Docker Compose version v2.x.x

1.2 目录结构规划

合理的目录结构是高效管理Docker Compose项目的基础:

/wvp-pro-docker/
├── docker-compose.yml        # 主配置文件
├── .env                      # 环境变量
├── zlm/
│   ├── conf/                 # ZLMediaKit配置
│   └── www/                  # Web资源
├── assist/
│   └── config/               # Assist配置
└── wvp/
    └── config/               # WVP-PRO配置

创建基础目录:

mkdir -p /opt/wvp-pro-docker/{zlm/{conf,www},assist/config,wvp/config}
cd /opt/wvp-pro-docker

2. Docker Compose核心配置

2.1 服务定义与网络架构

创建 docker-compose.yml 文件,定义三大核心服务:

version: '3.8'

services:
  zlm:
    image: zlmediakit/zlmediakit:master
    container_name: zlm
    restart: unless-stopped
    ports:
      - "1935:1935"    # RTMP
      - "8080:80"      # HTTP
      - "8443:443"     # HTTPS
      - "8554:554"     # RTSP
      - "10000:10000"  # RTP
      - "10000:10000/udp"
      - "8000:8000/udp" # WebRTC
      - "9000:9000/udp" # HLS
    volumes:
      - ./zlm/www:/opt/media/bin/www
      - ./zlm/conf:/opt/media/conf
    networks:
      - wvp-network

  assist:
    image: wvp-assist:latest
    container_name: assist
    restart: unless-stopped
    ports:
      - "18081:18081"
    volumes:
      - ./assist/config:/assist/config
    depends_on:
      - zlm
    networks:
      - wvp-network

  wvp-pro:
    image: wvp-pro:latest
    container_name: wvp-pro
    restart: unless-stopped
    ports:
      - "18080:18080"  # Web管理界面
      - "5060:5060"    # SIP
      - "15060:15060"  # API
    volumes:
      - ./wvp/config:/wvp/config
    depends_on:
      - zlm
      - assist
    networks:
      - wvp-network

networks:
  wvp-network:
    driver: bridge

2.2 关键配置详解

端口映射策略

服务 端口 协议 用途
ZLM 1935 TCP RTMP流媒体接收
8080 TCP HTTP API接口
10000 UDP RTP媒体传输
WVP-PRO 18080 TCP 管理后台
5060 TCP/UDP SIP信令

卷挂载最佳实践

  1. 配置文件 :所有服务的配置文件都应挂载到宿主机,便于修改和版本控制
  2. 媒体文件 :建议单独挂载大容量存储卷用于媒体存储
  3. 日志文件 :可将日志目录挂载出来便于排查问题

3. 高级配置与优化

3.1 环境变量管理

创建 .env 文件统一管理敏感信息:

# 数据库配置
MYSQL_ROOT_PASSWORD=securepassword
MYSQL_DATABASE=wvp_pro
MYSQL_USER=wvp_user
MYSQL_PASSWORD=userpassword

# Redis配置
REDIS_PASSWORD=redispass

# WVP-PRO管理员账号
ADMIN_USER=admin
ADMIN_PASSWORD=strongpassword

更新 docker-compose.yml 引用环境变量:

environment:
  - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
  - MYSQL_DATABASE=${MYSQL_DATABASE}
  - MYSQL_USER=${MYSQL_USER}
  - MYSQL_PASSWORD=${MYSQL_PASSWORD}
  - REDIS_PASSWORD=${REDIS_PASSWORD}

3.2 资源限制与健康检查

为关键服务添加资源限制和健康检查:

zlm:
  deploy:
    resources:
      limits:
        cpus: '2'
        memory: 2G
      reservations:
        memory: 1G
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:8080/index/api/getServerConfig"]
    interval: 30s
    timeout: 10s
    retries: 3

4. 部署实战与问题排查

4.1 一键启动与停止

启动所有服务:

docker compose up -d

查看服务状态:

docker compose ps

停止服务:

docker compose down

4.2 常见问题解决方案

端口冲突问题

# 检查端口占用
sudo netstat -tulnp | grep <端口号>

# 解决方案:
# 1. 修改docker-compose.yml中的端口映射
# 2. 停止占用端口的服务

服务启动顺序问题

depends_on:
  zlm:
    condition: service_healthy
  redis:
    condition: service_started

日志查看技巧

# 查看实时日志
docker compose logs -f

# 过滤特定服务的日志
docker compose logs zlm | grep "关键信息"

# 导出日志到文件
docker compose logs --no-color > wvp-deploy.log

5. 生产环境优化建议

5.1 性能调优参数

zlm/conf/config.ini 中添加:

[rtp]
timeoutSec=3600
portRange=30000-35000

[hook]
enable_flow_report=1
on_flow_report=http://assist:18081/api/v1/flow_report

5.2 监控与告警配置

使用cAdvisor+Prometheus+Grafana监控方案:

monitoring:
  image: gcr.io/cadvisor/cadvisor:v0.47.0
  container_name: cadvisor
  ports:
    - "8088:8080"
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
  networks:
    - wvp-network

5.3 备份与恢复策略

创建备份脚本 backup.sh

#!/bin/bash
BACKUP_DIR="/backups/wvp-$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

# 备份配置文件
cp -r /opt/wvp-pro-docker/{zlm,assist,wvp} $BACKUP_DIR

# 备份数据库
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $BACKUP_DIR/all-databases.sql

# 压缩备份
tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR

更多推荐