快速测试-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
相关推荐
四季豆33几秒前
全球大数据产业发展观察:机遇与合规挑战并存
大数据
罗***S5 分钟前
从短住到长住:酒店与服务式公寓的管理差异,远不止入住天数
大数据·公寓管理·长短租酒店管理·长短租一体化
电子制造自留地21 分钟前
无人机PCB板设计要点:振动、阻抗与散热的工程考量
大数据·科技·无人机·制造·科普
塔望品牌咨询24 分钟前
食品品牌BC联动的结构化方法:从招商配称、消费者指名到终端动销
大数据
玩美数据33 分钟前
全球化本地化大数据调研解决方案是什么?主要包含哪些核心能力?
大数据
dadaobusi1 小时前
一周AI与IC资讯汇总-2026.10.19
搜索引擎
注塑机数据采集联网1 小时前
注塑机数据采集网关读取注塑机工艺/SPC数据计算原理
大数据·网络·数据仓库·物联网·智能路由器·制造
ClouGence1 小时前
开源数据库管理工具 CloudDM 新版本上线,新增 AI SQL 助手,支持 Elasticsearch、崖山数据库
数据库·sql·elasticsearch
数据与AI工程手记1 小时前
数据治理落地为什么这么难?
大数据
本原财经1 小时前
大厂争霸AI办公:个人Agent和AI硬件哪个才是答案?
大数据·人工智能