version: '2'

volumes:
  postgres_data: {}
  postgres_backup: {}

services:
  postgres:
    build: ./compose/postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - postgres_backup:/backups
    env_file: .env

  django:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile
    user: django
    depends_on:
      - postgres
      - redis
    command: /gunicorn.sh
    env_file: .env

  nginx:
    build: ./compose/nginx
    depends_on:
      - django
{% if cookiecutter.use_lets_encrypt == 'y' %}
      - certbot
{% endif %}
    ports:
      - "0.0.0.0:80:80"
{% if cookiecutter.use_lets_encrypt == 'y' %}
    environment:
      - MY_DOMAIN_NAME={{ cookiecutter.domain_name }}
    ports:
      - "0.0.0.0:80:80"
      - "0.0.0.0:443:443"
    volumes:
      - /etc/letsencrypt:/etc/letsencrypt
      - /var/lib/letsencrypt:/var/lib/letsencrypt

  certbot:
    image: quay.io/letsencrypt/letsencrypt
    command: bash -c "sleep 6 && certbot certonly -n --standalone -d {{ cookiecutter.domain_name }} --text --agree-tos --email {{ cookiecutter.email }} --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01"
    entrypoint: ""
    volumes:
      - /etc/letsencrypt:/etc/letsencrypt
      - /var/lib/letsencrypt:/var/lib/letsencrypt
    ports:
      - "80"
      - "443"
    environment:
      - TERM=xterm
{% endif %}

  redis:
    image: redis:latest
{% if cookiecutter.use_celery == 'y' %}
  celeryworker:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile
    user: django
    env_file: .env
    depends_on:
     - postgres
     - redis
    command: celery -A {{cookiecutter.project_slug}}.taskapp worker -l INFO

  celerybeat:
    build:
      context: .
      dockerfile: ./compose/django/Dockerfile
    user: django
    env_file: .env
    depends_on:
      - postgres
      - redis
    command: celery -A {{cookiecutter.project_slug}}.taskapp beat -l INFO
{% endif %}
