version: "3.9"

services:
  mssql:
    image: mcr.microsoft.com/azure-sql-edge:latest
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: ${MSSQL_PASSWORD}
      MSSQL_PID: Developer
    volumes:
      - edgesql_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
    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

  open-ldap:
    image: osixia/openldap:1.5.0
    command: --copy-service
    environment:
      LDAP_ORGANISATION: "Bitwarden"
      LDAP_DOMAIN: "bitwarden.com"
    volumes:
      - ./directory.ldif:/container/service/slapd/assets/config/bootstrap/ldif/output.ldif
    ports:
      - "389:389"
      - "636:636"
    profiles:
      - ldap

  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

volumes:
  edgesql_dev_data:
  postgres_dev_data:
  mysql_dev_data:
