# ============================================ # HYC下载站 v2.2 - 多架构交叉编译 Dockerfile # 支持: amd64, arm64, arm/v7, i386 # 使用: docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t hyc:v2.2 . # ============================================ # ============================================ # 构建阶段 - 所有架构通用 # ============================================ FROM python:3.11-alpine AS builder # 安装构建依赖 (按架构) ARG TARGETARCH RUN case "$TARGETARCH" in \ amd64|x86_64) ARCH_OPTS="-march=x86-64" ;; \ arm64|aarch64) ARCH_OPTS="-march=armv8-a" ;; \ armv7|arm) ARCH_OPTS="-march=armv7-a" ;; \ i386|i686) ARCH_OPTS="-march=i686" ;; \ *) ARCH_OPTS="-march=native" ;; \ esac && \ apk add --no-cache \ python3 \ py3-pip \ gcc \ musl-dev \ libffi-dev \ openssl-dev \ cargo \ rust # 创建优化编译的虚拟环境 ENV VENV=/opt/venv ENV CFLAGS="$ARCH_OPTS" ENV CXXFLAGS="$ARCH_OPTS" ENV LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" RUN python3 -m venv $VENV && \ $VENV/bin/pip install --upgrade pip wheel # 安装依赖 COPY requirements.txt /tmp/requirements.txt RUN $VENV/bin/pip install --no-cache-dir \ --platform manylinux2014_${TARGETARCH} \ --only-binary=:all: \ -r /tmp/requirements.txt 2>/dev/null || \ $VENV/bin/pip install --no-cache-dir -r /tmp/requirements.txt # ============================================ # 运行阶段 - 按架构选择基础镜像 # ============================================ # amd64 FROM --platform=$TARGETOS/$TARGETARCH alpine:3.19 AS runner-amd64 COPY --from=builder /opt/venv /opt/venv COPY --from=builder /app /app CMD ["/opt/venv/bin/python", "/app/main.py"] # arm64 FROM --platform=$TARGETOS/$TARGETARCH alpine:3.19 AS runner-arm64 COPY --from=builder /opt/venv /opt/venv COPY --from=builder /app /app CMD ["/opt/venv/bin/python", "/app/main.py"] # arm/v7 FROM --platform=$TARGETOS/$TARGETARCH alpine:3.19 AS runner-armv7 COPY --from=builder /opt/venv /opt/venv COPY --from=builder /app /app CMD ["/opt/venv/bin/python", "/app/main.py"] # i386 FROM --platform=$TARGETOS/$TARGETARCH alpine:3.19 AS runner-i386 COPY --from=builder /opt/venv /opt/venv COPY --from=builder /app /app CMD ["/opt/venv/bin/python", "/app/main.py"] # ============================================ # 最终清单镜像 # ============================================ FROM --platform=$TARGETOS/$TARGETARCH alpine:3.19 AS final # 安装运行时依赖 RUN apk add --no-cache \ libffi \ openssl \ libstdc++ \ tzdata \ && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone # 创建用户 RUN adduser -D -s /bin/sh hyc # 复制虚拟环境 COPY --from=builder --chown=hyc:hyc /opt/venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # 复制应用 COPY --chown=hyc:hyc main.py . COPY --chown=hyc:hyc settings.json . COPY --chown=hyc:hyc requirements.txt . COPY --chown=hyc:hyc core/ ./core/ COPY --chown=hyc:hyc api/ ./api/ COPY --chown=hyc:hyc handlers/ ./handlers/ COPY --chown=hyc:hyc mirrors/ ./mirrors/ COPY --chown=hyc:hyc scripts/ ./scripts/ # 创建数据目录 RUN mkdir -p /data /downloads && chown -R hyc:hyc /data /downloads USER hyc VOLUME ["/data", "/downloads"] EXPOSE 8080 # 低内存模式 ENV HYC_LOW_MEMORY=1 ENV HYC_WORKERS=1 ENV PYTHONOPTIMIZE=2 ENV PYTHONDONTWRITEBYTECODE=1 HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8080/api/v1/health')" || exit 1 CMD ["python", "main.py", \ "--host", "0.0.0.0", \ "--port", "8080", \ "--memory-limit", "256M"]