48 lines
1.9 KiB
Docker
48 lines
1.9 KiB
Docker
# Use an official Python runtime as a base image
|
|
FROM python:3.12.2
|
|
|
|
# Set the working directory in the container
|
|
WORKDIR /app
|
|
|
|
# System deps: git for pip-from-git, ffmpeg (with libass for subtitle burn-in), fonts, debugging tools.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
git bash nano wget ca-certificates \
|
|
ffmpeg fonts-dejavu-core \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Verify libass is built into ffmpeg (subtitle burn-in needs it).
|
|
RUN ffmpeg -hide_banner -filters 2>/dev/null | grep -q "ass " || (echo "ffmpeg lacks ass filter" && exit 1)
|
|
|
|
# Upgrade pip and pin setuptools < 71 (newer versions break legacy setup.py
|
|
# packages like openai-whisper that import pkg_resources at module top-level).
|
|
RUN pip install --upgrade pip "setuptools<71" wheel
|
|
|
|
# Copy requirements first so Docker can cache the installed packages layer
|
|
COPY requirements.txt /app/
|
|
|
|
# Install Python deps. --no-build-isolation lets setup.py-based packages reuse
|
|
# the setuptools we just pinned, instead of pip pulling latest into an isolated env.
|
|
RUN pip install --no-cache-dir --no-build-isolation -r requirements.txt
|
|
|
|
# Copy the rest of the application code
|
|
COPY . /app
|
|
|
|
# Geckodriver for the (optional) selenium uploaders.
|
|
RUN wget -q https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux64.tar.gz \
|
|
&& tar -xzf geckodriver-v0.32.0-linux64.tar.gz \
|
|
&& mv geckodriver /usr/local/bin/ \
|
|
&& rm geckodriver-v0.32.0-linux64.tar.gz \
|
|
&& geckodriver --version
|
|
|
|
# Firefox for selenium uploaders (optional). firefox-esr ships in Debian stable
|
|
# so we don't need to add the `unstable` repo (which causes openssl conflicts).
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends firefox-esr \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Gradio default port
|
|
EXPOSE 7860
|
|
|
|
# Default: launch the Gradio UI. Override with `docker run ... bash` for the CLI.
|
|
CMD ["python", "app.py"]
|