video-accessibility/docker-compose.optical-dev.yml
Vadym Samoilenko b3ace22009 feat(infra): move heavy workers to Cloud Run Jobs
Heavy pipeline tasks (ingest, translate, render, rerender) now dispatch
to a Cloud Run Job (va-worker) instead of local Celery workers. optical-dev
runs only api + lightweight worker (notify/embed) within its 2-CPU budget.

- backend/app/tasks/runner.py — Cloud Run Job entrypoint
- backend/app/services/cloud_run_dispatch.py — replaces .delay() for heavy tasks
- backend/Dockerfile.cloudrun — Cloud Run worker image (ffmpeg included)
- docker-compose.optical-dev.yml — 2-CPU safe overrides, disables heavy workers
- cloudbuild.yaml — builds va-worker image and updates Cloud Run Job
- deploy-dev.sh — uses 3-file compose, builds only api+worker locally
- routes_jobs, routes_admin_production, ingest_and_ai, translate_and_synthesize
  — all dispatch sites updated to use cloud_run_dispatch.dispatch()

USE_CELERY_FALLBACK=true in .env.local to use Celery locally during dev.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 21:47:10 +01:00

87 lines
2.2 KiB
YAML

# =============================================================================
# optical-dev overrides — 2 CPU / ~8 GB RAM server
#
# Heavy pipeline workers (ingest, translate, render, rerender) run on
# Cloud Run Jobs. Only lightweight services run here.
#
# Usage:
# docker compose -f docker-compose.yml \
# -f docker-compose.prod.yml \
# -f docker-compose.optical-dev.yml \
# --env-file .env.production up -d
# =============================================================================
services:
# ── Keep on this server, resource limits fit in 2 CPU ──────────────────────
mongodb:
deploy:
resources:
limits:
memory: 1G
cpus: '0.5'
reservations:
memory: 512M
cpus: '0.25'
redis:
deploy:
resources:
limits:
memory: 512M
cpus: '0.25'
reservations:
memory: 256M
cpus: '0.1'
api:
deploy:
resources:
limits:
memory: 2G
cpus: '1.0'
reservations:
memory: 1G
cpus: '0.5'
environment:
APP_ENV: prod
# Cloud Run dispatch config
CLOUD_RUN_WORKER_JOB: va-worker
GCP_REGION: europe-west1
USE_CELERY_FALLBACK: "false"
# Lightweight worker: only notify + embed_glossary tasks
# Heavy tasks (ingest/translate/render) go to Cloud Run Jobs
worker:
deploy:
resources:
limits:
memory: 512M
cpus: '0.25'
reservations:
memory: 256M
cpus: '0.1'
environment:
APP_ENV: prod
# Only consume lightweight queues; heavy queues handled by Cloud Run
CELERY_QUEUES: "notify,embed"
command: >
celery -A app.tasks worker
--loglevel=info
--queues=notify,embed
--concurrency=2
--hostname=lite-worker@%h
# ── Disabled on optical-dev — run on Cloud Run Jobs instead ───────────────
ffmpeg-worker:
deploy:
replicas: 0
tts-worker:
deploy:
replicas: 0
whisper-worker:
deploy:
replicas: 0