2026-05-04 15:28:44 +02:00
|
|
|
services:
|
|
|
|
|
postgres-test:
|
|
|
|
|
image: postgres:18.2-alpine3.23
|
|
|
|
|
environment:
|
|
|
|
|
POSTGRES_USER: oxicloud_test
|
|
|
|
|
POSTGRES_PASSWORD: oxicloud_test
|
|
|
|
|
POSTGRES_DB: oxicloud_test
|
|
|
|
|
ports:
|
|
|
|
|
- "5433:5432"
|
|
|
|
|
tmpfs:
|
|
|
|
|
- /var/lib/postgresql # in-memory: always blank on start (pg18+ uses /var/lib/postgresql/18/data)
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "pg_isready -U oxicloud_test"]
|
|
|
|
|
interval: 2s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 10
|
2026-09-02 19:24:46 +02:00
|
|
|
|
|
|
|
|
# Azure Blob Storage emulator. Speaks the real Blob REST API, so it is
|
|
|
|
|
# the only way to exercise the Azure backend without an account — and
|
|
|
|
|
# the account it does ship is the fixed, publicly-documented dev pair
|
|
|
|
|
# (`devstoreaccount1` + the well-known key), so nothing here is a
|
|
|
|
|
# credential worth protecting.
|
|
|
|
|
#
|
|
|
|
|
# Blob service only: `--blobHost` with no queue/table, since the backend
|
|
|
|
|
# uses blobs exclusively and the other two would just be open ports.
|
|
|
|
|
#
|
|
|
|
|
# tmpfs for the same reason postgres uses it — a run must start from an
|
|
|
|
|
# empty container, or a previous run's blobs read as orphans in the very
|
|
|
|
|
# audit this exists to test.
|
|
|
|
|
azurite-test:
|
|
|
|
|
image: mcr.microsoft.com/azure-storage/azurite:3.36.0
|
|
|
|
|
command: azurite-blob --blobHost 0.0.0.0 --blobPort 10000 --location /data --skipApiVersionCheck
|
|
|
|
|
ports:
|
|
|
|
|
- "10000:10000"
|
|
|
|
|
tmpfs:
|
|
|
|
|
- /data
|
|
|
|
|
healthcheck:
|
|
|
|
|
# Azurite answers 400 to an unauthenticated root GET, which is proof
|
|
|
|
|
# enough that the HTTP listener is up — the SDK handshake is what
|
|
|
|
|
# validates credentials, and that happens later in the backend's
|
|
|
|
|
# own `initialize`.
|
|
|
|
|
test: ["CMD-SHELL", "nc -z 127.0.0.1 10000 || exit 1"]
|
|
|
|
|
interval: 2s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 15
|