version: '3'

volumes:
  {{ cookiecutter.project_slug }}_local_postgres_data: {}
  {{ cookiecutter.project_slug }}_local_postgres_data_backups: {}

services:
  django:{% if cookiecutter.use_celery == 'y' %} &django{% endif %}
    build:
      context: .
      dockerfile: ./compose/local/django/Dockerfile
    image: {{ cookiecutter.project_slug }}_local_django
    container_name: {{ cookiecutter.project_slug }}_local_django
    platform: linux/x86_64
    depends_on:
      - postgres
      {%- if cookiecutter.use_celery == 'y' %}
      - redis
      {%- endif %}
      {%- if cookiecutter.use_mailhog == 'y' %}
      - mailhog
      {%- endif %}
    volumes:
      - .:/app:z
    env_file:
      - ./.envs/.local/.django
      - ./.envs/.local/.postgres
    ports:
      - "8000:8000"
    command: /start

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: {{ cookiecutter.project_slug }}_production_postgres
    container_name: {{ cookiecutter.project_slug }}_local_postgres
    volumes:
      - {{ cookiecutter.project_slug }}_local_postgres_data:/var/lib/postgresql/data:Z
      - {{ cookiecutter.project_slug }}_local_postgres_data_backups:/backups:z
    env_file:
      - ./.envs/.local/.postgres

  docs:
    image: {{ cookiecutter.project_slug }}_local_docs
    container_name: {{ cookiecutter.project_slug }}_local_docs
    platform: linux/x86_64
    build:
      context: .
      dockerfile: ./compose/local/docs/Dockerfile
    env_file:
      - ./.envs/.local/.django
    volumes:
      - ./docs:/docs:z
      - ./config:/app/config:z
      - ./{{ cookiecutter.project_slug }}:/app/{{ cookiecutter.project_slug }}:z
    ports:
      - "9000:9000"
    command: /start-docs
  {%- if cookiecutter.use_mailhog == 'y' %}

  mailhog:
    image: mailhog/mailhog:v1.0.0
    container_name: {{ cookiecutter.project_slug }}_local_mailhog
    ports:
      - "8025:8025"

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

  redis:
    image: redis:6
    container_name: {{ cookiecutter.project_slug }}_local_redis

  celeryworker:
    <<: *django
    image: {{ cookiecutter.project_slug }}_local_celeryworker
    container_name: {{ cookiecutter.project_slug }}_local_celeryworker
    depends_on:
      - redis
      - postgres
      {%- if cookiecutter.use_mailhog == 'y' %}
      - mailhog
      {%- endif %}
    ports: []
    command: /start-celeryworker

  celerybeat:
    <<: *django
    image: {{ cookiecutter.project_slug }}_local_celerybeat
    container_name: {{ cookiecutter.project_slug }}_local_celerybeat
    depends_on:
      - redis
      - postgres
      {%- if cookiecutter.use_mailhog == 'y' %}
      - mailhog
      {%- endif %}
    ports: []
    command: /start-celerybeat

  flower:
    <<: *django
    image: {{ cookiecutter.project_slug }}_local_flower
    container_name: {{ cookiecutter.project_slug }}_local_flower
    ports:
      - "5555:5555"
    command: /start-flower

  {%- endif %}
  {%- if cookiecutter.frontend_pipeline == 'Gulp' %}

  node:
    build:
      context: .
      dockerfile: ./compose/local/node/Dockerfile
    image: {{ cookiecutter.project_slug }}_local_node
    container_name: {{ cookiecutter.project_slug }}_local_node
    depends_on:
      - django
    volumes:
      - .:/app:z
      # http://jdlm.info/articles/2016/03/06/lessons-building-node-app-docker.html
      - /app/node_modules
    command: npm run dev
    ports:
      - "3000:3000"
      # Expose browsersync UI: https://www.browsersync.io/docs/options/#option-ui
      - "3001:3001"

  {%- endif %}
