FROM python:3.13-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ TZ=Asia/Shanghai \ VIRTUAL_ENV=/app/.venv \ PATH=/app/.venv/bin:/root/.local/bin:$PATH \ SERVER_HOST=0.0.0.0 \ SERVER_PORT=7860 \ SERVER_WORKERS=1 \ DATA_DIR=/data \ LOG_DIR=/data/logs WORKDIR /app EXPOSE 7860 RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ curl \ ca-certificates \ git \ libffi-dev \ libssl-dev \ && rm -rf /var/lib/apt/lists/* COPY --from=ghcr.io/astral-sh/uv:0.6.17 /uv /uvx /bin/ RUN git clone --depth 1 https://github.com/chenyme/grok2api.git /tmp/src \ && cp /tmp/src/pyproject.toml /app/pyproject.toml \ && cp /tmp/src/uv.lock /app/uv.lock \ && uv sync --frozen --no-dev --no-install-project \ && cp -r /tmp/src/app /app/app \ && cp /tmp/src/config.defaults.toml /app/config.defaults.toml \ && rm -rf /tmp/src COPY start.sh /app/start.sh RUN chmod +x /app/start.sh \ && mkdir -p /data /data/logs ENTRYPOINT ["/app/start.sh"] CMD ["granian", "--interface", "asgi", "--host", "0.0.0.0", "--port", "7860", "--workers", "1", "app.main:app"]