# Backend image for Railway (or any Docker host). FROM python:3.12-slim # ffmpeg/ffprobe are required at runtime (frame sampling, transcode, audio for whisper). RUN apt-get update \ && apt-get install -y --no-install-recommends ffmpeg \ && rm -rf /var/lib/apt/lists/* # uv for fast, reproducible dependency installs. COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv WORKDIR /app # Install dependencies first for better layer caching. Use the committed lock for a # reproducible build (`requests` etc. come in transitively and are pinned there). COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev # Application code. COPY app ./app # Railway injects $PORT; default to 8000 for local `docker run`. ENV PORT=8000 EXPOSE 8000 CMD uv run uvicorn app.main:app --host 0.0.0.0 --port ${PORT}