docker-compose.yml
Rama main · réplica de lectura del repositorio original.
services:
postgres:
image: pgvector/pgvector:pg17
container_name: sotto-postgres
deploy:
resources:
limits:
memory: 1g
ports:
- '127.0.0.1:5432:5432'
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: sotto
volumes:
- sotto_postgres_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h 127.0.0.1 -U postgres']
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: sotto-redis
deploy:
resources:
limits:
memory: 256m
ports:
- '127.0.0.1:6379:6379'
volumes:
- sotto_redis_data:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 5s
retries: 5
pinchtab:
image: pinchtab/pinchtab
container_name: sotto-pinchtab
deploy:
resources:
limits:
memory: 1g
ports:
- '127.0.0.1:9867:9867'
environment:
BRIDGE_BIND: '0.0.0.0'
BRIDGE_PORT: '9867'
BRIDGE_HEADLESS: 'true'
BRIDGE_STEALTH: 'full'
BRIDGE_BLOCK_IMAGES: 'true'
BRIDGE_BLOCK_ADS: 'true'
BRIDGE_BLOCK_MEDIA: 'true'
BRIDGE_NAV_TIMEOUT: '25'
shm_size: '1gb'
security_opt:
- seccomp:unconfined
healthcheck:
test: ['CMD-SHELL', 'wget -q --spider http://localhost:9867/health || exit 1']
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
# ---------------------------------------------------------------------------
# Totally-local inference profile (opt-in): docker compose --profile local up
# Runs the whole AI stack on your own hardware with zero cloud keys. Pair with:
# Save these service URLs in /welcome or Admin after the containers start.
# (Inside Docker use the service names above; from the host use localhost +
# the mapped ports below. See .env.oss.example.)
# ---------------------------------------------------------------------------
ollama:
image: ollama/ollama:latest
container_name: sotto-ollama
profiles: ['local']
ports:
- '127.0.0.1:11434:11434'
volumes:
- sotto_ollama_data:/root/.ollama
# GPU (NVIDIA): uncomment to accelerate. Requires nvidia-container-toolkit.
# On Apple Silicon, Docker has no GPU passthrough — Ollama runs on CPU here;
# for Metal acceleration run Ollama natively on the host instead.
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
healthcheck:
test: ['CMD-SHELL', 'ollama list || exit 1']
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
whisper:
# OpenAI-compatible local Whisper (faster-whisper-server). Serves
# /v1/audio/transcriptions. For NVIDIA GPUs use the :latest-cuda image.
image: fedirz/faster-whisper-server:latest-cpu
container_name: sotto-whisper
profiles: ['local']
ports:
- '127.0.0.1:8001:8000'
environment:
# large-v3-turbo: best broad multilingual coverage (99+ languages).
WHISPER__MODEL: deepdml/faster-whisper-large-v3-turbo-ct2
volumes:
- sotto_whisper_data:/root/.cache/huggingface
local-tts:
# Optional bundled Kokoro service. Unsupported engine selections fail.
# Context is the service dir (its Dockerfile uses bare `COPY app.py`, matching
# `docker build ... services/local-tts` in services/local-tts/AGENTS.md).
build:
context: ./services/local-tts
dockerfile: Dockerfile
target: ${LOCAL_TTS_ENGINE:-kokoro}
container_name: sotto-local-tts
profiles: ['local']
environment:
LOCAL_TTS_ENGINE: ${LOCAL_TTS_ENGINE:-kokoro}
ports:
- '127.0.0.1:8000:8000'
healthcheck:
test:
[
'CMD',
'python',
'-c',
"import urllib.request; urllib.request.urlopen('http://localhost:8000/health', timeout=5)",
]
interval: 15s
timeout: 5s
retries: 10
start_period: 30s
volumes:
sotto_postgres_data:
sotto_redis_data:
sotto_ollama_data:
sotto_whisper_data: