# This compose file is meant to spin up a copy of supported database vendors,
# Redis, S3 (RustFS) and a fake SMTP server (MailDev).
#
# ONLY FOR DEBUGGING. THIS IS NOT INTENDED FOR PRODUCTION USE.
#
# For production use see the docker compose file example in the docs:
#    https://directus.com/docs/self-hosting/deploying#docker-compose-examples
#
# For receiving emails via MailDev, you'll need to add the following to your env:
#   EMAIL_FROM=directus@directus.io
#   EMAIL_TRANSPORT=smtp
#   EMAIL_SMTP_HOST=0.0.0.0
#   EMAIL_SMTP_PORT=1025
#
# Ports:
#   Maildev SMTP:    1025
#   Maildev Web-UI:  1080
#   Postgres:        5100
#   MySQL:           5101
#   MariaDB:         5102
#   MS SQL:          5103
#   Oracle:          5104
#   Redis:           5105
#   RustFS (S3):     5106
#   Azure            5107
#   Keycloak:        5110
#   RustFS Admin:    5112
#   CockroachDB:     5113
#
# Credentials:
#   Postgres:
#     User:          postgres
#     Password:      secret
#
#   MySQL:
#     User:          root
#     Password:      secret
#
#   MariaDB:
#     User:          root
#     Password:      secret
#
#   MS SQL:
#     User:          sa
#     Password:      Test@123
#
#   Oracle DB:
#     User:          secretsysuser
#     Password:      secretpassword
#     Service Name:  FREEPDB1
#
#   Redis:
#     n/a
#
#   RustFS:
#     Key:           rustfsadmin
#     Secret:        rustfsadmin
#     (Make sure to set S3_FORCE_PATH_STYLE to true)
#
#   Azure Blob Storage
#     Name:          devstoreaccount1
#     Key:           Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==
#     Container:     devstoreaccount1
#
#   Keycloak
#     User:          admin
#     Password:      secret
#
#   CockroachDB
#     User:          admin
#     Password:      --

services:
  postgres:
    image: postgis/postgis:18-3.6-alpine
    platform: linux/amd64 # postgis publishes no arm64 build
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: directus
    ports:
      - 5100:5432

  mysql:
    image: mysql:9.7
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: directus
    ports:
      - 5101:3306

  maria:
    image: mariadb:12.3
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: directus
    ports:
      - 5102:3306

  mssql:
    image: mcr.microsoft.com/mssql/server:2025-latest
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_SA_PASSWORD=Test@123
    ports:
      - 5103:1433

  oracle:
    image: gvenzl/oracle-free:23-slim
    ports:
      - 5104:1521
    environment:
      - ORACLE_PASSWORD=secretpassword
      - APP_USER=secretsysuser
      - APP_USER_PASSWORD=secretpassword
    shm_size: '1gb' # more like smh-size amirite 🥁

  cockroachdb:
    image: cockroachdb/cockroach:latest-v25.4
    command: start-single-node --cluster-name=example-single-node --insecure --store=type=mem,size=4GB
    ports:
      - 5113:26257

  redis:
    image: ${REDIS_IMAGE:-redis:8-alpine}
    ports:
      - 5105:6379

  rustfs:
    image: rustfs/rustfs:1.0.0-rc.6
    environment:
      RUSTFS_ACCESS_KEY: rustfsadmin
      RUSTFS_SECRET_KEY: rustfsadmin
      RUSTFS_CONSOLE_ENABLE: 'true'
    ports:
      - 5106:9000
      - 5112:9001

  azure:
    image: mcr.microsoft.com/azure-storage/azurite
    ports:
      - 5107:10000

  keycloak:
    image: quay.io/keycloak/keycloak
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: secret
    ports:
      - 5110:8080
    command:
      - start-dev

  maildev:
    image: maildev/maildev
    ports:
      - 1025:1025
      - 1080:1080