FROM python:3.12-slim
 
# Set environment variables

ENV PYTHONDONTWRITEBYTECODE=1 \

    PYTHONUNBUFFERED=1
 
WORKDIR /app
 
# Install system and build dependencies

RUN apt-get update && apt-get install -y --no-install-recommends \

    gcc \

    python3-dev \

    build-essential \

    unixodbc \

    unixodbc-dev \

    libxml2-dev \

    libxslt1-dev \

    libxmlsec1-dev \

    libxmlsec1-openssl \

    pkg-config \

    libssl-dev \

    curl \

    gnupg \

    ca-certificates \
&& curl -sSL https://packages.microsoft.com/keys/microsoft.asc \

        | gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg \
&& echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/debian/$(. /etc/os-release && echo \"$VERSION_ID\")/prod $(. /etc/os-release && echo \"$VERSION_CODENAME\") main" \
> /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql18 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
 
# Upgrade pip and install python packages (some from source)

RUN pip install --upgrade pip setuptools wheel \
&& pip install --no-binary=:all: lxml xmlsec
 
# Copy only requirements first to leverage Docker cache

COPY requirements.txt .
 
RUN pip install --no-cache-dir -r requirements.txt
 
# Copy rest of the application

COPY . .
 
# Copy .env file (optional — if you want to include it in image — or mount externally)

COPY .env .env
 
# Expose app port

EXPOSE 8000
 
# Default command

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--proxy-headers"]

 
