Mirrors deploy/testnet/docker-compose.supplier-tts.yml and the simulation PiperTTS stack, co-located on vector-marketplace as a private internal service on marketplace-mainnet-net (no Traefik labels, no public DNS for Piper itself). Supplier reaches Piper at http://marketplace-mainnet-tts-piper:8000. Voice: en_US-lessac-high. New supplier wallet + on-chain advert are published out-of-band by the operator per the runbook header. Files: - deploy/mainnet/docker-compose.tts-piper.yml openedai-speech-min, private - deploy/mainnet/docker-compose.supplier-tts.yml CAPABILITY_KIND=tts supplier - deploy/mainnet/install-voice-extras.sh voice download + yaml mapping - deploy/mainnet/voice-mappings.py idempotent yaml editor - supplier/.env.tts.example operator env template - .gitignore whitelist .env.*.example Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
2.4 KiB
YAML
62 lines
2.4 KiB
YAML
# deploy/mainnet/docker-compose.tts-piper.yml — PiperTTS (PRIVATE) — MAINNET
|
|
#
|
|
# OpenAI-shape /v1/audio/speech served by openedai-speech-min, reachable
|
|
# ONLY from inside marketplace-mainnet-net. No Traefik labels, no public
|
|
# DNS — the colocated marketplace-mainnet-supplier-tts container hits it at
|
|
# http://marketplace-mainnet-tts-piper:8000
|
|
#
|
|
# Mirrors deploy/simulation/docker-compose.tts-piper.yml, but private:
|
|
# the simulation host exposes Piper publicly via Traefik+Cloudflare;
|
|
# mainnet keeps it on-net only since only the colocated TTS supplier
|
|
# consumes it.
|
|
#
|
|
# Pre-flight networks (must already exist):
|
|
# docker network create marketplace-mainnet-net # one-shot
|
|
#
|
|
# Bring up:
|
|
# docker compose -f deploy/mainnet/docker-compose.tts-piper.yml up -d
|
|
# bash deploy/mainnet/install-voice-extras.sh # download voices + yaml mapping
|
|
|
|
name: marketplace-mainnet-tts-piper
|
|
|
|
services:
|
|
tts-piper:
|
|
image: ghcr.io/matatonic/openedai-speech-min:latest
|
|
container_name: marketplace-mainnet-tts-piper
|
|
restart: unless-stopped
|
|
environment:
|
|
# Pre-load Piper's highest-quality American-English voice so first
|
|
# /v1/audio/speech doesn't pay the model-download tax. Other voices
|
|
# can be added via install-voice-extras.sh + voice-mappings.py.
|
|
PRELOAD_MODEL: en_US-lessac-high
|
|
PORT: "8000"
|
|
volumes:
|
|
# Host bind mounts (not Docker named volumes) so the operator can
|
|
# ls/du/back up the downloaded Piper voices directly. Paths relative
|
|
# to THIS compose file, i.e. deploy/mainnet/data/tts-piper/{voices,config}
|
|
# from the repo root. install-voice-extras.sh creates them.
|
|
- ./data/tts-piper/voices:/app/voices
|
|
- ./data/tts-piper/config:/app/config
|
|
healthcheck:
|
|
# /v1/models is the OpenAI-shape model list; a 200 here proves the
|
|
# server is up and at least one voice is loaded. Image ships with
|
|
# curl (and python3) but NOT wget — using wget here marks the
|
|
# container unhealthy on every probe.
|
|
test: ["CMD-SHELL", "curl -fsS http://localhost:8000/v1/models >/dev/null || exit 1"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 90s
|
|
networks:
|
|
- marketplace-mainnet-net # PRIVATE — no traefik-net join
|
|
logging:
|
|
driver: json-file
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
networks:
|
|
marketplace-mainnet-net:
|
|
external: true
|
|
name: marketplace-mainnet-net
|