add media构建

This commit is contained in:
孙小云 2025-12-07 12:58:53 +08:00
parent 548ed256da
commit b3438f9dcf
6 changed files with 227 additions and 7 deletions

View File

@ -54,7 +54,7 @@ services:
]
polaris-media:
image: ${REGISTRY}zlmediakit/zlmediakit:latest # 替换为官方镜像
image: ${REGISTRY}polaris-media:latest # 替换为官方镜像
restart: always
networks:
- media-net

View File

@ -33,8 +33,8 @@ RUN apt-get update && \
RUN mkdir -p /opt/media
WORKDIR /opt/media
RUN git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit && \
cd ZLMediaKit && git submodule update --init
# 使用本地复制的 ZLM 代码(由 build.sh 复制到当前目录)
COPY ZLM /opt/media/ZLMediaKit
# 3rdpart init
WORKDIR /opt/media/ZLMediaKit/3rdpart

View File

@ -0,0 +1,89 @@
FROM registry.t-aaron.com/ubuntu:20.04 AS build
#shell,rtmp,rtsp,rtsps,http,rtp
EXPOSE 10935/tcp
EXPOSE 5540/tcp
EXPOSE 6080/tcp
EXPOSE 10000/udp
EXPOSE 10000/tcp
EXPOSE 8000/udp
EXPOSE 8000/tcp
EXPOSE 9000/udp
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" \
apt-get install -y --no-install-recommends \
build-essential \
cmake \
git \
curl \
vim \
wget \
ca-certificates \
tzdata \
libssl-dev \
gcc \
g++ \
gdb && \
apt-get autoremove -y && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p /opt/media
WORKDIR /opt/media
# 使用本地 ZLM 代码
COPY ZLM /opt/media/ZLMediaKit
# 3rdpart init
WORKDIR /opt/media/ZLMediaKit/3rdpart
RUN wget https://polaris-tian-generic.pkg.coding.net/qt/dependencies/openssl-1.1.1k.tar.gz?version=latest -O openssl-1.1.1k.tar.gz && \
tar -xvzf openssl-1.1.1k.tar.gz && \
cd openssl-1.1.1k && ./config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl && \
make && make install && \
echo "/usr/local/lib64/" >> /etc/ld.so.conf && \
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf && \
ldconfig && \
ln -s /usr/local/openssl/bin/openssl /usr/local/bin/openssl
WORKDIR /opt/media/ZLMediaKit/3rdpart
RUN wget https://github.com/cisco/libsrtp/archive/v2.3.0.tar.gz -O libsrtp-2.3.0.tar.gz && \
tar xfv libsrtp-2.3.0.tar.gz && \
mv libsrtp-2.3.0 libsrtp && \
cd libsrtp && ./configure --enable-openssl --with-openssl-dir=/usr/local/openssl && make -j $(nproc) && make install
WORKDIR /opt/media/ZLMediaKit/build
RUN cmake .. -DENABLE_WEBRTC=true -DOPENSSL_ROOT_DIR=/usr/local/openssl -DOPENSSL_LIBRARIES=/usr/local/openssl/lib && \
cmake --build . --target MediaServer
COPY docker/media/config.ini /opt/media/ZLMediaKit/release/linux/Debug/
FROM registry.t-aaron.com/ubuntu:20.04
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" \
apt-get install -y --no-install-recommends \
vim \
wget \
ca-certificates \
tzdata \
curl \
libssl-dev \
ffmpeg \
gcc \
g++ \
gdb && \
apt-get autoremove -y && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/*
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone && \
mkdir -p /opt/media/bin/www
WORKDIR /opt/media/bin/
COPY --from=build /opt/media/ZLMediaKit/release/linux/Debug/MediaServer /opt/media/ZLMediaKit/default.pem /opt/media/bin/
COPY --from=build /opt/media/ZLMediaKit/release/linux/Debug/config.ini /opt/media/conf/
COPY --from=build /opt/media/ZLMediaKit/www/ /opt/media/bin/www/
ENV PATH /opt/media/bin:$PATH
CMD ["./MediaServer","-s", "default.pem", "-c", "../conf/config.ini", "-l","0"]

View File

