Vai al contenuto

MinIO integration (object storage)

Cosa è stato aggiunto

  • Tabella metadata file: stored_files
  • Service MinIO: app/modules/storage/services.py
  • Vista admin: Impostazioni Avanzate -> Archivio Oggetti

Configurazione .env

MINIO_ENDPOINT=127.0.0.1:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_SECURE=false
MINIO_CERT_CHECK=true
MINIO_CA_CERT=
MINIO_TLS_ASSERT_HOSTNAME=true
MINIO_BUCKET_PREFIX=safeops
MINIO_DATA_PATH=/opt/minio/data

Se usi HTTPS con certificato self-signed:

MINIO_SECURE=true
MINIO_CERT_CHECK=true
MINIO_CA_CERT=/etc/pki/ca-trust/source/anchors/minio-ca.crt
MINIO_TLS_ASSERT_HOSTNAME=false

Migrazione DB

/root/.pyenv/versions/safeops/bin/flask --app app db upgrade

Uso da codice

from app.modules.storage.services import upload_bytes

row = upload_bytes(
    tenant_key="default",
    filename="report.csv",
    payload=b"id,name\n1,test\n",
    content_type="text/csv",
)

Il service crea bucket tenant-specifico (<prefix>-<tenant>-data) se mancante.

Dashboard capacità

  • Se MINIO_DATA_PATH è leggibile dal processo app, il portale mostra capacità reale filesystem.
  • Altrimenti usa fallback logico MINIO_LOGICAL_CAPACITY_GB.

Quote tenant/user

  • Quota tenant: campo max_storage_bytes in Tenant Registry.
  • Quota user: vista Impostazioni Avanzate -> Quote Storage Utente.
  • L'upload viene bloccato se supera il limite tenant o utente.
  • In UI puoi inserire quota anche in GB o MB (conversione automatica in bytes).