|
|
|
FROM python:3.12-slim AS builder |
|
|
|
WORKDIR /app |
|
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \ |
|
PYTHONUNBUFFERED=1 \ |
|
PIP_NO_CACHE_DIR=1 \ |
|
PIP_DISABLE_PIP_VERSION_CHECK=1 |
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \ |
|
wget=1.21.* \ |
|
curl \ |
|
gcc \ |
|
bzip2 \ |
|
ca-certificates \ |
|
gnupg \ |
|
git \ |
|
python3-dev \ |
|
build-essential \ |
|
pkg-config \ |
|
portaudio19-dev \ |
|
libsdl-pango-dev \ |
|
libcairo2-dev \ |
|
libpango1.0-dev \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
|
|
|
|
|
RUN wget -qO- "https://yihui.org/tinytex/install-bin-unix.sh" | sh \ |
|
&& ~/.TinyTeX/bin/*/tlmgr path add \ |
|
&& ~/.TinyTeX/bin/*/tlmgr install \ |
|
amsmath babel-english cbfonts-fd cm-super count1to ctex \ |
|
doublestroke dvisvgm everysel fontspec frcursive fundus-calligra \ |
|
gnu-freefont jknapltx latex-bin mathastext microtype multitoc \ |
|
physics preview prelim2e ragged2e relsize rsfs setspace \ |
|
standalone tipa wasy wasysym xcolor xetex xkeyval \ |
|
&& rm -rf ~/.TinyTeX/texmf-var/web2c/tlmgr.log* \ |
|
&& rm -rf ~/.TinyTeX/texmf-var/web2c/tlmgr-commands.log* \ |
|
&& find ~/.TinyTeX -name "*.log" -delete \ |
|
&& find ~/.TinyTeX -name "*.aux" -delete |
|
|
|
|
|
COPY requirements.txt . |
|
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt \ |
|
&& find /install -name "*.pyc" -delete \ |
|
&& find /install -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true |
|
|
|
|
|
RUN mkdir -p /models \ |
|
&& cd /models \ |
|
&& wget --progress=dot:giga -O kokoro-v0_19.onnx \ |
|
"https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files/kokoro-v0_19.onnx" \ |
|
&& wget --progress=dot:giga -O voices.bin \ |
|
"https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files/voices.bin" \ |
|
&& ls -la /models |
|
|
|
|
|
FROM python:3.12-slim AS runtime |
|
|
|
|
|
RUN groupadd -r appuser && useradd -r -g appuser -d /app -s /sbin/nologin appuser |
|
|
|
WORKDIR /app |
|
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \ |
|
PYTHONUNBUFFERED=1 \ |
|
PYTHONPATH=/app \ |
|
PATH="/root/.TinyTeX/bin/x86_64-linux:$PATH" |
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \ |
|
portaudio19-dev \ |
|
libasound2-dev \ |
|
libsdl-pango-dev \ |
|
libcairo2-dev \ |
|
libpango1.0-dev \ |
|
sox \ |
|
ffmpeg \ |
|
tini \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
|
|
|
|
|
COPY --from=builder /root/.TinyTeX /root/.TinyTeX |
|
|
|
|
|
COPY --from=builder /install /usr/local |
|
|
|
|
|
COPY --from=builder /models /app/models |
|
|
|
|
|
COPY --chown=appuser:appuser .env gradio_app.py ./ |
|
COPY --chown=appuser:appuser src/ ./src/ |
|
|
|
|
|
RUN mkdir -p output \ |
|
&& chown -R appuser:appuser /app |
|
|
|
|
|
USER appuser |
|
|
|
|
|
LABEL maintainer="[email protected]" \ |
|
version="1.0" \ |
|
description="Multi-stage Docker image for ML application" |
|
|
|
|
|
EXPOSE 7860 |
|
|
|
|
|
ENTRYPOINT ["tini", "--"] |
|
|
|
|
|
HEALTHCHECK --interval=30s --timeout=15s --start-period=60s --retries=3 \ |
|
CMD python -c "import sys; import src; import manim; \ |
|
import requests; \ |
|
r = requests.get('http://localhost:7860/health', timeout=10); \ |
|
sys.exit(0 if r.status_code == 200 else 1)" || exit 1 |
|
|
|
|
|
CMD ["python", "gradio_app.py"] |