version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - 1333:80
    depends_on:
      - web
    networks:
      - main
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - static_volume:/app/static
      - media_volume:/app/images
  db:
    image: postgres
    env_file: .env
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - main
  web:
    build: .
    env_file: .env
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
      - static_volume:/app/static
      - media_volume:/app/images
    depends_on:
      - db
      - celery_worker
      - redis_activity
    networks:
      - main
    ports:
      - 8000:8000
  redis_activity:
    image: redis
    command: redis-server --requirepass ${REDIS_ACTIVITY_PASSWORD} --appendonly yes --port ${REDIS_ACTIVITY_PORT}
    env_file: .env
    networks:
      - main
    restart: on-failure
    volumes:
      - ./redis.conf:/etc/redis/redis.conf
      - redis_activity_data:/data
  redis_broker:
    image: redis
    command: redis-server --requirepass ${REDIS_BROKER_PASSWORD} --appendonly yes --port ${REDIS_BROKER_PORT}
    env_file: .env
    ports:
      - 6379:6379
    networks:
      - main
    restart: on-failure
    volumes:
      - ./redis.conf:/etc/redis/redis.conf
      - redis_broker_data:/data
  celery_worker:
    env_file: .env
    build: .
    networks:
      - main
    command: celery -A celerywyrm worker -l info -Q high_priority,medium_priority,low_priority
    volumes:
      - .:/app
      - static_volume:/app/static
      - media_volume:/app/images
    depends_on:
      - db
      - redis_broker
    restart: on-failure
  flower:
    build: .
    command: celery -A celerywyrm flower
    env_file: .env
    ports:
      - ${FLOWER_PORT}:${FLOWER_PORT}
    volumes:
      - .:/app
    networks:
      - main
    depends_on:
      - db
      - redis_broker
    restart: on-failure
volumes:
  pgdata:
  static_volume:
  media_volume:
  redis_broker_data:
  redis_activity_data:
networks:
  main: