MinIO
Purpose
Section titled “Purpose”Describe MinIO as the S3-compatible object store for Get2Dial’s binary assets.
Overview
Section titled “Overview”MinIO stores binary media that does not belong in PostgreSQL, all under the
get2dial bucket (auto-created on boot):
- Audio-library assets —
tenants/<tenant_id>/audio-library/<object>, cataloged inaudio_assets(migration052). - Call recordings —
tenants/<tenant>/recordings/...whenRECORDING_SYNC=true. - Voicemail messages — recorded at the edge and shipped to MinIO via the
recording-sync pipeline; the object path lands in
voicemail_messages.recording_path(migration064).
The control plane is the only thing that talks to MinIO directly — edges fetch
assets through a node-authenticated proxy
(GET /api/v1/nodes/media/object), so MinIO is never reachable from the edge.
Configuration
Section titled “Configuration”MINIO_ENDPOINT=minio-host:9000 # host:port, no scheme; empty disables object storageMINIO_ACCESS_KEY=...MINIO_SECRET_KEY=...MINIO_BUCKET=get2dialMINIO_USE_SSL=falseRECORDING_SYNC=true # park recordings in MinIO vs local diskWhen MINIO_ENDPOINT is unset, the control plane falls back to a local
recordings volume and the audio-library endpoints report “not configured”.
Examples
Section titled “Examples”An audio asset’s content_sha256 is the edge change-detection key: when the
bytes change, the hash changes, bumping the per-tenant media manifest version so
each edge re-pulls just that object. See
Media Synchronization.
- Use a dedicated bucket per environment; never share buckets across prod/stage.
- Recordings can stay on a local volume by setting
RECORDING_SYNC=false.