# 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