Registry testing - part 9

This commit is contained in:
Maurus Decimus
2026-03-19 19:29:17 +01:00
parent 7ae6654735
commit a67921f18c
57 changed files with 2886 additions and 1312 deletions

View File

@@ -0,0 +1,248 @@
###############################################################################
# Stalwart Test Infrastructure
# All services are ephemeral (no volumes = fresh on every restart)
# Ports exposed on localhost; 80/443/8080 are remapped
###############################################################################
services:
# ---------------------------------------------------------------------------
# Init: generate shared self-signed TLS certificates
# ---------------------------------------------------------------------------
cert-init:
image: alpine/openssl:latest
volumes:
- certs:/certs
- ./scripts/gen-certs.sh:/gen-certs.sh:ro
entrypoint: [ "sh", "/gen-certs.sh" ]
# ---------------------------------------------------------------------------
# PostgreSQL
# ---------------------------------------------------------------------------
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: stalwart
POSTGRES_PASSWORD: stalwart
POSTGRES_DB: stalwart
ports:
- "127.0.0.1:5432:5432"
tmpfs:
- /var/lib/postgresql/data
# ---------------------------------------------------------------------------
# MySQL
# ---------------------------------------------------------------------------
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: stalwart
MYSQL_DATABASE: stalwart
MYSQL_USER: stalwart
MYSQL_PASSWORD: stalwart
ports:
- "127.0.0.1:3306:3306"
tmpfs:
- /var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
# ---------------------------------------------------------------------------
# FoundationDB
# ---------------------------------------------------------------------------
foundationdb:
image: foundationdb/foundationdb:7.3.43
platform: linux/amd64
ports:
- "127.0.0.1:4500:4500"
environment:
FDB_NETWORKING_MODE: container
volumes:
- fdb-config:/var/fdb
tmpfs:
- /var/fdb/data
- /var/fdb/logs
fdb-init:
image: foundationdb/foundationdb:7.3.43
platform: linux/amd64
depends_on:
- foundationdb
volumes:
- fdb-config:/var/fdb
- ./scripts/init-fdb.sh:/init-fdb.sh:ro
entrypoint: [ "bash", "/init-fdb.sh" ]
# ---------------------------------------------------------------------------
# Redis
# ---------------------------------------------------------------------------
redis:
image: redis:7-alpine
ports:
- "127.0.0.1:6379:6379"
command: redis-server --save "" --appendonly no
# ---------------------------------------------------------------------------
# OpenSearch (ElasticSearch-compatible)
# ---------------------------------------------------------------------------
opensearch:
image: opensearchproject/opensearch:2
environment:
discovery.type: single-node
DISABLE_SECURITY_PLUGIN: "true"
OPENSEARCH_JAVA_OPTS: "-Xms256m -Xmx256m"
DISABLE_INSTALL_DEMO_CONFIG: "true"
ports:
- "127.0.0.1:9200:9200"
tmpfs:
- /usr/share/opensearch/data:uid=1000,gid=1000
# ---------------------------------------------------------------------------
# Meilisearch
# ---------------------------------------------------------------------------
meilisearch:
image: getmeili/meilisearch:latest
environment:
MEILI_ENV: development
MEILI_NO_ANALYTICS: "true"
MEILI_MASTER_KEY: stalwart-master-key
ports:
- "127.0.0.1:7700:7700"
tmpfs:
- /meili_data
# ---------------------------------------------------------------------------
# MinIO (S3-compatible)
# ---------------------------------------------------------------------------
minio:
image: minio/minio:latest
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
ports:
- "127.0.0.1:9000:9000"
- "127.0.0.1:9001:9001"
command: server /data --console-address ":9001"
tmpfs:
- /data
minio-init:
image: minio/mc:latest
depends_on:
- minio
volumes:
- ./scripts/init-minio.sh:/init-minio.sh:ro
entrypoint: [ "bash", "/init-minio.sh" ]
# ---------------------------------------------------------------------------
# Keycloak (OIDC Provider) port 9080 (moved from 8080)
# ---------------------------------------------------------------------------
keycloak:
image: quay.io/keycloak/keycloak:latest
depends_on:
cert-init:
condition: service_completed_successfully
environment:
KC_BOOTSTRAP_ADMIN_USERNAME: admin
KC_BOOTSTRAP_ADMIN_PASSWORD: admin
KC_HTTP_PORT: 9080
KC_HEALTH_ENABLED: "true"
ports:
- "127.0.0.1:9080:9080"
volumes:
- ./keycloak/stalwart-realm.json:/opt/keycloak/data/import/stalwart-realm.json:ro
- certs:/certs:ro
command: >
start-dev --import-realm
tmpfs:
- /opt/keycloak/data:uid=1000,gid=1000
# ---------------------------------------------------------------------------
# OpenLDAP
# ---------------------------------------------------------------------------
openldap:
image: osixia/openldap:1.5.0
depends_on:
cert-init:
condition: service_completed_successfully
environment:
LDAP_ORGANISATION: "Stalwart Test"
LDAP_DOMAIN: "stalwart.test"
LDAP_BASE_DN: "dc=stalwart,dc=test"
LDAP_ADMIN_PASSWORD: "admin"
LDAP_READONLY_USER: "true"
LDAP_READONLY_USER_USERNAME: "readonly"
LDAP_READONLY_USER_PASSWORD: "readonly"
LDAP_TLS: "true"
LDAP_TLS_CRT_FILENAME: "cert.pem"
LDAP_TLS_KEY_FILENAME: "key.pem"
LDAP_TLS_CA_CRT_FILENAME: "cert.pem"
LDAP_TLS_VERIFY_CLIENT: "never"
LDAP_SEED_INTERNAL_LDIF_PATH: "/seed"
ports:
- "127.0.0.1:389:389"
- "127.0.0.1:636:636"
volumes:
- ./ldap/seed.ldif:/seed/50-stalwart.ldif:ro
- certs:/certs-shared:ro
entrypoint: [ "/bin/bash", "-c", "cp /certs-shared/* /container/service/slapd/assets/certs/ 2>/dev/null; exec /container/tool/run" ]
# ---------------------------------------------------------------------------
# Pebble (ACME server) ports 14000 (directory) + 15000 (management)
# ---------------------------------------------------------------------------
pebble:
image: ghcr.io/letsencrypt/pebble:latest
environment:
PEBBLE_VA_NOSLEEP: "1"
PEBBLE_VA_ALWAYS_VALID: "1"
ports:
- "127.0.0.1:14000:14000"
- "127.0.0.1:15000:15000"
volumes:
- ./pebble/pebble-config.json:/test/config/pebble-config.json:ro
command: -config /test/config/pebble-config.json
# ---------------------------------------------------------------------------
# PowerDNS (DNS with TLSA + RFC2136) port 5300 (moved from 53)
# ---------------------------------------------------------------------------
powerdns:
image: powerdns/pdns-auth-49:latest
environment:
PDNS_AUTH_API_KEY: stalwart-api-key
ports:
- "127.0.0.1:5300:53/tcp"
- "127.0.0.1:5300:53/udp"
- "127.0.0.1:8081:8081"
volumes:
- ./powerdns/pdns.conf:/etc/powerdns/pdns.d/stalwart.conf:ro
- ./powerdns/init-zone.sh:/etc/powerdns/init-zone.sh:ro
tmpfs:
- /var/lib/powerdns
powerdns-init:
image: powerdns/pdns-auth-49:latest
depends_on:
- powerdns
volumes:
- ./powerdns/entrypoint.sh:/init.sh:ro
- ./powerdns/init-zone.sh:/etc/powerdns/init-zone.sh:ro
entrypoint: [ "bash", "/init.sh" ]
network_mode: "service:powerdns"
# ---------------------------------------------------------------------------
# NATS (message queue, core mode)
# ---------------------------------------------------------------------------
nats:
image: nats:latest
ports:
- "127.0.0.1:4222:4222"
- "127.0.0.1:8222:8222"
command: "--addr 0.0.0.0 --port 4222 --http_port 8222"
# =============================================================================
# Shared volumes (ephemeral docker compose down removes them)
# =============================================================================
volumes:
certs:
driver: local
fdb-config:
driver: local