Skip to content

MinIO

Describe MinIO as the S3-compatible object store for Get2Dial’s binary assets.

MinIO stores binary media that does not belong in PostgreSQL, all under the get2dial bucket (auto-created on boot):

  • Audio-library assetstenants/<tenant_id>/audio-library/<object>, cataloged in audio_assets (migration 052).
  • Call recordingstenants/<tenant>/recordings/... when RECORDING_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 (migration 064).

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.

Terminal window
MINIO_ENDPOINT=minio-host:9000 # host:port, no scheme; empty disables object storage
MINIO_ACCESS_KEY=...
MINIO_SECRET_KEY=...
MINIO_BUCKET=get2dial
MINIO_USE_SSL=false
RECORDING_SYNC=true # park recordings in MinIO vs local disk

When MINIO_ENDPOINT is unset, the control plane falls back to a local recordings volume and the audio-library endpoints report “not configured”.

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.