Aller au contenu

Architecture

Composant Rôle
Kubernetes Héberge les instances. Une instance = un espace de noms tenant-<nom>.
Chart Helm odoo-service Décrit tout ce qu’une instance déploie.
Dépôt Git de configuration Un fichier YAML par instance, plus un fichier de secrets chiffré (SOPS/age).
tenantctl L’outil qui applique l’état décrit dans Git : voir tenantctl.
Portail d’administration Écrit dans Git puis lance l’application (FastAPI + HTMX).
QG Odoo Odoo 19 qui sert cybercaisse.com : site, CRM, devis, factures, espace client, support.
Stockage objet Sauvegardes et backups téléversés.
Élément Détail
Odoo Image officielle de la version choisie ; HTTP et websocket
PostgreSQL Dédié à l’instance, version liée à celle d’Odoo
Deux volumes Fichiers d’Odoo (filestore) et données PostgreSQL
Initialisation Crée la base et installe les modules, une seule fois
Accès web https://<nom>.cybercaisse.com, certificat wildcard
Page « suspendu » Servie à la place d’Odoo quand l’instance est suspendue
Sauvegarde Tâche planifiée quotidienne
Isolation Quotas, limites par défaut, règles réseau « tout refusé sauf… »

Odoo est configuré avec une seule base (dbfilter), gestionnaire de bases désactivé (list_db = False), mode proxy, sans données de démonstration. Les sondes de santé interrogent /web/login (compatible avec toutes les versions), et Odoo est redémarré automatiquement s’il ne répond plus.

Chaque action écrit d’abord l’état voulu dans Git, puis l’applique. Chaque changement est un commit : on sait qui a fait quoi, et on peut rejouer.

  1. Le portail valide le formulaire, génère trois secrets aléatoires (mot de passe maître, base de données, administrateur) et les chiffre.
  2. Il commite le fichier de l’instance et son fichier de secrets.
  3. Il lance dans le cluster une tâche tenantctl reconcile <nom>. Si elle ne peut pas démarrer, il se replie sur le pipeline CI.
  4. tenantctl applique le chart : espace de noms, PostgreSQL, Odoo, puis installation des modules — ou, si une restauration est demandée, restauration à la place de l’installation.
  5. Le portail suit l’état réel d’Odoo jusqu’à « Prêt à utiliser ».

Durées mesurées : création 90 à 115 s (dont environ 87 s d’initialisation d’Odoo), archivage 50 à 120 s.

Pour aller vite, ces deux actions sont appliquées directement (Odoo et PostgreSQL arrêtés ou relancés, routage basculé vers la page « suspendu »), en moins d’une demi-seconde. L’état est quand même écrit dans Git.

  • spec.apps : modules installés à la création de la base. Ajouter un module ici après coup ne l’installe pas : il s’installe depuis Odoo.
  • spec.extraAddons : dépôts Git clonés à chaque démarrage d’Odoo ; chaque dossier qui contient un __manifest__.py est ajouté aux addons. Les dépôts privés passent par un jeton en lecture seule, jamais écrit dans l’adresse ni dans les journaux.
  • Un template est un modèle de fichier d’instance (version, modules, dépôts, seed) proposé à la création dans le portail. Ajouter un template = déposer un fichier YAML dans le dossier des templates.
  • Un seed est un backup natif d’une base pré-configurée, sans données client. L’instance démarre en le restaurant au lieu de tout réinstaller. Il doit être régénéré après chaque mise à jour des modules.