version: '3.7'
services:
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    #    restart: always
    depends_on:
      - app
      - swagger
    ports:
      - ${DOCKER_NGINX_PORT}:80
  app:
    build:
      context: app
      dockerfile: docker/Dockerfile
      target: PRODUCTION
    #  restart: always
#    cap_drop:
#      - ALL
#    cap_add:
#      - SETGID
#      - SETUID
#      - CHOWN
#      - FOWNER
    depends_on:
      - db
      - redis
      - reverb
    env_file: app/application/.env
  queue:
    build:
      context: app
      dockerfile: docker/Dockerfile
      target: PRODUCTION
    #  restart: always
    depends_on:
      - db
      - redis
    environment:
      CONTAINER_ROLE: queue
    volumes:
      - ./app/application:/var/www/html
  reverb:
    build:
      context: app
      dockerfile: docker/Dockerfile
      target: PRODUCTION
    #  restart: always
    depends_on:
      - db
      - redis
    environment:
      CONTAINER_ROLE: websockets
    ports:
      - ${DOCKER_WEBSOCKET_PORT}:9000
    volumes:
      - ./app/application:/var/www/html
  scheduler:
    build:
      context: app
      dockerfile: docker/Dockerfile
      target: PRODUCTION
    #  restart: always
    depends_on:
      - db
      - redis
    environment:
      CONTAINER_ROLE: scheduler
    volumes:
      - ./app/application:/var/www/html
  swagger:
    image: swaggerapi/swagger-ui
    #  restart: always
    depends_on:
      - app
    environment:
      URLS: "[ { url: '/swagger.json', name: '/swagger.json' } ]"
      BASE_URL: /api-docs
  redis:
    image: redis:3.0-alpine
    #  restart: always
  db:
    image: docker.io/mysql:8.0.33
    command: --default-authentication-plugin=mysql_native_password
    #restart: always
    ports:
      - ${DOCKER_DB_PORT}:3306
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./db/data:/var/lib/mysql
