services:
  # mysql
  mysql:
    image: "mysql:5.7.37"
    container_name: "typeorm-mysql"
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "admin"
      MYSQL_USER: "test"
      MYSQL_PASSWORD: "test"
      MYSQL_DATABASE: "test"

  # mariadb
  mariadb:
    image: "mariadb:10.11.13"
    container_name: "typeorm-mariadb"
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "admin"
      MYSQL_USER: "test"
      MYSQL_PASSWORD: "test"
      MYSQL_DATABASE: "test"

  # postgres
  postgres14:
    # postgis is postgres + PostGIS (only). If you need additional extensions,
    # it's probably time to create a purpose-built image.
    image: "postgis/postgis:14-3.5"
    container_name: "typeorm-postgres14"
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: "test"
      POSTGRES_PASSWORD: "test"
      POSTGRES_DB: "test"

  # postgres
  postgres:
    # postgis is postgres + PostGIS (only). If you need additional extensions,
    # it's probably time to create a purpose-built image.
    image: "postgis/postgis:17-3.5"
    container_name: "typeorm-postgres"
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: "test"
      POSTGRES_PASSWORD: "test"
      POSTGRES_DB: "test"

  # mssql
  mssql:
    image: "mcr.microsoft.com/mssql/server:2022-latest"
    container_name: "typeorm-mssql"
    ports:
      - "1433:1433"
    environment:
      SA_PASSWORD: "Admin12345"
      ACCEPT_EULA: "Y"

  # cockroachdb
  cockroachdb:
    image: "cockroachdb/cockroach:v24.3.8"
    container_name: "typeorm-cockroachdb"
    command: "start-single-node --insecure --cache=.25 --store=type=mem,size=.25"
    ports:
      - "26257:26257"
    # volumes:
    #   - cockroach-data:/cockroach/cockroach-data

  # oracle
  oracle:
    image: "container-registry.oracle.com/database/free:23.7.0.0-lite"
    container_name: "typeorm-oracle"
    ports:
      - "1521:1521"
    environment:
      ORACLE_PWD: "oracle"
      ORACLE_SID: "FREE"
    volumes:
      # - oracle-data:/opt/oracle/oradata
      - ./docker/oracle/startup:/opt/oracle/scripts/startup:ro

  # google cloud spanner
  spanner:
    image: alexmesser/spanner-emulator
    container_name: "typeorm-spanner"
    ports:
      - "9010:9010"
      - "9020:9020"

  # sap hana
  # works only on linux, minimum 10GB RAM for docker required
  hanaexpress:
    image: "saplabs/hanaexpress:2.00.076.00.20240701.1"
    container_name: "typeorm-hanaexpress"
    hostname: hxe
    command:
      [
        "--passwords-url",
        "file:////hana/hxe-config.json",
        "--agree-to-sap-license",
      ]
    ulimits:
      nofile: 1048576
    sysctls:
      - kernel.shmall=3145728 # System-wide limit of total shared memory, in 4k pages
      - kernel.shmmax=1073741824 # Maximum shared memory segment sizes
      - kernel.shmmni=4096 # Maximum number of shared memory segments
      - net.ipv4.ip_local_port_range=40000 60999
    volumes:
      - volume-hana-xe:/hana/mounts
      - ./docker/hana/hxe-config.json:/hana/hxe-config.json:ro
    ports:
      - "39041:39041"
    healthcheck:
      test: "/hana/shared/HXE/exe/linuxx86_64/hdb/hdbsql -n localhost:39041 -u SYSTEM -p HXEHana1 \"\\s\""
      interval: 5s

  # mongodb
  mongodb:
    image: "mongo:5.0.31"
    container_name: "typeorm-mongodb"
    ports:
      - "27017:27017"

  # redis
  # redis:
  #   image: "redis:3.0.3"
  #   container_name: "typeorm-redis"
  #   ports:
  #     - "6379:6379"

volumes:
  # cockroach-data:
  # oracle-data:
  volume-hana-xe:
