Architecture
Les composants
Section intitulée « Les composants »| 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. |
Ce que déploie une instance
Section intitulée « Ce que déploie une instance »| É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.
Git comme source de vérité
Section intitulée « Git comme source de vérité »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.
Création d’une instance, de bout en bout
Section intitulée « Création d’une instance, de bout en bout »- 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.
- Il commite le fichier de l’instance et son fichier de secrets.
- 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. tenantctlapplique le chart : espace de noms, PostgreSQL, Odoo, puis installation des modules — ou, si une restauration est demandée, restauration à la place de l’installation.- 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.
Suspendre et réactiver
Section intitulée « Suspendre et réactiver »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.
Modules complémentaires
Section intitulée « Modules complémentaires »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__.pyest 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.
Templates et seeds
Section intitulée « Templates et seeds »- 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.