快速测试-ZLMediaKit

更新

已优化至https://github.com/zhuyifeiRuichuang/ZLMediaKit

此仓库内置了更完善的GitHub action,可实现自动编译打包代码,自动构建容器镜像,自动部署测试,提供了docker compose和k8s环境标准部署配置,可本地稳定复现部署。可随时同步上游代码更新且稳定制作新版本。支持定制开发后手动触发打包。

注意:

此方法由workbuddy+hy3+专家工具"Dockerfile生成专家" 生成。

项目https://github.com/ZLMediaKit/ZLMediaKit

快速测试打包和部署

使用docker compose环境

bash 复制代码
# 拉取项目代码
git clone https://github.com/ZLMediaKit/ZLMediaKit
# 进入项目目录
cd ZLMediaKit

创建文件Dockerfile

bash 复制代码
# syntax=docker/dockerfile:1
# ============================================================================
# ZLMediaKit 生产级 Dockerfile(多阶段构建)
# 仓库: https://github.com/zhuyifeiRuichuang/ZLMediaKit
#
# 构建说明:
#   1. 主仓库从 GitHub 拉取;子模块(ZLToolKit/media-server/jsoncpp 等)
#      托管在 gitee.com,构建机必须可访问 gitee.com。
#   2. 如需改用「本地源码」构建,把 builder 阶段的 git clone 段替换为:
#        COPY . /src
#      并确保本地已执行 git submodule update --init --recursive。
#   3. 推荐开启 BuildKit:  DOCKER_BUILDKIT=1 docker build ...
# ============================================================================

############################################################
# 阶段一:构建(编译 MediaServer)
############################################################
FROM ubuntu:22.04 AS builder

# ---- 构建参数(可复现 / 可覆盖)----
ARG ZLM_GIT_URL=https://github.com/zhuyifeiRuichuang/ZLMediaKit.git
ARG ZLM_BRANCH=master
ARG ZLM_COMMIT=
ARG CMAKE_BUILD_TYPE=Release
ARG ENABLE_WEBRTC=ON
ARG ENABLE_OPENSSL=ON
ARG ENABLE_MP4=ON
ARG ENABLE_HLS=ON
ARG ENABLE_SRT=ON
ARG ENABLE_API=ON
ARG ENABLE_TESTS=OFF

ENV DEBIAN_FRONTEND=noninteractive

