Spaces:
Sleeping
Sleeping
| # Hugging Face Spaces Dockerfile for https://github.com/chenyme/grok2api | |
| # | |
| # Spaces routes traffic to port 7860 by default. The upstream project defaults | |
| # to 8000, so this image overrides SERVER_PORT and starts Granian on 7860. | |
| FROM python:3.13-slim AS builder | |
| ENV PYTHONDONTWRITEBYTECODE=1 \ | |
| PYTHONUNBUFFERED=1 \ | |
| UV_PROJECT_ENVIRONMENT=/opt/venv \ | |
| PATH="/opt/venv/bin:/root/.local/bin:$PATH" | |
| WORKDIR /src | |
| ARG GROK2API_REPO=https://github.com/chenyme/grok2api.git | |
| ARG GROK2API_REF=main | |
| RUN apt-get update \ | |
| && apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| ca-certificates \ | |
| curl \ | |
| git \ | |
| libffi-dev \ | |
| libssl-dev \ | |
| pkg-config \ | |
| && rm -rf /var/lib/apt/lists/* | |
| COPY --from=ghcr.io/astral-sh/uv:0.6 /uv /uvx /usr/local/bin/ | |
| RUN git clone --depth 1 --branch "${GROK2API_REF}" "${GROK2API_REPO}" . \ | |
| && uv sync --frozen --no-dev --no-install-project \ | |
| && find /opt/venv -type d \( -name "__pycache__" -o -name "tests" -o -name "test" -o -name "testing" \) -prune -exec rm -rf {} + \ | |
| && find /opt/venv -type f -name "*.pyc" -delete \ | |
| && rm -rf /root/.cache /tmp/uv-cache | |
| FROM python:3.13-slim | |
| ENV PYTHONDONTWRITEBYTECODE=1 \ | |
| PYTHONUNBUFFERED=1 \ | |
| TZ=Asia/Shanghai \ | |
| VIRTUAL_ENV=/opt/venv \ | |
| PATH="/opt/venv/bin:$PATH" \ | |
| SERVER_HOST=0.0.0.0 \ | |
| SERVER_PORT=7860 \ | |
| SERVER_WORKERS=1 \ | |
| DATA_DIR=/app/data \ | |
| LOG_DIR=/app/logs | |
| RUN apt-get update \ | |
| && apt-get install -y --no-install-recommends \ | |
| ca-certificates \ | |
| tzdata \ | |
| && rm -rf /var/lib/apt/lists/* \ | |
| && useradd -m -u 1000 user | |
| WORKDIR /app | |
| COPY --from=builder --chown=user:user /opt/venv /opt/venv | |
| COPY --from=builder --chown=user:user /src /app | |
| RUN mkdir -p /app/data /app/logs \ | |
| && chmod +x /app/scripts/entrypoint.sh /app/scripts/init_storage.sh \ | |
| && chown -R user:user /app | |
| USER user | |
| EXPOSE 7860 | |
| HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \ | |
| CMD python -c "import os, urllib.request; urllib.request.urlopen(f'http://127.0.0.1:{os.environ.get(\"SERVER_PORT\", \"7860\")}/health', timeout=5).read()" || exit 1 | |
| ENTRYPOINT ["/app/scripts/entrypoint.sh"] | |
| CMD ["sh", "-c", "exec granian --interface asgi --host ${SERVER_HOST} --port ${SERVER_PORT} --workers ${SERVER_WORKERS} app.main:app"] | |