version: '3'

services:
  redis:
    image: 'redis:6.0.5'
    command: redis-server

  postgres:
    image: postgres:12.5
    environment:
      - POSTGRES_USER=airflow
      - POSTGRES_PASSWORD=airflow
      - POSTGRES_DB=airflow
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    ports:
      - 5432:5432

  webserver:
    image: apache/airflow:2.1.2
    restart: "no"
    build: .
    depends_on:
      - postgres
      - redis
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_USER=airflow
      - POSTGRES_PASSWORD=airflow
      - POSTGRES_DB=airflow
      - FERNET_KEY=${AIRFLOW_FERNET_KEY}
      - AIRFLOW_BASE_URL=http://localhost:8080
      - STAGE=dev
      - IS_LOCAL=true
    volumes:
        - ./dags:/mnt/efs/fansifter-airflow/dags
        - ./plugins:/mnt/efs/fansifter-airflow/plugins
        - $HOME/.aws:/usr/local/airflow/.aws:ro
    ports:
        - "8080:8080"
    command: webserver
    healthcheck:
      test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
      interval: 30s
      timeout: 30s
      retries: 3

  flower:
    image: apache/airflow:2.1.2
    restart: "no"
    depends_on:
      - redis
      - webserver
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_USER=airflow
      - POSTGRES_PASSWORD=airflow
      - POSTGRES_DB=airflow
      - STAGE=dev
      - IS_LOCAL=true
    ports:
      - "5555:5555"
    command: flower

  scheduler:
    image: apache/airflow:2.1.2
    restart: "no"
    depends_on:
      - webserver
    volumes:
      - ./dags:/mnt/efs/fansifter-airflow/dags
      - ./plugins:/mnt/efs/fansifter-airflow/plugins
      - $HOME/.aws:/usr/local/airflow/.aws:ro
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_USER=airflow
      - POSTGRES_PASSWORD=airflow
      - POSTGRES_DB=airflow
      - FERNET_KEY=${AIRFLOW_FERNET_KEY}
      - AIRFLOW_BASE_URL=http://localhost:8080
      - STAGE=dev
      - IS_LOCAL=true
    command: scheduler

  worker:
    image: apache/airflow:2.1.2
    restart: "no"
    depends_on:
      - webserver
      - scheduler
    volumes:
      - ./dags:/mnt/efs/fansifter-airflow/dags
      - ./plugins:/mnt/efs/fansifter-airflow/plugins
      - $HOME/.aws:/usr/local/airflow/.aws:ro
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_USER=airflow
      - POSTGRES_PASSWORD=airflow
      - POSTGRES_DB=airflow
      - FERNET_KEY=${AIRFLOW_FERNET_KEY}
      - AIRFLOW_BASE_URL=http://localhost:8080
      - STAGE=dev
      - IS_LOCAL=true
    command: worker