version: "3.9"

services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2022-latest
    platform: linux/amd64
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: ${MSSQL_PASSWORD}
      MSSQL_PID: Developer
    volumes:
      - mssql_dev_data:/var/opt/mssql
      - ../util/Migrator:/mnt/migrator/
      - ./helpers/mssql:/mnt/helpers
      - ./.data/mssql:/mnt/data
    ports:
      - "1433:1433"
    profiles:
      - cloud
      - mssql

  storage:
    image: mcr.microsoft.com/azure-storage/azurite:latest
    ports:
      - "10000:10000"
      - "10001:10001"
      - "10002:10002"
    volumes:
      - ./.data/azurite:/data
    profiles:
      - storage
      - cloud

  mail:
    image: sj26/mailcatcher:latest
    ports:
      - "${MAILCATCHER_PORT}:1080"
      - "10250:1025"
    profiles:
      - mail

  postgres:
    image: postgres:14
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: vault_dev
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - postgres_dev_data:/var/lib/postgresql/data
      - ./.data/postgres/config:/etc/postgresql
      - ./.data/postgres/log:/var/log/postgresql
    profiles:
      - postgres

  mysql:
    image: mysql:8.0
    container_name: bw-mysql
    ports:
      - "3306:3306"
    command:
      - --default-authentication-plugin=mysql_native_password
      - --innodb-print-all-deadlocks=ON
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: vault_dev
    volumes:
      - mysql_dev_data:/var/lib/mysql
    profiles:
      - mysql

  idp:
    image: kenchan0130/simplesamlphp:1.19.8
    container_name: idp
    ports:
      - "8090:8080"
    environment:
      SIMPLESAMLPHP_SP_ENTITY_ID: ${IDP_SP_ENTITY_ID}
      SIMPLESAMLPHP_SP_ASSERTION_CONSUMER_SERVICE: ${IDP_SP_ACS_URL}
      SIMPLESAMLPHP_SP_SINGLE_LOGOUT_SERVICE: null
    volumes:
      - ./authsources.php:/var/www/simplesamlphp/config/authsources.php
    profiles:
      - idp

  rabbitmq:
    image: rabbitmq:management
    container_name: rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq_data
    profiles:
      - rabbitmq

  reverse-proxy:
    image: nginx:alpine
    container_name: reverse-proxy
    volumes:
      - "./reverse-proxy.conf:/etc/nginx/conf.d/default.conf"
    ports:
      - "${API_PROXY_PORT}:${API_PROXY_PORT}"
      - "${IDENTITY_PROXY_PORT}:${IDENTITY_PROXY_PORT}"
    profiles:
      - proxy

  service-bus:
    container_name: service-bus
    image: mcr.microsoft.com/azure-messaging/servicebus-emulator:latest
    pull_policy: always
    volumes:
      - "./servicebusemulator_config.json:/ServiceBus_Emulator/ConfigFiles/Config.json"
    ports:
      - "5672:5672"
    environment:
      SQL_SERVER: mssql
      MSSQL_SA_PASSWORD: "${MSSQL_PASSWORD}"
      ACCEPT_EULA: "Y"
    profiles:
      - servicebus

volumes:
  mssql_dev_data:
  postgres_dev_data:
  mysql_dev_data:
  rabbitmq_data: