Intrusion_Detection / Dockerfile
rajkhanke's picture
Update Dockerfile
ea153d0 verified
# ---- Stage 1: The Builder ----
# This stage installs dependencies in a clean environment.
FROM python:3.9 as builder
WORKDIR /app
# Install system build tools needed to compile some Python packages
RUN apt-get update && apt-get install -y --no-install-recommends build-essential
# Copy only the requirements file first to leverage Docker's caching
COPY requirements.txt .
# Create a virtual environment inside the builder
RUN python -m venv /opt/venv
# Activate the virtual environment
ENV PATH="/opt/venv/bin:$PATH"
# Install Python dependencies into the virtual environment
# Using --no-cache-dir keeps the layer size smaller
RUN pip install --no-cache-dir -r requirements.txt
# ---- Stage 2: The Final Production Image ----
# Use a slim base image for a smaller final size
FROM python:3.9-slim
# Set the Hugging Face port environment variable
EXPOSE 7860
ENV PORT=7860
WORKDIR /app
# Install ONLY the necessary system dependencies for running OpenCV on a headless server
# This is the key part referenced in the Hugging Face docs for OpenCV
# --- NEW AND CORRECTED CODE ---
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg \
libsm6 \
libxext6 \
libgl1 \
&& rm -rf /var/lib/apt/lists/*
# Copy the virtual environment from the builder stage
COPY --from=builder /opt/venv /opt/venv
# Copy the rest of your application code
COPY . .
# Create a non-root user for better security
RUN useradd --create-home appuser
USER appuser
# Activate the virtual environment for the final command
ENV PATH="/opt/venv/bin:$PATH"
# Command to run the application using Gunicorn (a production WSGI server)
# This is MUCH better than "python app.py" for stability and performance.
# --workers 1 --threads 8: A good starting point for a CPU-based instance.
# --timeout 0: Prevents the server from killing the long-running video stream connection.
# --bind 0.0.0.0:$PORT: Binds to all interfaces and uses the port assigned by Hugging Face.
CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "1", "--threads", "8", "--timeout", "0", "app:app"]