Add app scaffold and workflows
All checks were successful
Continuous Integration / Validate and test changes (push) Successful in 3s
All checks were successful
Continuous Integration / Validate and test changes (push) Successful in 3s
This commit is contained in:
84
app/backend/Dockerfile
Normal file
84
app/backend/Dockerfile
Normal file
@@ -0,0 +1,84 @@
|
||||
#
|
||||
# BACKEND DOCKERFILE
|
||||
#
|
||||
# Multi-stage image for the FastAPI + LiveKit Agent backend using uv.
|
||||
# - production: smallest runtime image with gunicorn/uvicorn worker
|
||||
# - development: hot-reload friendly image with full toolchain
|
||||
# - builder: installs dependencies once for reuse across stages
|
||||
#
|
||||
# Keep dependency definitions aligned with docs/architecture.md.
|
||||
|
||||
FROM python:3.12-slim AS base
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PIP_NO_CACHE_DIR=1 \
|
||||
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
||||
UV_PROJECT_ENVIRONMENT=/app/.venv \
|
||||
UV_LINK_MODE=copy
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
curl \
|
||||
libpq-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN groupadd --system app && useradd --system --home /app --gid app app
|
||||
WORKDIR /app
|
||||
|
||||
# Install uv globally so subsequent stages share the toolchain.
|
||||
RUN pip install --upgrade pip uv
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Builder: install prod dependencies into an in-project virtualenv
|
||||
# ------------------------------------------------------------------------------
|
||||
FROM base AS builder
|
||||
|
||||
COPY . .
|
||||
RUN test -f pyproject.toml || (echo "pyproject.toml is required for uv sync"; exit 1)
|
||||
RUN if [ -f uv.lock ]; then \
|
||||
uv sync --frozen --no-dev --compile-bytecode; \
|
||||
else \
|
||||
uv sync --no-dev --compile-bytecode; \
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Production: minimal runtime image with gunicorn as the entrypoint
|
||||
# ------------------------------------------------------------------------------
|
||||
FROM python:3.12-slim AS production
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PIP_NO_CACHE_DIR=1
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends libpq5 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN groupadd --system app && useradd --system --home /app --gid app app
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=builder --chown=app:app /app /app
|
||||
ENV PATH="/app/.venv/bin:$PATH"
|
||||
|
||||
USER app
|
||||
EXPOSE 8000
|
||||
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "main:app", "--bind", "0.0.0.0:8000"]
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Development: includes dev dependencies and keeps uvicorn reload-friendly
|
||||
# ------------------------------------------------------------------------------
|
||||
FROM base AS development
|
||||
|
||||
COPY . .
|
||||
RUN test -f pyproject.toml || (echo "pyproject.toml is required for uv sync"; exit 1)
|
||||
RUN if [ -f uv.lock ]; then \
|
||||
uv sync --frozen --dev --compile-bytecode; \
|
||||
else \
|
||||
uv sync --dev --compile-bytecode; \
|
||||
fi
|
||||
|
||||
ENV PATH="/app/.venv/bin:$PATH"
|
||||
USER app
|
||||
EXPOSE 8000
|
||||
Reference in New Issue
Block a user