# ---- 构建依赖 ----
# build-essential : gcc/g++/make
# cmake/pkg-config: 构建系统(ubuntu22.04 自带 cmake 3.22,满足 >=3.1.3)
# libssl-dev      : HTTPS/WSS/RTSPS/RTMPS/WebRTC 加密传输
# libsrtp2-dev    : WebRTC 必需的 SRTP 库(项目未内置,必须系统提供,否则 WebRTC 被自动关闭)
# git             : 拉取代码与子模块
# ccache          : 加速重复构建
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    apt-get update && \
    apt-get install -y --no-install-recommends \
        build-essential \
        cmake \
        pkg-config \
        git \
        ccache \
        libssl-dev \
        libsrtp2-dev && \
    rm -rf /var/lib/apt/lists/*

# 启用 ccache 加速(配合下方 cache mount)
ENV PATH="/usr/lib/ccache:${PATH}" \
    CCACHE_DIR=/root/.ccache

WORKDIR /src

# ---- 拉取源码与子模块 ----
# 注意: 子模块来自 gitee.com,需网络可达
RUN git clone --branch=${ZLM_BRANCH} --single-branch ${ZLM_GIT_URL} . && \
    if [ -n "${ZLM_COMMIT}" ]; then git checkout -q ${ZLM_COMMIT}; fi && \
    git submodule update --init --recursive

# ---- 配置与编译 ----
# 构建产物位于 release/linux/${CMAKE_BUILD_TYPE}/,已包含
# MediaServer、config.ini、www/、default.pem 等运行时所需文件
RUN --mount=type=cache,target=/root/.ccache \
    cmake -S . -B build \
        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
        -DENABLE_WEBRTC=${ENABLE_WEBRTC} \
        -DENABLE_OPENSSL=${ENABLE_OPENSSL} \
        -DENABLE_MP4=${ENABLE_MP4} \
        -DENABLE_HLS=${ENABLE_HLS} \
        -DENABLE_SRT=${ENABLE_SRT} \
        -DENABLE_API=${ENABLE_API} \
        -DENABLE_TESTS=${ENABLE_TESTS} && \
    cmake --build build --target MediaServer -j"$(nproc)"

############################################################
# 阶段二:运行(最小运行时)
############################################################
FROM debian:bookworm-slim AS runtime

ENV DEBIAN_FRONTEND=noninteractive

# ---- 运行时依赖 ----
# libssl3      : OpenSSL(HTTPS/WSS/RTSPS 等)
# libsrtp2-1   : WebRTC SRTP(与构建期 libsrtp2-dev 版本对应)
# ca-certificates: 出站 HTTPS / 可选管理后台
# curl         : 健康检查
# libcap2-bin  : 为二进制赋予绑定特权端口(<1024)的能力,从而可「非 root」运行
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    apt-get update && \
    apt-get install -y --no-install-recommends \
        libssl3 \
        libsrtp2-1 \
        ca-certificates \
        curl \
        libcap2-bin && \
    rm -rf /var/lib/apt/lists/*

# 创建非 root 用户
RUN groupadd -r zlm && \
    useradd -r -g zlm -s /usr/sbin/nologin -d /opt/zlmediakit zlm

# 拷贝构建产物(二进制 + 配置 + www + 默认证书)
COPY --from=builder /src/release/linux/Release/ /opt/zlmediakit/

WORKDIR /opt/zlmediakit

# 赋予绑定特权端口能力,使非 root 也能监听 80/443/554;
# 随后将目录归属非 root 用户
RUN chown -R zlm:zlm /opt/zlmediakit && \
    setcap 'cap_net_bind_service=+ep' /opt/zlmediakit/MediaServer

USER zlm

# ---- 暴露默认端口 ----
# TCP : HTTP(80) HTTPS(443) RTSP(554) RTMP(1935) RTC(8000) 可选(10000)
# UDP : RTC 媒体(8000) 可选(10000)
# 端口均可在 config.ini 中修改,修改后需同步调整下方 EXPOSE 与容器端口映射
EXPOSE 80/tcp 443/tcp 554/tcp 1935/tcp 8000/tcp 10000/tcp \
       8000/udp 10000/udp

# ---- 健康检查 ----
# 探测内置 HTTP 服务是否就绪(返回任意 HTTP 状态码即视为存活,
# 不依赖 api.secret)。如修改了 HTTP 端口,请同步修改此处地址。
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
    CMD curl -s -o /dev/null --max-time 4 http://127.0.0.1/ || exit 1

# 前台运行;可用 -c 指定配置,或用卷挂载覆盖 ./config.ini
# 示例: docker run ... zlmediakit:local -c /opt/zlmediakit/config.ini
ENTRYPOINT ["./MediaServer"]
CMD []

创建文件docker-compose.yml

bash 复制代码
services:
  zlmediakit:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        ZLM_BRANCH: master
        # ZLM_COMMIT: ""        # 如需锁定到特定 commit,取消注释并填入
        ENABLE_WEBRTC: "ON"
    image: zlmediakit:local
    container_name: zlmediakit
    restart: unless-stopped
    ports:
      - "80:80"            # HTTP
      - "443:443"          # HTTPS
      - "554:554"          # RTSP
      - "1935:1935"        # RTMP
      - "8000:8000"        # WebRTC TCP
      - "8000:8000/udp"    # WebRTC UDP
      - "10000:10000"      # 可选业务端口
      - "10000:10000/udp"  # 可选业务端口
    volumes:
      # 挂载自定义配置(推荐):将宿主机 config.ini 覆盖容器内配置
      - ./config.ini:/opt/zlmediakit/config.ini:ro
      # 持久化录像/截图等写目录(按需,注意路径需与 config.ini 中配置一致)
      # - ./record:/opt/zlmediakit/www/record
    healthcheck:
      test: ["CMD", "curl", "-fsS", "-o", "/dev/null", "http://127.0.0.1/"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 15s

部署并自动构建

bash 复制代码
docker compose up -d
相关推荐
计算机源码社1 小时前
【27届大数据毕设】基于Spark的TikTok短视频属性分享与互动比率可视化分析系统 基于机器学习的TikTok短视频认证属性与互动效能关联分析
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
腾讯云大数据1 小时前
腾讯云数据智能体TCDataAgent升级:大数据平台不只“给人用”,也要“给Agent用”
大数据·云计算·腾讯云
IT研究室1 小时前
最新大数据毕业设计选题推荐-基于大数据的生活指数分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计
实验室管理云平台1 小时前
北京盛元广通:专注动物福利与科研设备研发
大数据·科技
智能RPA1 小时前
智能体自动化平台与法务合同管理平台对比评测
大数据·人工智能·自动化·agent·rpa
Elastic 中国社区官方博客1 小时前
使用 NVIDIA cuVS 在 Elasticsearch 中实现 GPU 加速的向量索引:在 10 分钟内处理 1.38 亿个向量
大数据·数据库·elasticsearch·搜索引擎·全文检索·安全威胁分析
问商十三载3 小时前
GEO优化有用吗?基于检索与信源机制的有效性分析
大数据·人工智能·机器学习
ha_lydms10 小时前
MaxCompute中加密与解密函数
大数据·数据库·数据仓库·hadoop·dataworks·maxcompute·odps
文慧的科技江湖11 小时前
《从算力能源各玩各的到全套跑通:算电协同 + Token 全栈方案落地实战》
大数据·重卡充电桩系统·慧知重卡充电桩平台·慧知重卡充电桩系统