Skip to content

Déploiement production

Objectif

Déployer Finoptika en SaaS multi-tenant avec ingestion et workers Celery, soit on-premise sur une VM Docker, soit sur Kubernetes (EKS/GKE/AKS via GitOps). Public : SRE, platform engineer.

Architecture cible

Internet → Ingress (TLS) → Frontend (nginx) → API (FastAPI)
                              ↓                    ↓
                         PostgreSQL            Redis (Celery)
                              ↑                    ↑
                         Worker + Beat ←───────────┘
ComposantRôle
APIREST, dashboards, staging d'ingest
WorkerIngest lourd, rollups, anomalies (Celery)
BeatTâches planifiées (1 replica)
FrontendSPA React + proxy /api
PostgreSQLDonnées multi-tenant (RLS)
RedisBroker Celery + cache

Choisir sa cible

CiblePlateformePour qui
On-premise VMVM Linux DockerClient sans infrastructure cloud
AWSEKSVoir Guide AWS
GCPGKEVoir Guide GCP
AzureAKSVoir Guide Azure

Option A — On-premise (VM Docker)

  1. VM Linux — Ubuntu 22.04/24.04, 4 vCPU / 16 Go recommandés.
  2. Docker + Compose — depuis le dépôt officiel Docker.
  3. Code + .env — générez les secrets (PostgreSQL, JWT, clé Fernet de chiffrement).
  4. docker compose build && docker compose up -d — les migrations s'appliquent automatiquement.
  5. OIDC (Keycloak / AD FS) ou mode pilote.
  6. systemd + pare-feu + sauvegardes cron.

Manifeste : deploy/onprem/ (docker-compose production). Guide complet : docs/deploy/ONPREM_VM_GUIDE.md.

Option B — Kubernetes (tous clouds, GitOps)

Ordre recommandé :

  1. State distant Terraform — bucket chiffré + verrouillé, décommenter le bloc backend dans versions.tf. Obligatoire en prod (le state contient des secrets, jamais commité).
  2. Terraform — infra (cluster, DB managée, Redis, registry).
  3. Secrets — PostgreSQL, JWT, Fernet, credentials cloud (via secret manager).
  4. Kustomize — overlays par cloud (deploy/kubernetes/ + overlays/<cloud>).
  5. Migrations — job Alembic upgrade head.
  6. Ingress + TLS — certificat, domaine.
  7. OIDC — configuration par tenant.

Chemin de déploiement

Le pipeline de référence est kustomize (GitHub Actions) — pas Helm. Poussez un tag vX.Y.Z pour déclencher le déploiement. Détails par cloud dans les guides dédiés.

Configuration essentielle

VariableRôle
APP_ENV=productionDésactive les routes dev et Swagger
DATABASE_URLPostgreSQL (asyncpg)
JWT_SECRETRequis, min 16 caractères
OIDC_ENABLED / OIDC_JWKS_URLSSO enterprise (RS256)
CONNECTORS_LIVE=trueSDK cloud réels au lieu des fixtures
FACT_COST_READ_ENABLEDLecture via fact_cost
AUDIT_PERSIST=truePersistance de l'audit trail

Sécurité — à ne jamais contourner

  • 🔒 RLS activée sur toutes les tables en production (désactivée uniquement dans les blocs Alembic upgrade/downgrade).
  • 🔒 RBAC via require_permission() sur chaque route protégée.
  • 🔒 Rate limiting (Redis) et audit trail des mutations.
  • 🔒 Chiffrement des secrets en base via les helpers core/security/.
  • 🔒 MFA au login (vérifier l'enforcement en prod).

Provisionner un premier tenant

Après déploiement, créez un tenant propre (le seed démo est gaté hors production) — voir Provisionnement tenant et app/ops/provision_tenant.py.

Voir aussi

Documentation Finoptika · Estimations P90 consultatives, jamais garanties · Données isolées par tenant (RLS + RBAC).