# syntax=docker/dockerfile:1.7 FROM node:22-alpine AS frontend-builder WORKDIR /build COPY frontend/package.json frontend/package-lock.json* ./ # No package-lock.json is tracked yet (we don't run npm locally per # feedback-no-local-runs), so `npm install` instead of `npm ci`. Flip to # `npm ci` once a lockfile is committed. RUN npm install --no-audit --no-fund COPY frontend/ ./ RUN npm run build FROM python:3.14-slim AS runtime ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 # System deps: ffmpeg (transcode + thumbnails, FC-2), unar (archives, FC-2), # libpq for psycopg, postgresql-client + zstd for FC-5 backup/restore # (pg_dump + tar --zstd), image libs, megatools (mega.nz public-link downloads # for off-platform file-host links, #830 — `megatools dl`; Debian-native, no # external MEGA apt repo needed). RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ unar \ libpq5 \ postgresql-client \ zstd \ megatools \ libjpeg62-turbo \ libwebp7 \ libpng16-16 \ ca-certificates \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt ./ RUN pip install -r requirements.txt COPY backend/ ./backend/ COPY alembic/ ./alembic/ COPY alembic.ini ./ COPY entrypoint.sh ./ RUN chmod +x entrypoint.sh COPY --from=frontend-builder /build/dist ./frontend/dist EXPOSE 8080 ENTRYPOINT ["./entrypoint.sh"] CMD ["web"]