services: jumble: container_name: imwald-jumble build: context: . dockerfile: Dockerfile args: VITE_PROXY_SERVER: ${JUMBLE_PROXY_SERVER_URL:-http://localhost:8090} ports: - "8089:80" restart: unless-stopped networks: - jumble # Link / OG preview — silberengel/wikistr (override: OG_PROXY_IMAGE). og-proxy: image: ${OG_PROXY_IMAGE:-silberengel/wikistr:latest-og-proxy} container_name: jumble-og-proxy # Docker’s resolver sometimes returns EAI_AGAIN → Node "fetch failed" and noisy retries in proxy logs. dns: - 1.1.1.1 - 8.8.8.8 ports: - '127.0.0.1:8090:8090' environment: PROXY_PORT: '8090' PROXY_ALLOW_ORIGIN: ${OG_PROXY_ALLOW_ORIGIN:-http://localhost:5173} PROXY_TIMEOUT_MS: '30000' PROXY_MAX_BODY_BYTES: '5242880' PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: 'true' PUPPETEER_EXECUTABLE_PATH: /usr/bin/chromium-browser networks: - jumble restart: unless-stopped nostr-relay: image: scsibug/nostr-rs-relay:latest container_name: jumble-nostr-relay ports: - "7000:8080" environment: - RUST_LOG=warn,nostr_rs_relay=info volumes: - relay-data:/usr/src/app/db networks: - jumble restart: unless-stopped # Advanced Event Lab: grammar (LanguageTool) + machine translate (LibreTranslate). # Matches vite.config.ts → 127.0.0.1:8010 / :5000. Start with: # docker compose -f docker-compose.dev.yml --profile editor-tools up -d languagetool libretranslate languagetool: image: silviof/docker-languagetool:latest profiles: ['editor-tools'] container_name: jumble-languagetool ports: - '8010:8010' networks: - jumble restart: unless-stopped libretranslate: image: libretranslate/libretranslate:latest profiles: ['editor-tools'] container_name: jumble-libretranslate ports: - '5000:5000' # Without LT_LOAD_ONLY the image downloads many GB of models before binding :5000 — Vite then gets ECONNRESET on /translate. tty: true environment: LT_LOAD_ONLY: ${LT_LOAD_ONLY:-en,de,es,fr,it,pt,ru,zh,ja,ar} # Install missing packs when `LT_LOAD_ONLY` grows (persisted volume otherwise keeps old en/de-only index). LT_UPDATE_MODELS: ${LT_UPDATE_MODELS:-true} volumes: - ./.local-libretranslate/share:/home/libretranslate/.local/share - ./.local-libretranslate/cache:/home/libretranslate/.local/cache networks: - jumble restart: unless-stopped # Wyoming Piper + HTTP bridge (read-aloud). Profile local-tts — matches vite /api/piper-tts → :9876, Wyoming :10200. # Mount voices under ./.local-piper-data (flat .onnx + .onnx.json). Extra voices: scripts/download-piper-extra-voices.sh piper-wyoming: image: ${WYOMING_PIPER_IMAGE:-silberengel/wyoming-piper:latest} profiles: ['local-tts'] container_name: jumble-piper-wyoming command: - --voice - en_US-lessac-medium - --uri - tcp://0.0.0.0:10200 - --data-dir - /data volumes: - ./.local-piper-data:/data expose: - '10200' networks: - jumble restart: unless-stopped # No Hub image required — built from this repo. (Avoid silberengel/imwald-piper-tts-proxy:latest here until it exists on Docker Hub.) piper-tts-proxy: profiles: ['local-tts'] container_name: jumble-piper-tts-proxy build: context: . dockerfile: services/piper-tts-proxy/Dockerfile environment: NODE_ENV: production PORT: '9876' PIPER_TTS_HOST: piper-wyoming PIPER_TTS_PORT: '10200' ports: - '127.0.0.1:9876:9876' depends_on: - piper-wyoming networks: - jumble restart: unless-stopped volumes: relay-data: networks: jumble: