FROM node:20-bookworm-slim AS frontend-builder WORKDIR /src/frontend COPY frontend/package*.json ./ RUN npm ci COPY frontend/ ./ ARG VITE_API_BASE=. ENV VITE_API_BASE=${VITE_API_BASE} RUN npm run build FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ BROWSER_PATH=/usr/bin/chromium RUN apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ chromium \ fonts-liberation \ gdal-bin \ libgdal-dev \ libgbm1 \ libgeos-dev \ libnss3 \ libproj-dev \ proj-bin \ proj-data \ libspatialindex-dev && \ rm -rf /var/lib/apt/lists/* WORKDIR /app/backend COPY backend/requirements.txt ./ RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt COPY backend/ ./ COPY --from=frontend-builder /src/frontend/dist /app/frontend/dist RUN useradd -m -u 1000 user && \ chown -R user:user /app USER user EXPOSE 7860 CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-7860}"]