零配置实战:基于Docker Compose的流媒体监控平台全栈部署指南

在视频监控与流媒体技术快速普及的今天,搭建一个功能完整的监控测试环境已成为开发者和运维人员的刚需。传统部署方式需要逐个配置Redis、MySQL、ZLM、WVP-PRO和Assist服务,不仅步骤繁琐,还容易因环境差异导致各种"玄学"问题。本文将带你用Docker Compose实现 真正的一键部署 ,从零开始构建高可用的流媒体监控平台。

1. 环境准备与架构解析

1.1 为什么选择Docker Compose方案

相比原始的手动 docker run 部署方式,Compose方案具有三大核心优势:

  • 原子化部署 :所有服务依赖关系和启动顺序通过YAML文件定义,消除人工操作误差
  • 配置版本化 :将服务器环境转化为代码,方便迁移和版本管理
  • 资源隔离 :每个服务拥有独立的网络命名空间,避免端口冲突

典型应用场景包括:

  • 本地开发测试环境快速搭建
  • 自动化CI/CD流水线集成
  • 生产环境的容器化部署

1.2 系统资源需求

建议部署主机满足以下配置:

资源类型 最低要求 推荐配置
CPU 2核 4核
内存 4GB 8GB
磁盘 20GB 50GB
系统 Ubuntu 20.04+ Ubuntu 22.04 LTS

提示:流媒体服务对UDP端口有较高要求,确保防火墙放行相关端口范围

2. 全栈Docker Compose配置详解

2.1 基础服务配置

创建 docker-compose.yml 文件,首先定义MySQL和Redis服务:

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: wvp-mysql
    environment:
      MYSQL_ROOT_PASSWORD: securepassword
      MYSQL_DATABASE: wvp_db
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      timeout: 10s
      retries: 3

  redis:
    image: redis:7
    container_name: wvp-redis
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    restart: unless-stopped

2.2 流媒体核心服务集成

添加ZLMediaKit服务配置,注意挂载配置文件:

  zlm:
    image: zlmediakit/zlmediakit:master
    container_name: zlmediakit
    ports:
      - "1935:1935"   # RTMP
      - "8080:80"     # HTTP
      - "8443:443"    # HTTPS
      - "554:554"     # RTSP
      - "10000:10000" # RTP over TCP
      - "10000:10000/udp"
      - "8000:8000/udp"
      - "9000:9000/udp"
    volumes:
      - ./zlm/conf:/opt/media/conf
      - ./zlm/www:/opt/media/bin/www
    depends_on:
      - redis
    restart: unless-stopped

关键配置说明:

  • ports 段暴露了RTMP、RTSP、HTTP等协议端口
  • volumes 将配置文件和静态资源目录挂载到宿主机
  • depends_on 确保Redis服务先启动

2.3 应用服务配置

WVP-PRO和Assist服务的完整配置:

  wvp-assist:
    image: wvp-assist:latest
    container_name: wvp-assist
    ports:
      - "18081:18081"
    volumes:
      - ./assist:/assist
    command: /bin/bash -c "cd /assist && ./start1.sh"
    depends_on:
      - mysql
      - redis
    restart: unless-stopped

  wvp-pro:
    image: wvp-pro:latest
    container_name: wvp-pro
    ports:
      - "18080:18080"
      - "5060:5060"
      - "15060:15060"
    volumes:
      - ./wvp:/wvp
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/wvp_db
      - SPRING_REDIS_HOST=redis
    depends_on:
      - mysql
      - redis
      - zlm
      - wvp-assist
    restart: unless-stopped

volumes:
  mysql_data:
  redis_data:

3. 配置优化与调优技巧

3.1 网络性能优化

在Compose文件中添加自定义网络配置:

networks:
  wvp-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16

然后为每个服务添加:

    networks:
      - wvp-net

优化效果:

  • 容器间通信走内部网络,降低延迟
  • 避免端口冲突
  • 方便服务发现(可直接使用容器名访问)

3.2 资源限制配置

防止单个服务占用过多资源:

    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 1G

3.3 日志管理方案

推荐配置日志轮转和集中收集:

    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

4. 实战部署与运维

4.1 一键启动与停止

启动全部服务(后台模式):

docker-compose up -d

查看服务状态:

docker-compose ps

停止服务并清理:

docker-compose down

4.2 常见问题排查

Q1:服务启动顺序导致依赖问题

解决方案:

docker-compose up -d mysql redis
sleep 30  # 等待数据库初始化
docker-compose up -d

Q2:端口冲突

检查占用情况:

netstat -tulnp | grep -E '18080|1935|6379|3306'

Q3:配置文件热更新

修改配置文件后无需重建容器:

docker-compose restart zlm

4.3 生产环境建议

  1. 使用 .env 文件管理敏感信息:

    MYSQL_ROOT_PASSWORD=complex_password_123
    REDIS_PASSWORD=another_secure_pass
    
  2. 启用TLS加密通信

  3. 配置定期备份策略

  4. 实现监控告警系统

5. 进阶扩展方案

5.1 集群化部署

通过修改 docker-compose.yml 实现水平扩展:

  zlm:
    deploy:
      replicas: 3

5.2 CI/CD集成示例

.gitlab-ci.yml 片段:

deploy:
  stage: deploy
  script:
    - docker-compose -f docker-compose.prod.yml up -d --build
  only:
    - master

5.3 性能监控配置

Prometheus监控示例:

  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

配套的 prometheus.yml 配置:

scrape_configs:
  - job_name: 'wvp'
    static_configs:
      - targets: ['zlm:8080', 'wvp-pro:18080']

更多推荐