# Build context is the repo root (docker build -f deploy/Dockerfile .) # --- Frontend build stage --- FROM node:20-slim AS frontend-build WORKDIR /build COPY frontend/package.json frontend/package-lock.json ./ RUN npm ci --include=dev COPY frontend/ ./ RUN npx vite build # --- Backend + runtime stage --- FROM python:3.11-slim WORKDIR /app # Install Python deps COPY backend/pyproject.toml ./ COPY backend/ten31portal/ ./ten31portal/ COPY backend/alembic/ ./alembic/ COPY backend/alembic.ini ./ RUN pip install --no-cache-dir . # Copy built frontend COPY --from=frontend-build /build/dist ./static/ # Startup script COPY deploy/start.sh ./start.sh RUN chmod +x ./start.sh # Data volume mount point RUN mkdir -p /data ENV TEN31_DB_PATH=/data/portal.db ENV TEN31_SESSION_SECRET=*** EXPOSE 8000 CMD ["./start.sh"]