Quick Start

View as MarkdownOpen in Claude

Overview

This guide walks you through deploying Smallest Self-Host Text-to-Speech (TTS) using Docker Compose. You’ll have a fully functional text-to-speech service running in under 15 minutes.

Ensure you’ve completed all prerequisites before starting this guide.

Step 1: Create Project Directory

Create a directory for your deployment:

$mkdir -p ~/smallest-tts
$cd ~/smallest-tts

Step 2: Login to Container Registry

Authenticate with the Smallest container registry using credentials provided by support:

$docker login quay.io

Enter your username and password when prompted.

Save your credentials securely. You’ll need them if you restart or redeploy the containers.

Step 3: Create Environment File

Create a .env file with your license key:

$cat > .env << 'EOF'
$LICENSE_KEY=your-license-key-here
$EOF

Replace your-license-key-here with the actual license key provided by Smallest.ai.

Never commit your .env file to version control. Add it to .gitignore if using git.

Step 4: Create Docker Compose File

Create a docker-compose.yml file for TTS deployment:

docker-compose.yml
1version: "3.8"
2
3services:
4 lightning-tts:
5 image: quay.io/smallestinc/lightning-tts:latest
6 ports:
7 - "8876:8876"
8 environment:
9 - LICENSE_KEY=${LICENSE_KEY}
10 - REDIS_HOST=redis
11 - REDIS_PORT=6379
12 - PORT=8876
13 deploy:
14 resources:
15 reservations:
16 devices:
17 - driver: nvidia
18 count: 1
19 capabilities: [gpu]
20 restart: unless-stopped
21 networks:
22 - smallest-network
23
24 api-server:
25 image: quay.io/smallestinc/self-hosted-api-server:latest
26 container_name: api-server
27 environment:
28 - LICENSE_KEY=${LICENSE_KEY}
29 - LIGHTNING_TTS_BASE_URL=http://lightning-tts:8876
30 - API_BASE_URL=http://license-proxy:3369
31 - REDIS_HOST=redis
32 - REDIS_PORT=6379
33 ports:
34 - "7100:7100"
35 networks:
36 - smallest-network
37 restart: unless-stopped
38 depends_on:
39 - lightning-tts
40 - license-proxy
41
42 license-proxy:
43 image: quay.io/smallestinc/license-proxy:latest
44 container_name: license-proxy
45 environment:
46 - LICENSE_KEY=${LICENSE_KEY}
47 - PORT=3369
48 networks:
49 - smallest-network
50 restart: unless-stopped
51
52 redis:
53 image: redis:7-alpine
54 container_name: redis-server
55 ports:
56 - "6379:6379"
57 networks:
58 - smallest-network
59 restart: unless-stopped
60 command: redis-server --appendonly yes
61 healthcheck:
62 test: ["CMD", "redis-cli", "ping"]
63 interval: 5s
64 timeout: 3s
65 retries: 5
66
67networks:
68 smallest-network:
69 driver: bridge
70 name: smallest-network

Step 5: Start Services

Launch all services with Docker Compose:

$docker compose up -d

First startup will take 3-5 minutes as the system:

  1. Pulls container images (~15-25 GB, includes TTS models)
  2. Initializes GPU and loads models

Models are embedded in the container - no separate download needed.

Step 6: Monitor Startup

Watch the logs to monitor startup progress:

$docker compose logs -f

Look for these success indicators:

1

Redis Ready

redis-server | Ready to accept connections
2

License Proxy Ready

license-proxy | License validated successfully
license-proxy | Server listening on port 3369
3

Lightning TTS Ready

lightning-tts | Model loaded successfully
lightning-tts | Server ready on port 8876
4

API Server Ready

api-server | Connected to Lightning TTS
api-server | API server listening on port 7100

Press Ctrl+C to stop following logs.

Step 7: Verify Installation

Check that all containers are running:

$docker compose ps

Expected output:

NAME IMAGE STATUS
api-server quay.io/smallestinc/self-hosted-api-server Up
license-proxy quay.io/smallestinc/license-proxy Up
lightning-tts quay.io/smallestinc/lightning-tts Up
redis-server redis:7-alpine Up (healthy)

Step 8: Test API

Test the API with a sample request:

$curl -X POST http://localhost:7100/v1/speak \
> -H "Authorization: Token ${LICENSE_KEY}" \
> -H "Content-Type: application/json" \
> -d '{
> "text": "Hello, this is a test of the text-to-speech service.",
> "voice": "default"
> }'

Or use the health check endpoint first:

$curl http://localhost:7100/health

Expected response: {"status": "healthy"}

Common Startup Issues

Error: could not select device driver "nvidia"

Solution:

$sudo systemctl restart docker
$docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

If this fails, reinstall NVIDIA Container Toolkit.

Error: License validation failed

Solution:

  • Verify LICENSE_KEY in .env is correct
  • Check internet connectivity
  • Ensure firewall allows HTTPS to console-api.smallest.ai

Error: port is already allocated

Solution: Check what’s using the port:

$sudo lsof -i :7100

Either stop the conflicting service or change the port in docker-compose.yml

Managing Your Deployment

Stop Services

$docker compose stop

Restart Services

$docker compose restart

View Logs

$docker compose logs -f [service-name]

Examples:

$docker compose logs -f api-server
$docker compose logs -f lightning-tts

Update Images

Pull latest images and restart:

$docker compose pull
$docker compose up -d

Remove Deployment

Stop and remove all containers:

$docker compose down

Remove containers and volumes:

$docker compose down -v

Using -v flag will delete all data. Models will need to be re-downloaded on next startup.

What’s Next?