Multi-tenant hard: phases 1-2¶
Stato implementato¶
- Tabella di registry:
tenant_registry - Resolver host -> tenant context per request
- Context disponibile in
g.tenant_ctxe nei template cometenant_ctx - Routing DB per-request (opzionale): bind sessione ORM su
db_uritenant - Feature flag: disattivato di default
Configurazione¶
In .env:
MULTITENANCY_ENABLED=false
MULTITENANCY_STRICT_HOST_MATCH=false
MULTITENANCY_DEFAULT_TENANT_KEY=default
MULTITENANCY_ADMIN_HOSTS=127.0.0.1,localhost,10.50.0.200
MULTITENANCY_DB_ROUTING_ENABLED=false
MULTITENANCY_ENGINE_POOL_SIZE=5
MULTITENANCY_ENGINE_MAX_OVERFLOW=10
MULTITENANCY_ENGINE_POOL_RECYCLE=1800
TENANT_MYSQL_ADMIN_HOST=127.0.0.1
TENANT_MYSQL_ADMIN_PORT=3306
TENANT_MYSQL_ADMIN_USER=root
TENANT_MYSQL_ADMIN_PASSWORD=xxxx
TENANT_DB_HOST=127.0.0.1
TENANT_DB_PORT=3306
Migrazione DB¶
Applicare:
/root/.pyenv/versions/safeops/bin/flask --app app db upgrade
Note¶
- Con
MULTITENANCY_DB_ROUTING_ENABLED=true, la sessione ORM del request viene bindata al DB tenant. - Requisito: il DB tenant deve contenere lo stesso schema FAB/app.
- Se
db_urinon รจ presente per il tenant, resta il DB default. - Gli host in
MULTITENANCY_ADMIN_HOSTSbypassano strict match e usano sempre il DB default. - Wizard provisioning disponibile in
Impostazioni Avanzate -> Provisioning Tenant. - Il wizard usa comandi CLI (
flask db upgrade,flask fab create-admin) sul DB tenant.
Esempio seed tenant_registry¶
INSERT INTO tenant_registry (tenant_key, display_name, primary_host, db_uri, is_active)
VALUES
('tenant_dev', 'Tenant Dev', '10.50.0.200', 'mysql+pymysql://user:pass@127.0.0.1:3306/appdb_tenant_dev', 1);