volumes:
  production_postgres_data: {}
  production_postgres_data_backups: {}
  production_traefik: {}
  {%- if cookiecutter.cloud_provider == 'None' %}
  production_django_media: {}
  {%- endif %}
  {% if cookiecutter.use_celery == 'y' %}
  production_redis_data: {}
  {% endif %}


services:
  django:{% if cookiecutter.use_celery == 'y' %} &django{% endif %}
    build:
      context: .
      dockerfile: ./compose/production/django/Dockerfile
      {%- if cookiecutter.frontend_pipeline == 'Webpack' and cookiecutter.use_whitenoise == 'n' %}
      args:
        # These variable can be defined in an .env file in the root of the repo
        {%- if cookiecutter.cloud_provider == 'AWS' %}
        DJANGO_AWS_STORAGE_BUCKET_NAME: ${DJANGO_AWS_STORAGE_BUCKET_NAME}
        DJANGO_AWS_S3_CUSTOM_DOMAIN: ${DJANGO_AWS_S3_CUSTOM_DOMAIN}
        {%- elif cookiecutter.cloud_provider == 'GCP' %}
        DJANGO_GCP_STORAGE_BUCKET_NAME: ${DJANGO_GCP_STORAGE_BUCKET_NAME}
        {%- elif cookiecutter.cloud_provider == 'Azure' %}
        DJANGO_AZURE_ACCOUNT_NAME: ${DJANGO_AZURE_ACCOUNT_NAME}
        {%- endif %}
      {%- endif %}

    image: {{ cookiecutter.project_slug }}_production_django
    {%- if cookiecutter.cloud_provider == 'None' %}
    volumes:
      - production_django_media:/app/{{ cookiecutter.project_slug }}/media
    {%- endif %}
    depends_on:
      - postgres
      - redis
    env_file:
      - ./.envs/.production/.django
      - ./.envs/.production/.postgres
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: {{ cookiecutter.project_slug }}_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: {{ cookiecutter.project_slug }}_production_traefik
    depends_on:
      - django
    volumes:
      - production_traefik:/etc/traefik/acme
    ports:
      - '0.0.0.0:80:80'
      - '0.0.0.0:443:443'
      {%- if cookiecutter.use_celery == 'y' %}
      - '0.0.0.0:5555:5555'
      {%- endif %}

  redis:
    image: docker.io/redis:6
    {% if cookiecutter.use_celery == 'y' %}
    volumes:
      - production_redis_data:/data
    {% endif %}


  {%- if cookiecutter.use_celery == 'y' %}

  celeryworker:
    <<: *django
    image: {{ cookiecutter.project_slug }}_production_celeryworker
    command: /start-celeryworker

  celerybeat:
    <<: *django
    image: {{ cookiecutter.project_slug }}_production_celerybeat
    command: /start-celerybeat

  flower:
    <<: *django
    image: {{ cookiecutter.project_slug }}_production_flower
    command: /start-flower
  {%- endif %}
  {%- if cookiecutter.cloud_provider == 'AWS' %}

  awscli:
    build:
      context: .
      dockerfile: ./compose/production/aws/Dockerfile
    env_file:
      - ./.envs/.production/.django
    volumes:
      - production_postgres_data_backups:/backups:z
  {%- endif %}
  {%- if cookiecutter.cloud_provider == 'None' %}

  nginx:
    build:
      context: .
      dockerfile: ./compose/production/nginx/Dockerfile
    image: {{ cookiecutter.project_slug }}_production_nginx
    depends_on:
      - django
    volumes:
      - production_django_media:/usr/share/nginx/media:ro
  {%- endif %}
