services: tts-voice-creator-clone-and-design-2: # Built locally rather than pulled: the ghcr.io image is private (this # host has no registry credentials) and, checked on the DGX, several # versions stale besides. The full source is already deployed here # (see the deploy step that rsyncs it from the DGX) -- build directly # from it instead of standing up registry auth for a copy that would # need pushing to stay current anyway. build: context: . dockerfile: Dockerfile container_name: tts-voice-creator-clone-and-design-2 restart: unless-stopped # Same hardening as the DGX deployment: image filesystem stays # immutable, the app writes only to the explicit mounts below. read_only: true cap_drop: - ALL security_opt: - no-new-privileges:true tmpfs: - /tmp:size=1g,mode=1777 mem_limit: "${APP_MEM_LIMIT:-4g}" mem_reservation: "${APP_MEM_RESERVATION:-1g}" ports: - "7890:7890" volumes: # NFS-exported from the DGX (see /etc/exports there) so this instance # shares exactly the voice library the DGX's TTS engine has on disk -- # never a separate copy that could drift. - ${VOICE_HOST_DIR:-/mnt/dgx-tts-voices}:/voices:rw - ./config:/home/app/.config/tts-voice-creator:rw # settings, presets, routes - ./logs:/logs:rw # application logs # Live-editable without a rebuild -- same pattern as the DGX compose. - ./static:/app/static:ro - ./server.py:/app/server.py:ro - ./core:/app/core:ro - ./routes:/app/routes:ro - ./workflows:/app/workflows:ro - ./VERSION:/app/VERSION:ro - ./CHANGELOG.md:/app/CHANGELOG.md:ro environment: - PYTHONUNBUFFERED=1 - VOICES_DIR=/voices - OUTPUT_DIR=/voices/active_voices # Most engine defaults already point at the DGX's real LAN IP and work # unmodified from any host. Vision OCR is the one exception: its # default is host.docker.internal, which resolves to whichever HOST # the container happens to run on -- correct from the DGX itself, but # on the NUC that would mean the NUC's own (nonexistent) OCR engine # rather than the DGX's. Pin both explicitly to the DGX. - VISION_OCR_URL=http://192.168.178.8:8098/v1 - VISION_OCR_FALLBACK_URL=http://192.168.178.8:8099/v1 # # No docker-socket-proxy / DOCKER_HOST here on purpose: this instance # has no local Docker socket to control, and the DGX's TTS containers # can't be restarted cross-host through it either way. Voice-change # auto-restart is an accepted manual step on the DGX after a change -- # same as documented for the DGX deployment itself. Docker-dependent # diagnostics on this instance report unavailable rather than failing. extra_hosts: - "host.docker.internal:host-gateway"