Architettura
Stack
- Backend: Python + Flask + Flask-AppBuilder
- ORM: SQLAlchemy
- DB principale: MySQL/MariaDB
- Coda async: Celery + Redis
- Object storage: MinIO (S3 compatibile)
- Frontend admin: template FAB custom
- Servizio web: Gunicorn (systemd)
Pattern applicativi
- Multi-tenant a livello applicativo (
tenant_key) con control plane centralizzato.
- Moduli organizzati in
app/modules/* con views/modelli dedicati.
- Menu e visibilita controllati da:
- ruolo (
Admin, super admin),
- contesto host (control plane vs tenant host),
- policy menu.
Flusso runtime
- richiesta HTTP entra su Gunicorn;
- risoluzione tenant/context da host;
- controlli sicurezza FAB + policy menu;
- query ORM/SQL filtrate per tenant quando richiesto;
- eventuali job asincroni inviati a Celery.
Deploy target
safeops-web.service per app web
safeops-celery.service worker
safeops-celery-beat.service scheduler