# Stage 1: Build stage FROM python:3.11-slim AS build # Set the working directory in the container WORKDIR /app # Install build tools and libraries RUN apt-get update && apt-get install -y \ build-essential \ libffi-dev \ libssl-dev \ python3-dev \ cargo \ g++ \ curl \ libjpeg-dev \ zlib1g-dev \ && rm -rf /var/lib/apt/lists/* # Install Rust RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH="/root/.cargo/bin:${PATH}" # Upgrade pip to the latest version RUN pip install --upgrade pip # Copy the current directory contents into the container at /app COPY . /app # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Stage 2: Runtime stage FROM python:3.11-slim # Set the working directory in the container WORKDIR /app # Install runtime dependencies RUN apt-get update && apt-get install -y \ libffi-dev \ libssl-dev \ g++ \ curl \ libjpeg-dev \ zlib1g-dev \ && rm -rf /var/lib/apt/lists/* # Install Rust RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y ENV PATH="/root/.cargo/bin:${PATH}" # Copy only the necessary files from the build stage COPY --from=build /app /app COPY --from=build /root/.cargo /root/.cargo # Install Gunicorn and other Python dependencies COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt RUN pip install gunicorn RUN apt-get update && apt-get install -y libreoffice poppler-utils # Make port 5000 available to the world outside this container EXPOSE 5000 # Run the clear_db script, then the initialization script, and then Gunicorn CMD ["sh", "-c", "python clear_db.py && python init_db.py && gunicorn -w 4 -b 0.0.0.0:5000 app:app"]