version: "3.9"

networks:
  # Network for your internals, use it by default:
  webnet:
    name:
      github_network

volumes:
  pgdata:
    name: github_pgdata

networks:
  # Network for your internals, use it by default:
  webnet:
    name:
      github_network

volumes:
  pgdata:
    name: github_pgdata

services:
  db:
    image: "postgres:14.4"
    container_name: github_db
    restart: unless-stopped
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - webnet
    env_file: ./config/.env
    ports:
      - "5431:5432"

  rabbitmq:
    hostname: rabbitmq_host
    image: 'rabbitmq:3.10.5-management-alpine'
    container_name: github_rabbit
    env_file: config/.env
    restart: unless-stopped
    networks:
      - webnet
    ports:
      - "8080:15672"
      - "5672:5672"

  web:
    image: "github-repos"
    container_name: github_web
    build:
      context: .
      dockerfile: ./docker/django/Dockerfile
#      args:
#        DJANGO_ENV: development
      cache_from:
        - "github-repos:dev"
        - "github-repos:latest"
#      volumes:
#        - django-static:/var/www/django/static
    restart: unless-stopped
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    networks:
      - webnet
    env_file: ./config/.env
    command: >
      bash -c "python manage.py makemigrations
      && python manage.py migrate
      && python manage.py compilemessages
      && python manage.py create_superuser
      && python -Wd manage.py runserver 0.0.0.0:8000"
    healthcheck:
      # We use `$$` here because:
      # one `$` goes to shell,
      # one `$` goes to `docker-compose.yml` escaping
      test: |
        /usr/bin/test $$(
          /usr/bin/curl --fail http://localhost:8000/health/?format=json
          --write-out "%{http_code}" --silent --output /dev/null
        ) -eq 200
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  worker:
    container_name: github_celery_worker
    image: "github-repos"
    command: celery --app=server.apps.main.commands:celery_app worker --loglevel=INFO
    env_file: config/.env
    depends_on:
      - rabbitmq
      - web
    restart: unless-stopped
    networks:
      - webnet

  flower:
    container_name: github_celery_flower
    image: "github-repos"
    command: celery --app=server.apps.main.commands:celery_app flower --loglevel=INFO
    env_file: config/.env
    depends_on:
      - rabbitmq
      - web
    restart: unless-stopped
    ports:
      - "5555:5555"
    networks:
      - webnet

# This task is an example of how to extend existing ones:
#   some_worker:
#     <<: *web
#     command: python manage.py worker_process
