Spaces:
Sleeping
Sleeping
| # Master Dockerfile - Optimized Multi-Stage Build | |
| # This Dockerfile is fully compatible with the OpenEnv ecosystem. | |
| # It uses a standard Python base for local build compatibility while | |
| # maintaining the same professional structure as the official templates. | |
| # Stage 1: Builder | |
| # Resolves dependencies and prepare the virtual environment | |
| FROM python:3.10-slim AS builder | |
| ENV PYTHONUNBUFFERED=1 | |
| WORKDIR /app | |
| # Install uv for lightning-fast, reproducible dependency management | |
| RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates && \ | |
| curl -LsSf https://astral.sh/uv/install.sh | sh && \ | |
| mv /root/.local/bin/uv /usr/local/bin/uv && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # Copy dependency manifests | |
| COPY pyproject.toml ./ | |
| COPY uv.lock ./ | |
| # Synchronize dependencies into a standalone virtual environment (.venv) | |
| # This includes the openenv-core[core] package itself. | |
| RUN uv sync --frozen --no-install-project --no-editable | |
| # Copy the application source code | |
| COPY . . | |
| # Final sync to install the project package in the venv | |
| RUN uv sync --frozen --no-editable | |
| # Step 1.5: Automated OpenEnv Validation | |
| # This ensures the environment is valid by OpenEnv standards before final image creation. | |
| # If this fails, the build will stop, preventing invalid deployments. | |
| RUN .venv/bin/openenv validate | |
| # Stage 2: Runtime | |
| # Minimal final image containing only the application and its dependencies | |
| FROM python:3.10-slim | |
| ENV PYTHONUNBUFFERED=1 | |
| WORKDIR /app | |
| # Install socat (for port forwarding) and curl (for health checks) | |
| RUN apt-get update && apt-get install -y --no-install-recommends socat curl && rm -rf /var/lib/apt/lists/* | |
| # Copy the pre-built virtual environment from the builder stage | |
| COPY --from=builder /app/.venv /app/.venv | |
| # Copy the cleaned source code | |
| COPY --from=builder /app /app | |
| # Point PATH and PYTHONPATH to our isolated virtual environment | |
| ENV PATH="/app/.venv/bin:$PATH" | |
| ENV PYTHONPATH="/app:$PYTHONPATH" | |
| # OpenEnv standard port (Hugging Face Default) | |
| EXPOSE 7860 | |
| # Health Check to verify the FastAPI bridge is active | |
| HEALTHCHECK --interval=10s --timeout=3s --start-period=5s --retries=3 \ | |
| CMD curl -f http://127.0.0.1:7860/health || exit 1 | |
| # Start socat in the background to forward 7860 -> 8000, and start uvicorn on 8000 | |
| ENV ENABLE_WEB_INTERFACE=true | |
| CMD socat TCP-LISTEN:7860,fork,reuseaddr TCP:127.0.0.1:8000 & uvicorn server.app:app --host 0.0.0.0 --port 8000 |