ZLMediaKit/dockerfile_py
夏楚 56f2cfba7c
Some checks are pending
Android / build (push) Waiting to run
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
Docker / build (push) Waiting to run
DockerPy / build (push) Waiting to run
Linux / build (push) Waiting to run
Linux_Python / build (push) Waiting to run
macOS / build (push) Waiting to run
macOS_Python / build (push) Waiting to run
Windows / build (push) Waiting to run
Windows_Python / build (push) Waiting to run
Change echo to printf for config.ini update
2026-04-20 10:51:39 +08:00

131 lines
4.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

FROM ubuntu:24.04 AS build
#shell,rtmp,rtsp,rtsps,http,https,rtp
EXPOSE 1935/tcp
EXPOSE 554/tcp
EXPOSE 80/tcp
EXPOSE 443/tcp
EXPOSE 10000/udp
EXPOSE 10000/tcp
EXPOSE 8000/udp
EXPOSE 8000/tcp
EXPOSE 9000/udp
# 设置环境变量,避免交互提示
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
git \
build-essential \
cmake \
curl \
unzip \
zip \
nasm \
autoconf \
automake \
libtool \
autoconf-archive \
pkg-config \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libswscale-dev \
libavfilter-dev \
python3 \
python3-dev \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/ZLMediaKit/pymkui.git /opt/media/ZLMediaKit/pymkui
# 克隆 vcpkg 并编译
RUN git clone https://github.com/microsoft/vcpkg.git /opt/vcpkg \
&& /opt/vcpkg/bootstrap-vcpkg.sh
# 将 vcpkg 路径加入环境变量
ENV PATH="/opt/vcpkg:$PATH"
ENV VCPKG_ROOT=/opt/vcpkg
ENV CMAKE_TOOLCHAIN_FILE=/opt/vcpkg/scripts/buildsystems/vcpkg.cmake
# 自动选择 tripletx64-linux 或 arm64-linux
RUN ARCH=$(dpkg --print-architecture) && \
if [ "$ARCH" = "amd64" ]; then \
TRIPLET="x64-linux"; \
elif [ "$ARCH" = "arm64" ]; then \
TRIPLET="arm64-linux"; \
else \
echo "Unsupported architecture: $ARCH" && exit 1; \
fi && \
echo "Using vcpkg triplet: $TRIPLET" && \
/opt/vcpkg/vcpkg install jemalloc openssl libsrtp[openssl] --triplet $TRIPLET-dynamic
RUN mkdir -p /opt/media
COPY . /opt/media/ZLMediaKit
WORKDIR /opt/media/ZLMediaKit
RUN mkdir -p build release/linux/Release/lib
# 根据 dpkg 架构选择 vcpkg 动态库路径
RUN ARCH=$(dpkg --print-architecture) && \
if [ "$ARCH" = "amd64" ]; then VCPKG_LIB_PATH="/opt/vcpkg/installed/x64-linux-dynamic/lib"; \
elif [ "$ARCH" = "arm64" ]; then VCPKG_LIB_PATH="/opt/vcpkg/installed/arm64-linux-dynamic/lib"; \
else echo "Unsupported architecture: $ARCH" && exit 1; fi && \
echo "Copying libs from $VCPKG_LIB_PATH" && \
cp -rfP $VCPKG_LIB_PATH/* release/linux/Release/lib/
WORKDIR /opt/media/ZLMediaKit/build
RUN ARCH=$(dpkg --print-architecture) && \
if [ "$ARCH" = "amd64" ]; then TRIPLET="x64-linux"; \
elif [ "$ARCH" = "arm64" ]; then TRIPLET="arm64-linux"; \
else echo "Unsupported architecture: $ARCH" && exit 1; fi && \
echo "Using vcpkg triplet: $TRIPLET" && \
cmake -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} \
-DVCPKG_TARGET_TRIPLET=${TRIPLET}-dynamic \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_PYTHON=ON \
-DPython3_EXECUTABLE=$(which python3) \
-DENABLE_WEBRTC=ON -DENABLE_FFMPEG=ON \
-DENABLE_TESTS=OFF -DENABLE_API=OFF .. && \
make -j $(nproc)
FROM ubuntu:24.04
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" \
apt-get install -y --no-install-recommends \
ca-certificates \
tzdata \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libswscale-dev \
libavfilter-dev \
ffmpeg \
python3 \
python3-dev \
python3-pip && \
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 && mkdir -p /opt/media/bin/lib
WORKDIR /opt/media/bin/
COPY --from=build /opt/media/ZLMediaKit/release/linux/Release/MediaServer /opt/media/ZLMediaKit/default.pem /opt/media/bin/
COPY --from=build /opt/media/ZLMediaKit/release/linux/Release/lib /opt/media/bin/lib
COPY --from=build /opt/media/ZLMediaKit/release/linux/Release/config.ini /opt/media/conf/
RUN printf "\n[python]\nplugin=mk_plugin\n" >> /opt/media/conf/config.ini
COPY --from=build /opt/media/ZLMediaKit/www/ /opt/media/bin/www/
COPY --from=build /opt/media/ZLMediaKit/pymkui /opt/media/bin/pymkui
RUN pip3 install --no-cache-dir --break-system-packages -r /opt/media/bin/pymkui/backend/requirements.txt
ENV PATH="/opt/media/bin:$PATH"
ENV PYTHONPATH="/opt/media/bin/pymkui/backend"
ENV LD_LIBRARY_PATH="/opt/media/bin/lib"
CMD ["./MediaServer","-s", "default.pem", "-c", "../conf/config.ini", "-l","1"]