mirror of
https://github.com/QuentinFuxa/WhisperLiveKit.git
synced 2026-03-07 06:14:05 +00:00
77 lines
1.9 KiB
Docker
77 lines
1.9 KiB
Docker
FROM ghcr.io/astral-sh/uv:0.10.4 AS uvbin
|
|
|
|
# --- MARK: Builder Stage
|
|
FROM debian:bookworm-slim AS builder-cpu
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
ENV PYTHONUNBUFFERED=1
|
|
|
|
WORKDIR /app
|
|
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
python3-dev && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install UV and set up the environment
|
|
COPY --from=uvbin /uv /uvx /bin/
|
|
|
|
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_NO_DEV=1
|
|
ENV UV_PYTHON_PREFERENCE=only-managed
|
|
ENV UV_PYTHON_INSTALL_DIR=/python
|
|
|
|
RUN uv python install 3.12
|
|
|
|
# Install dependencies first to leverage caching
|
|
ARG EXTRAS=cpu
|
|
COPY pyproject.toml uv.lock /app/
|
|
RUN set -eux; \
|
|
set --; \
|
|
for extra in $(echo "${EXTRAS:-}" | tr ',' ' '); do \
|
|
set -- "$@" --extra "$extra"; \
|
|
done; \
|
|
uv sync --frozen --no-install-project --no-editable --no-cache "$@"
|
|
|
|
# Copy the source code and install the package only
|
|
COPY whisperlivekit /app/whisperlivekit
|
|
RUN set -eux; \
|
|
set --; \
|
|
for extra in $(echo "${EXTRAS:-}" | tr ',' ' '); do \
|
|
set -- "$@" --extra "$extra"; \
|
|
done; \
|
|
uv sync --frozen --no-editable --no-cache "$@"
|
|
|
|
# --- MARK: Runtime Stage
|
|
FROM debian:bookworm-slim
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
WORKDIR /app
|
|
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
ffmpeg &&\
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy UV binaries
|
|
COPY --from=uvbin /uv /uvx /bin/
|
|
|
|
# Copy the Python version
|
|
COPY --from=builder-cpu --chown=python:python /python /python
|
|
|
|
# Copy the virtual environment with all dependencies installed
|
|
COPY --from=builder-cpu /app/.venv /app/.venv
|
|
|
|
EXPOSE 8000
|
|
|
|
ENV PATH="/app/.venv/bin:$PATH"
|
|
ENV UV_PYTHON_DOWNLOADS=0
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=120s --retries=3 \
|
|
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/')" || exit 1
|
|
|
|
ENTRYPOINT ["whisperlivekit-server", "--host", "0.0.0.0"]
|
|
|
|
# Default args - you might want to use a smaller model for CPU
|
|
CMD ["--model", "tiny"]
|