Cloud-CV/EvalAI

View on GitHub
docker-compose-production.yml

Summary

Maintainability
Test Coverage
version: "3"
services:
  memcached:
    image: memcached:1.6.15
    ports:
      - "11211:11211"

  django:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-backend:${COMMIT_ID}
    env_file:
      - docker/prod/docker_production.env
    build:
      context: ./
      dockerfile: docker/prod/django/Dockerfile
    ports:
      - "8000:8000"
    logging:
      driver: awslogs
      options:
        awslogs-region: ${AWS_DEFAULT_REGION}
        awslogs-group: django_production
        awslogs-create-group: "true"

  celery:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-celery:${COMMIT_ID}
    env_file:
      - docker/prod/docker_production.env
    build:
      context: ./
      dockerfile: docker/prod/celery/Dockerfile
    depends_on:
      - django
    logging:
      driver: awslogs
      options:
        awslogs-region: ${AWS_DEFAULT_REGION}
        awslogs-group: celery_production
        awslogs-create-group: "true"

  worker:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-worker:${COMMIT_ID}
    build:
      context: ./
      dockerfile: docker/prod/worker/Dockerfile
    env_file:
      - docker/prod/docker_production.env

  worker_py3.8:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-worker-py3.8:${COMMIT_ID}
    build:
      context: ./
      dockerfile: docker/prod/worker_py3.8/Dockerfile
    env_file:
      - docker/prod/docker_production.env

  nodejs:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-frontend:${COMMIT_ID}
    build:
      context: ./
      dockerfile: docker/prod/nodejs/Dockerfile
      args:
        NODE_ENV: production
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /code/node_modules
      - /code/bower_components
    logging:
      driver: awslogs
      options:
        awslogs-region: ${AWS_DEFAULT_REGION}
        awslogs-group: nodejs_production
        awslogs-create-group: "true"

  remote-worker:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-remote-worker:${COMMIT_ID}
    build:
      context: ./
      dockerfile: docker/prod/worker/Dockerfile
    command: ["python", "-m", "scripts.workers.remote_submission_worker"]
    env_file:
      - docker/prod/docker_remote_worker.env

  code-upload-worker:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-code-upload-worker:${COMMIT_ID}
    env_file:
      - docker/prod/docker_code_upload_worker.env
    build:
      context: ./
      dockerfile: docker/prod/code-upload-worker/Dockerfile

  prometheus:
    hostname: prometheus
    image: prom/prometheus:latest
    user: "1000"
    volumes:
      - ./monitoring/prometheus/prometheus_production.yml:/etc/prometheus/prometheus.yml
      - ./monitoring/prometheus/rules.yml:/etc/rules/rules.yml
      - ./monitoring/prometheus/prometheus_db:/var/lib/prometheus
      - ./monitoring/prometheus/prometheus_db:/prometheus
      - ./monitoring/prometheus/prometheus_db:/etc/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--web.external-url=http://localhost:9090/prometheus'
    ports:
      - '9090:9090'

  grafana:
    hostname: grafana
    image: grafana/grafana:latest
    user: "1000"
    env_file:
      - docker/prod/docker_production.env
    volumes:
      - ./monitoring/grafana/grafana_db:/var/lib/grafana
    depends_on:
      - prometheus
    ports:
      - '3000:3000'

  statsd-exporter:
    hostname: statsd
    image: prom/statsd-exporter:latest
    command:
      - '--log.level=info'
      - '--web.telemetry-path=/statsd/metrics'
    ports:
      - '9125:9125/udp'
      - '9125:9125/tcp'
      - '9102:9102'

  node_exporter:
    hostname: node_exporter
    image: prom/node-exporter
    ports:
      - '9100:9100'

  nginx-ingress:
    image: ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/evalai-production-nginx-ingress:${COMMIT_ID}
    build:
      context: ./
      dockerfile: docker/prod/nginx-ingress/Dockerfile
      args:
        MONITORING_ENV: production
    depends_on:
      - prometheus
      - grafana
      - statsd-exporter
      - alert-manager
    ports:
      - '80:80'
      - '443:443'

  alert-manager:
    hostname: alert_manager
    image: prom/alertmanager:v0.24.0
    user: "1000"
    volumes:
      - ./monitoring/prometheus:/prometheus
      - ./monitoring/alertmanager/data:/data
      - ./monitoring/alertmanager/templates:/etc/alertmanager/templates
    command:
      - '--config.file=/prometheus/alert_manager.yml'
      - '--storage.path=/data'
      - '--web.external-url=http://localhost:9093/alert_manager'
    ports:
      - '9093:9093'