services: db: image: postgres:15 container_name: rss_db environment: - POSTGRES_DB=${DB_NAME} - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASS} volumes: - postgres_data:/var/lib/postgresql/data - ./init-db:/docker-entrypoint-initdb.d restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] interval: 5s timeout: 5s retries: 5 web: build: context: . args: # La imagen llevará torch-cu121 por reutilizar Dockerfile; web no usa GPU. TORCH_CUDA: cu121 container_name: rss_web command: gunicorn --bind 0.0.0.0:8000 --workers 3 app:app ports: - "8001:8000" environment: - DB_HOST=db - DB_PORT=5432 - DB_NAME=${DB_NAME} - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - SECRET_KEY=${SECRET_KEY} # - NEWS_PER_PAGE=20 # opcional depends_on: db: condition: service_healthy restart: always scheduler: build: context: . args: TORCH_CUDA: cu121 container_name: rss_scheduler command: python scheduler.py environment: - DB_HOST=db - DB_PORT=5432 - DB_NAME=${DB_NAME} - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - SECRET_KEY=${SECRET_KEY} depends_on: db: condition: service_healthy restart: always translator: build: context: . args: TORCH_CUDA: cu121 # PyTorch con CUDA 12.1 en la imagen container_name: rss_translator command: python translation_worker.py environment: # --- DB --- - DB_HOST=db - DB_PORT=5432 - DB_NAME=${DB_NAME} - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} # --- Worker --- - TARGET_LANGS=es - TRANSLATOR_BATCH=4 # 1.3B: más seguro en 12 GB (sube a 4 si ves VRAM libre) - ENQUEUE=200 - TRANSLATOR_SLEEP_IDLE=5 # Tokens (equilibrio calidad/VRAM) - MAX_SRC_TOKENS=512 - MAX_NEW_TOKENS=256 # Beams: mejor título, cuerpo eficiente - NUM_BEAMS_TITLE=3 - NUM_BEAMS_BODY=2 # Modelo NLLB 1.3B - UNIVERSAL_MODEL=facebook/nllb-200-1.3B # Dispositivo (forzar GPU si está disponible; el worker cae a CPU si hay OOM) - DEVICE=cuda # Rendimiento / estabilidad - PYTHONUNBUFFERED=1 - HF_HOME=/root/.cache/huggingface - TOKENIZERS_PARALLELISM=false - PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:64,garbage_collection_threshold:0.9 # GPU (requiere NVIDIA Container Toolkit en el host) - NVIDIA_VISIBLE_DEVICES=all - NVIDIA_DRIVER_CAPABILITIES=compute,utility volumes: - hf_cache:/root/.cache/huggingface depends_on: db: condition: service_healthy restart: always # Habilita GPU (Compose v2 + nvidia-container-toolkit) gpus: all # Alternativa con 'deploy': # deploy: # resources: # reservations: # devices: # - capabilities: [gpu] volumes: postgres_data: hf_cache: