Skip to main content
The entire application runs via Docker Compose. All services are defined in docker-compose.yml at the repo root. This page summarizes each service, its role, ports, and dependencies.

Services

Environment

  • web, celery, beat: DATABASE_URL, CELERY_BROKER_URL, CELERY_RESULT_BACKEND (and optional S3_BUCKET_NAME for beat/celery).
  • admin-portal: DATABASE_URL, OPENCAGE_API_KEY (for geocoding when editing user location).
  • db: POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB.
Other env (e.g. WHATSAPP_PHONE_NUMBER_ID, WHATSAPP_ACCESS_TOKEN, OPENCAGE_API_KEY for web) are typically set via .env or passed in the compose file.

Volumes

  • postgres_data — PostgreSQL data.
  • redis_data — Redis persistence.
  • beat_schedule — Celery Beat schedule file (e.g. /tmp in beat container).
  • caddy_data, caddy_config — Caddy TLS and config cache.
  • Bind mounts: .:/app (web, celery, beat), ./backups:/backups (web, celery, beat, admin-portal), ./caddy/Caddyfile, ./ngrok_config/ngrok.yml.

Running

  • Standard: docker compose up -d — starts all services except ngrok.
  • With ngrok: docker compose --profile dev up -d — also starts ngrok for local webhook testing.
See Quickstart and Caddy, Ngrok for production vs development usage.