FROM node:22-bookworm-slim AS frontend WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --registry=https://registry.npmjs.org COPY tsconfig.json vite.config.ts ./ COPY frontend ./frontend ARG VITE_AG_GRID_LICENSE_KEY="" ENV VITE_AG_GRID_LICENSE_KEY=$VITE_AG_GRID_LICENSE_KEY RUN npm run build FROM ghcr.io/astral-sh/uv:0.10.12 AS uv FROM python:3.12-slim-bookworm COPY --from=uv /uv /usr/local/bin/uv WORKDIR /app ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 UV_COMPILE_BYTECODE=1 PATH="/app/.venv/bin:$PATH" COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev COPY manage.py ./ COPY server ./server COPY finance ./finance COPY --from=frontend /app/frontend/dist ./frontend/dist RUN mkdir -p /app/var/uploads && python manage.py collectstatic --noinput && useradd --uid 10001 --create-home app && chown -R app:app /app/var USER app EXPOSE 8000 CMD ["gunicorn", "server.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3", "--threads", "2", "--timeout", "120", "--access-logfile", "-", "--error-logfile", "-"]