volumes:
  production_postgres_data: {}
  production_postgres_data_backups: {}
  production_traefik: {}

  production_redis_data: {}

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/production/django/Dockerfile

    image: smoothschedule_production_django
    depends_on:
      - postgres
      - redis
    env_file:
      - ./.envs/.production/.django
      - ./.envs/.production/.postgres
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: smoothschedule_production_postgres
    volumes:
      - production_postgres_data:/var/lib/postgresql/data
      - production_postgres_data_backups:/backups
    env_file:
      - ./.envs/.production/.postgres

  traefik:
    build:
      context: .
      dockerfile: ./compose/production/traefik/Dockerfile
    image: smoothschedule_production_traefik
    depends_on:
      - django
    volumes:
      - production_traefik:/etc/traefik/acme
    env_file:
      - ./.envs/.production/.django
    ports:
      - '0.0.0.0:80:80'
      - '0.0.0.0:443:443'
      - '0.0.0.0:5555:5555'

  nginx:
    build:
      context: ../frontend
      dockerfile: Dockerfile.prod
      args:
        VITE_API_URL: https://api.smoothschedule.com
    depends_on:
      - django
    ports:
      - "8080:80" # Expose internally for Traefik
  redis:
    image: docker.io/redis:7.2

    volumes:
      - production_redis_data:/data

  celeryworker:
    <<: *django
    image: smoothschedule_production_celeryworker
    command: /start-celeryworker

  celerybeat:
    <<: *django
    image: smoothschedule_production_celerybeat
    command: /start-celerybeat

  flower:
    <<: *django
    image: smoothschedule_production_flower
    command: /start-flower

  awscli:
    build:
      context: .
      dockerfile: ./compose/production/aws/Dockerfile
    env_file:
      - ./.envs/.production/.django
    volumes:
      - production_postgres_data_backups:/backups:z
