# Hugging Face Spaces 优化的 Dockerfile for grok2api # 基于官方项目适配,支持 Persistent Storage FROM python:3.13-slim-bookworm AS builder # 安装构建依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ curl \ git \ && rm -rf /var/lib/apt/lists/* # 安装 uv(快速的 Python 包管理器) COPY --from=ghcr.io/astral-sh/uv:0.6 /uv /uvx /bin/ WORKDIR /app # 复制项目文件 COPY pyproject.toml uv.lock* ./ # 创建虚拟环境并安装依赖 RUN uv venv /opt/venv && \ . /opt/venv/bin/activate && \ uv pip install --no-cache-dir -r pyproject.toml # ============================================================================ # 运行时镜像 # ============================================================================ FROM python:3.13-slim-bookworm # 安装运行时依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ wget \ libstdc++6 \ libcurl4 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # 从构建阶段复制虚拟环境 COPY --from=builder /opt/venv /opt/venv # 复制应用代码 COPY app ./app COPY scripts ./scripts COPY config.defaults.toml ./ COPY pyproject.toml ./ # 创建必要的目录 # /data 用于 Hugging Face Persistent Storage RUN mkdir -p /data /app/logs && \ chmod +x /app/scripts/entrypoint.sh /app/scripts/init_storage.sh # 设置 Python 路径 ENV PATH="/opt/venv/bin:$PATH" \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 # 暴露端口 EXPOSE 8000 # 健康检查 HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ CMD wget -qO /dev/null http://127.0.0.1:8000/health || exit 1 # 启动脚本 ENTRYPOINT ["/app/scripts/entrypoint.sh"] CMD ["sh", "-c", "exec python -m granian --interface asgi --host 0.0.0.0 --port 8000 --workers 1 app.main:app"]