VoxCPM Docker & Self-Hosted Deployment

GitHub

VoxCPM2: Tokenizer-Free TTS for Multilingual Speech Generation, Creative Voice Design, and True-to-Life Cloning

RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/nginx
2. Docker Run (1-Click Launch) docker run -d --name voxcpm -p 7860:7860 --restart always nginx:alpine
3. Podman Run podman run -d --name voxcpm -p 7860:7860 --restart always nginx:alpine
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/nginx:alpine
5. ORAS Pull (OCI Artifact) oras pull nginx:alpine
6. Compose Deployment docker compose up -d
docker/docker-compose.yml
Download .yml
services:
  training-webui:
    build:
      context: ..
      dockerfile: docker/Dockerfile
    ports:
      - "7860:7860"
    volumes:
      # Pretrained model weights + HF cache (HF_HOME=/app/models in Dockerfile).
      # Pre-populate with model dirs, or leave empty โ€” auto-downloads on first run.
      - ../models:/app/models

      # Training data: JSONL manifests and audio files.
      # Reference paths inside the container as /app/data/train.jsonl etc.
      - ../data:/app/data

      # LoRA training output โ€” checkpoints, configs, logs.
      # Results appear in lora/<run-name>/checkpoints/ after training.
      - ../lora:/app/lora

      # Additional training artifacts.
      - ../output:/app/output
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    environment:
      - GRADIO_SERVER_PORT=7860
      - GRADIO_ROOT_PATH=/webui      # Matches nginx location block
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - training-webui
    restart: unless-stopped