@ -0,0 +1,75 @@
#!/bin/bash
# 构建并推送 media 镜像到私有仓库
# 使用方法: 在 docker/media 目录下执行 ./build-and-push-media.sh
set -e
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 项目根目录(脚本所在目录的上两级)
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
# 配置变量
REGISTRY="registry.t-aaron.com"
IMAGE_NAME="polaris-media"
VERSION="latest"
PLATFORM="linux/amd64"
DOCKERFILE="Dockerfile.registry"
# 完整镜像名称
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${VERSION}"
echo "=========================================="
echo "开始构建 ZLMediaKit 镜像"
echo "=========================================="
echo "脚本目录: ${SCRIPT_DIR}"
echo "项目根目录: ${PROJECT_ROOT}"
echo "镜像名称: ${FULL_IMAGE_NAME}"
echo "平台架构: ${PLATFORM}"
echo "Dockerfile: ${SCRIPT_DIR}/${DOCKERFILE}"
echo "=========================================="
# 检查 Dockerfile 是否存在
if [ ! -f "${SCRIPT_DIR}/${DOCKERFILE}" ]; then
echo "错误: 未找到 Dockerfile: ${SCRIPT_DIR}/${DOCKERFILE}"
exit 1
fi
# 检查 ZLM 目录是否存在
if [ ! -d "${PROJECT_ROOT}/ZLM" ]; then
echo "错误: ZLM 目录不存在: ${PROJECT_ROOT}/ZLM"
exit 1
fi
# 检查 ZLM 源码是否完整
if [ ! -d "${PROJECT_ROOT}/ZLM/3rdpart/ZLToolKit/src" ]; then
echo "错误: ZLM 源码不完整,请确保 3rdpart 目录下的依赖库存在"
exit 1
fi
# 检查 buildx 是否可用
if ! docker buildx version &> /dev/null; then
echo "错误: docker buildx 不可用"
echo "请先安装 docker buildx"
exit 1
fi
# 切换到项目根目录作为构建上下文
cd "${PROJECT_ROOT}"
# 构建并推送镜像
echo ""
echo "开始构建镜像..."
docker buildx build \
--platform ${PLATFORM} \
-t ${FULL_IMAGE_NAME} \
-f docker/media/${DOCKERFILE} \
--push \
.
echo ""
echo "=========================================="
echo "构建完成!"
echo "镜像已推送到: ${FULL_IMAGE_NAME}"
echo "=========================================="

View File

@ -1,8 +1,47 @@
#/bin/bash
#!/bin/bash
set -e
version=2.7.3
version=latest
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
echo "=========================================="
echo "开始构建 ZLMediaKit Docker 镜像"
echo "=========================================="
# 检查 ZLM 目录是否存在
if [ ! -d "${PROJECT_ROOT}/ZLM" ]; then
echo "错误: ZLM 目录不存在: ${PROJECT_ROOT}/ZLM"
exit 1
fi
# 检查 ZLM 源码是否完整
if [ ! -d "${PROJECT_ROOT}/ZLM/3rdpart/ZLToolKit/src" ]; then
echo "错误: ZLM 源码不完整,请确保 3rdpart 目录下的依赖库存在"
exit 1
fi
# 清理旧的 ZLM 目录(如果存在)
if [ -d "${SCRIPT_DIR}/ZLM" ]; then
echo "清理旧的 ZLM 目录..."
rm -rf "${SCRIPT_DIR}/ZLM"
fi
# 复制 ZLM 目录到 media 目录
echo "复制 ZLM 源码到构建目录..."
cp -r "${PROJECT_ROOT}/ZLM" "${SCRIPT_DIR}/ZLM"
echo "开始构建 Docker 镜像..."
docker build -t polaris-media:${version} .
docker tag polaris-media:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-media:${version}
docker tag polaris-media:${version} polaris-tian-docker.pkg.coding.net/qt/polaris/polaris-media:latest
# 构建完成后清理
echo "清理构建目录..."
rm -rf "${SCRIPT_DIR}/ZLM"
echo "=========================================="
echo "构建完成!"
echo "镜像: polaris-media:${version}"
echo "=========================================="

View File

@ -46,6 +46,23 @@ docker login registry.t-aaron.com
步骤3推送第三方镜像到私有仓库
# ===== ubuntu:20.04 =====
# 备份本地 arm64 镜像
docker tag ubuntu:20.04 ubuntu:20.04-backup
# 拉取 amd64 版本
docker pull --platform linux/amd64 ubuntu:20.04
# 推送到私有仓库
docker tag ubuntu:20.04 registry.t-aaron.com/ubuntu:20.04
docker push registry.t-aaron.com/ubuntu:20.04
# 恢复本地 arm64 版本
docker rmi ubuntu:20.04
docker tag ubuntu:20.04-backup ubuntu:20.04
docker rmi ubuntu:20.04-backup
# ===== ubuntu:24.04 =====
# 备份本地 arm64 镜像
docker tag ubuntu:24.04 ubuntu:24.04-backup