FROM python:3.12-slim WORKDIR /app RUN echo "[BUILD] step1: apt-get update+install ffmpeg + Vietnamese fonts" && \ apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ fonts-dejavu-core \ fonts-noto \ fonts-noto-cjk \ fonts-noto-color-emoji \ fonts-liberation \ fonts-freefont-ttf \ libfreetype6 \ && rm -rf /var/lib/apt/lists/* && \ echo "[BUILD] step1 done" RUN echo "[BUILD] step2: pip base pkgs (bs4/lxml)" && \ pip install --no-cache-dir "beautifulsoup4>=4.12" lxml && \ echo "[BUILD] step2 done" RUN echo "[BUILD] step3: pip main pkgs" && \ pip install --no-cache-dir fastapi uvicorn requests beautifulsoup4 jinja2 yt-dlp huggingface_hub gTTS pillow edge-tts python-dateutil httpx pycryptodome && \ echo "[BUILD] step3 done" COPY requirements.txt . RUN echo "[BUILD] step4: pip requirements.txt" && \ pip install --no-cache-dir -r requirements.txt || true && \ echo "[BUILD] step4 done" COPY . . EXPOSE 7860 RUN echo "[BUILD] step5: setup Vietnamese font symlink" && \ mkdir -p /usr/share/fonts/truetype/vn && \ # Prefer Noto Sans for Vietnamese - it has full diacritic support if [ -f /usr/share/fonts/truetype/noto/NotoSans-Regular.ttf ]; then \ ln -sf /usr/share/fonts/truetype/noto/NotoSans-Regular.ttf /usr/share/fonts/truetype/vn/VNFont.ttf; \ elif [ -f /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf ]; then \ ln -sf /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf /usr/share/fonts/truetype/vn/VNFont.ttf; \ ln -sf /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf /usr/share/fonts/truetype/vn/VNFont-Bold.ttf; \ fi; \ fc-cache -f -v || true; \ date > /app/.build_done && \ echo "[BUILD] step5 done" CMD ["uvicorn", "_run:app", "--host", "0.0.0.0", "--port", "7860"] # v3.0-vn-font-fix-short-video-2026-07-19 # rebuild-trigger: m3u-perf-fix-20260829