1
0
mirror of https://github.com/hanxi/xiaomusic.git synced 2026-03-15 08:13:16 +08:00
Files
xiaomusic/Dockerfile
2026-01-16 01:16:20 +08:00

122 lines
3.4 KiB
Docker
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.
# 定义构建参数,用于指定架构和基础镜像
ARG PYTHON_VERSION=3.14
# 根据不同架构选择对应的基础镜像
FROM python:${PYTHON_VERSION}-alpine AS base-linux-amd64
FROM python:${PYTHON_VERSION}-alpine AS base-linux-arm64
FROM python:${PYTHON_VERSION}-bookworm AS base-linux-arm-v7
FROM python:${PYTHON_VERSION}-alpine AS run-linux-amd64
FROM python:${PYTHON_VERSION}-alpine AS run-linux-arm64
FROM python:${PYTHON_VERSION}-bookworm AS run-linux-arm-v7
FROM --platform=$BUILDPLATFORM alpine AS shelf
# 这里的逻辑是关键:接收标准的 TARGETPLATFORM (如 linux/amd64)
# 并将其转换为我们定义的别名格式 (如 linux-amd64)
ARG TARGETPLATFORM
RUN echo ${TARGETPLATFORM//\//-} > /platform_id
# 根据TARGETPLATFORM自动选择对应的builder阶段
ARG TARGETPLATFORM
FROM base-${TARGETPLATFORM//\//-} AS builder
# 安装构建依赖(根据基础镜像类型区分)
RUN if [ -f /etc/alpine-release ]; then \
# Alpine系统依赖
apk add --no-cache \
build-base \
nodejs \
npm \
zlib-dev \
jpeg-dev \
freetype-dev \
lcms2-dev \
openjpeg-dev \
tiff-dev \
libwebp-dev; \
else \
# Debian系统依赖
apt-get update && apt-get install -y --no-install-recommends \
build-essential \
nodejs \
npm \
zlib1g-dev \
libjpeg-dev \
libfreetype6-dev \
liblcms2-dev \
libopenjp2-7-dev \
libtiff5-dev \
libwebp-dev \
&& rm -rf /var/lib/apt/lists/*; \
fi
# 安装PDM
RUN pip install -U pdm
ENV PDM_CHECK_UPDATE=false
WORKDIR /app
COPY pyproject.toml README.md package.json ./
# 安装Python和Node.js依赖
RUN pdm install --prod --no-editable -v
RUN npm install --loglevel=verbose
# 复制应用代码
COPY xiaomusic/ ./xiaomusic/
COPY plugins/ ./plugins/
COPY holiday/ ./holiday/
COPY xiaomusic.py .
# -------------------------- 运行阶段 --------------------------
# 根据TARGETPLATFORM自动选择对应的runner阶段
ARG TARGETPLATFORM
FROM run-${TARGETPLATFORM//\//-} AS runner
# 安装运行时依赖区分Alpine和Debian
RUN if [ -f /etc/alpine-release ]; then \
# Alpine运行时依赖
apk add --no-cache \
ffmpeg \
nodejs \
npm; \
else \
# Debian运行时依赖
apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
nodejs \
npm \
&& rm -rf /var/lib/apt/lists/*; \
fi
# 设置工作目录
WORKDIR /app
# 从构建阶段复制产物
COPY --from=builder /app/.venv ./.venv
COPY --from=builder /app/node_modules ./node_modules/
COPY --from=builder /app/xiaomusic/ ./xiaomusic/
COPY --from=builder /app/plugins/ ./plugins/
COPY --from=builder /app/holiday/ ./holiday/
COPY --from=builder /app/xiaomusic.py .
COPY --from=builder /app/xiaomusic/__init__.py /base_version.py
COPY --from=builder /app/package.json .
# 创建FFmpeg软链接目录兼容不同系统的ffmpeg路径
RUN mkdir -p /app/ffmpeg/bin \
&& ln -s $(which ffmpeg) /app/ffmpeg/bin/ffmpeg \
&& ln -s $(which ffprobe) /app/ffmpeg/bin/ffprobe
RUN touch /app/.dockerenv
# 设置卷和暴露端口
VOLUME /app/conf
VOLUME /app/music
EXPOSE 8090
# 设置环境变量
ENV TZ=Asia/Shanghai
ENV PATH=/app/.venv/bin:/usr/local/bin:$PATH
# 直接启动xiaomusic应用
CMD ["/app/.venv/bin/python3", "/app/xiaomusic.py"]