Files
br-acc/Dockerfile
Davi Rezende d889569a78 feat(ci): add docker-ci workflow for GHCR and optional image-based deploy (#47)
* feat(ci): add docker-ci workflow for Buildx and GHCR push

* refactor(docker): use per-service builds in root docker-compose

* refactor(etl): use uv and uv.lock in ETL Dockerfile

* fix(api): add uv.lock to API Dockerfile for reproducible builds

* feat(deploy): add optional GHCR image pull and prod images override

* refactor(docker): use uv in root Dockerfile etl stage, document canonical Dockerfiles

* chore(docker): extend .dockerignore for build context

* docs: add Docker Compose start option to README
2026-03-03 21:26:32 -03:00

58 lines
1.3 KiB
Docker

# Multi-stage Dockerfile (root). Prefer per-service Dockerfiles: api/Dockerfile, frontend/Dockerfile, etl/Dockerfile.
FROM python:3.12-slim AS api
WORKDIR /app
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
RUN apt-get update && apt-get install -y --no-install-recommends \
libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf-2.0-0 libcairo2 libffi-dev \
&& rm -rf /var/lib/apt/lists/*
COPY api/pyproject.toml api/uv.lock ./
RUN uv sync --no-dev --no-install-project
COPY api/src ./src
RUN uv sync --no-dev
EXPOSE 8000
CMD ["uv", "run", "uvicorn", "bracc.main:app", "--host", "0.0.0.0", "--port", "8000"]
FROM node:22-slim AS frontend-build
WORKDIR /app
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend/ ./
RUN npm run build
FROM nginx:alpine AS frontend
COPY --from=frontend-build /app/dist /usr/share/nginx/html
COPY frontend/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 3000
CMD ["nginx", "-g", "daemon off;"]
FROM python:3.12-slim AS etl
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
WORKDIR /workspace/etl
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
COPY etl/pyproject.toml etl/uv.lock ./
RUN uv sync --no-dev --no-install-project
COPY etl/src ./src
RUN uv sync --no-dev
WORKDIR /workspace
CMD ["bash"]