Spaces:
Running on T4
Running on T4
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # OmniVoice Studio β Docker Compose | |
| # | |
| # Quick start: | |
| # docker compose -f deploy/docker-compose.yml --profile cpu up # CPU mode | |
| # docker compose -f deploy/docker-compose.yml --profile gpu up # GPU mode | |
| # | |
| # Both services bind to port 3900, so they MUST be opt-in via profiles β | |
| # otherwise `compose up` would race them and one would fail to bind. | |
| # | |
| # First run downloads ~4 GB of models. Progress is shown in logs. | |
| # Open http://localhost:3900 once the health check passes. | |
| # | |
| # SECURITY: The port is bound to 127.0.0.1 by default β only this | |
| # machine can reach the API. To expose OmniVoice on your LAN (or | |
| # through a reverse proxy / tunnel), change the port mapping to | |
| # "0.0.0.0:3900:3900" or "3900:3900". OmniVoice itself ships no | |
| # authentication β if you expose it, put it behind a reverse proxy | |
| # with auth (Caddy basic_auth, nginx + htpasswd, Tailscale, etc.). | |
| # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| services: | |
| # ββ CPU mode β activate with: docker compose --profile cpu up | |
| omnivoice: | |
| image: ghcr.io/debpalash/omnivoice-studio:latest | |
| # To build from source instead of pulling, comment out `image:` and | |
| # uncomment the two lines below: | |
| build: | |
| context: .. | |
| dockerfile: deploy/Dockerfile | |
| container_name: omnivoice-studio | |
| profiles: ["cpu"] | |
| ports: | |
| - "127.0.0.1:3900:3900" | |
| volumes: | |
| - omnivoice-data:/app/omnivoice_data | |
| environment: | |
| - HF_HOME=/app/omnivoice_data/huggingface | |
| - HF_TOKEN=${HF_TOKEN:-} | |
| - OMNIVOICE_DATA_DIR=/app/omnivoice_data | |
| - PYTHONPATH=/app/backend | |
| - PYTHONUNBUFFERED=1 | |
| # Bind uvicorn to 0.0.0.0 *inside* the container so the host-side port | |
| # mapping above can forward traffic in. The 127.0.0.1 prefix on the | |
| # `ports:` mapping is what enforces loopback-only on the host β | |
| # OMNIVOICE_BIND_HOST=0.0.0.0 here only opens the container's own | |
| # interface. The backend default is 127.0.0.1 (see backend/main.py). | |
| - OMNIVOICE_BIND_HOST=0.0.0.0 | |
| healthcheck: | |
| test: ["CMD", "curl", "-sf", "http://localhost:3900/health"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 120s | |
| restart: unless-stopped | |
| # ββ GPU mode β activate with: docker compose --profile gpu up | |
| omnivoice-gpu: | |
| image: ghcr.io/debpalash/omnivoice-studio:latest | |
| build: | |
| context: .. | |
| dockerfile: deploy/Dockerfile | |
| container_name: omnivoice-studio-gpu | |
| profiles: ["gpu"] | |
| ports: | |
| - "127.0.0.1:3900:3900" | |
| volumes: | |
| - omnivoice-data:/app/omnivoice_data | |
| environment: | |
| - HF_HOME=/app/omnivoice_data/huggingface | |
| - HF_TOKEN=${HF_TOKEN:-} | |
| - OMNIVOICE_DATA_DIR=/app/omnivoice_data | |
| - PYTHONPATH=/app/backend | |
| - PYTHONUNBUFFERED=1 | |
| # Bind uvicorn to 0.0.0.0 *inside* the container β same as the CPU | |
| # service above. The host-side `127.0.0.1:3900:3900` mapping keeps | |
| # LAN reachability off by default. | |
| - OMNIVOICE_BIND_HOST=0.0.0.0 | |
| healthcheck: | |
| test: ["CMD", "curl", "-sf", "http://localhost:3900/health"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 180s | |
| deploy: | |
| resources: | |
| reservations: | |
| devices: | |
| - driver: nvidia | |
| count: 1 | |
| capabilities: [gpu] | |
| restart: unless-stopped | |
| volumes: | |
| omnivoice-data: | |