Spaces:
Sleeping
Sleeping
# ββββββββββββββββββββββββββββββββ | |
# π¨ Stage 1: Build dependencies | |
# ββββββββββββββββββββββββββββββββ | |
FROM python:3.11.11-slim AS build | |
# β±οΈ Set environment variables for pip optimization during build | |
ENV PIP_DEFAULT_TIMEOUT=100 \ | |
PYTHONUNBUFFERED=1 \ | |
PIP_DISABLE_PIP_VERSION_CHECK=1 \ | |
PIP_NO_CACHE_DIR=1 \ | |
PATH="/home/user/.local/bin:$PATH" | |
# π§ Install system dependencies needed to build Python packages | |
RUN apt-get update && apt-get install -y \ | |
build-essential \ | |
libjpeg-dev \ | |
zlib1g-dev \ | |
&& rm -rf /var/lib/apt/lists/* | |
# π€ Create non-root user | |
RUN useradd -m -u 1000 user | |
USER user | |
# π Set working directory | |
WORKDIR /app | |
# π¦ Install Python dependencies to user space | |
COPY --chown=user requirements.txt . | |
RUN pip install --no-cache-dir --user -r requirements.txt | |
# ββββββββββββββββββββββββββββββββ | |
# π Stage 2: Final image (runtime only) | |
# ββββββββββββββββββββββββββββββββ | |
FROM python:3.11.11-slim | |
# π§ Install runtime libraries (build tools tidak dibutuhkan) | |
RUN apt-get update && apt-get install -y \ | |
libjpeg-dev \ | |
zlib1g-dev \ | |
&& rm -rf /var/lib/apt/lists/* | |
# π€ Create same user again in runtime | |
RUN useradd -m -u 1000 user | |
USER user | |
# π Set runtime env | |
ENV PATH="/home/user/.local/bin:$PATH" | |
WORKDIR /app | |
# π Copy only installed packages from build stage | |
COPY --from=build /home/user/.local /home/user/.local | |
# π¦ Copy app code | |
COPY --chown=user . . | |
# π Expose port and launch | |
EXPOSE 7860 | |
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"] | |