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_bytesinTenant 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
GBoMB(conversione automatica in bytes).