Files
qwentts.cpp/docker/tts-server/Dockerfile
T

53 lines
2.3 KiB
Docker

# syntax=docker/dockerfile:1
# ============================================================================
# tts-server containerizzato (Qwen3-TTS, backend Vulkan)
# ----------------------------------------------------------------------------
# GPU supportate:
# - AMD/Intel: Mesa RADV via /dev/dri/renderD128 (nessun driver nel container)
# - NVIDIA: ICD Vulkan (nvidia-container-toolkit) o /dev/dri
# Il driver kernel resta sull'host; il container monta solo il device node.
#
# Build: docker build -t qwentts-tts:vulkan .
# Run: docker compose up -d (vedi docker-compose.yml)
# ============================================================================
FROM ubuntu:22.04 AS build-vulkan
RUN apt-get update -qq && apt-get install -y -qq --no-install-recommends \
git ca-certificates cmake g++ make wget gnupg \
> /dev/null && rm -rf /var/lib/apt/lists/*
# glslc (shader compiler) è impacchettato solo dal repo LunarG su Ubuntu 22.04
RUN wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | gpg --dearmor -o /usr/share/keyrings/lunarg.gpg && \
echo "deb [signed-by=/usr/share/keyrings/lunarg.gpg] https://packages.lunarg.com/vulkan/1.3.296 jammy main" \
> /etc/apt/sources.list.d/lunarg-vulkan.list && \
apt-get update -qq && apt-get install -y -qq --no-install-recommends vulkan-sdk \
> /dev/null && rm -rf /var/lib/apt/lists/*
WORKDIR /build
COPY . .
# GGML_NATIVE=OFF: binario portabile tra CPU diverse (niente tuning nativo)
RUN cmake -B build -DGGML_VULKAN=ON -DGGML_NATIVE=OFF -DCMAKE_BUILD_TYPE=Release && \
cmake --build build --config Release -j"$(nproc)"
FROM ubuntu:22.04 AS runtime
RUN apt-get update -qq && apt-get install -y -qq --no-install-recommends \
libgomp1 libvulkan1 mesa-vulkan-drivers curl ca-certificates jq python3 \
> /dev/null && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build-vulkan /build/build/tts-server /build/build/qwen-tts /build/build/qwen-codec /build/build/*.so* ./
COPY docker/tts-server/entrypoint.sh ./entrypoint.sh
COPY docker/tts-server/register_voices.py ./register_voices.py
RUN chmod +x ./entrypoint.sh
# Le librerie ggml copiate fuori dall'albero di build hanno RPATH interno:
# serve il path esplicito.
ENV LD_LIBRARY_PATH=/app
ENV GGML_BACKEND=Vulkan0
EXPOSE 8881
ENTRYPOINT ["./entrypoint.sh"]