name: chatty-managed-supabase # Supported self-hosting profile: move only the Chatty containers to your # host. Auth, Postgres, Storage, and Realtime remain in your Supabase project. # The retired provider-neutral stack is intentionally not included. The optional services: # Durable automation plane. It is opt-in so the managed Supabase profile # remains compatible with deployments that already provide Redis externally. automation-redis: image: redis:7.4-alpine profiles: [automation] command: ["redis-server", "--appendonly", "yes", "--appendfsync", "everysec"] volumes: - automation-redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 restart: unless-stopped backend: build: ./backend env_file: - ./backend/.env environment: DEPLOYMENT_PROFILE: managed_supabase PORT: 8000 ports: - "${BACKEND_PORT:-8000}:8000" healthcheck: test: - CMD-SHELL - python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/readyz', timeout=3)" interval: 15s timeout: 5s retries: 5 start_period: 20s restart: unless-stopped automation-worker: build: ./backend profiles: [automation] env_file: - ./backend/.env environment: DEPLOYMENT_PROFILE: managed_supabase CHATTY_JOB_QUEUE_URL: redis://automation-redis:6379/0 CHATTY_WEBHOOK_STREAM: chatty:webhooks PORT: 8000 command: ["python", "-m", "app.workers.webhook_worker"] depends_on: automation-redis: condition: service_healthy restart: unless-stopped campaign-scheduler: build: ./backend profiles: [automation] env_file: - ./backend/.env environment: DEPLOYMENT_PROFILE: managed_supabase CHATTY_JOB_QUEUE_URL: redis://automation-redis:6379/0 CHATTY_WEBHOOK_STREAM: chatty:webhooks CHATTY_CAMPAIGN_SCHEDULER_INTERVAL: ${CHATTY_CAMPAIGN_SCHEDULER_INTERVAL:-30} PORT: 8000 command: ["python", "-m", "app.workers.campaign_scheduler"] depends_on: automation-redis: condition: service_healthy restart: unless-stopped event-log-worker: build: ./backend profiles: [automation] env_file: - ./backend/.env environment: DEPLOYMENT_PROFILE: managed_supabase PORT: 8000 command: ["python", "-m", "app.workers.event_log_worker"] restart: unless-stopped waha: image: devlikeappro/waha:latest profiles: [waha] restart: unless-stopped ports: - "${WAHA_PORT:-3001}:3000" environment: WHATSAPP_DEFAULT_ENGINE: NOWEB WAHA_ZIPPER: 1 WAHA_DASHBOARD_ENABLED: "True" volumes: - waha-data:/app/.sessions frontend: build: context: ./frontend args: NEXT_PUBLIC_SUPABASE_URL: ${NEXT_PUBLIC_SUPABASE_URL:?Set NEXT_PUBLIC_SUPABASE_URL in .env} NEXT_PUBLIC_SUPABASE_ANON_KEY: ${NEXT_PUBLIC_SUPABASE_ANON_KEY:?Set NEXT_PUBLIC_SUPABASE_ANON_KEY in .env} NEXT_PUBLIC_BACKEND_URL: ${NEXT_PUBLIC_BACKEND_URL:-http://localhost:8000} NEXT_PUBLIC_LEMON_PORTAL_URL: ${NEXT_PUBLIC_LEMON_PORTAL_URL:-} env_file: - ./frontend/.env environment: NODE_ENV: production PORT: 3000 ports: - "${FRONTEND_PORT:-3000}:3000" depends_on: backend: condition: service_healthy restart: unless-stopped volumes: automation-redis-data: waha-data: