Documentation · Infrastructure · Exploitation

CAPBE

Playbook de déploiement Incus sur OVH · Messagerie Stalwart · Odoo 19 multi-tenant · Kits d'exploitation MECA & AGRO. Ce site regroupe l'état du projet et l'intégralité de la documentation générée depuis les sources Markdown.

57commits
65fichiers suivis
~6 200lignes de scripts shell
10documents
7conteneurs capbe-*

📋 État détaillé du projet (au 2026-08-06)

Vue d'ensemble

CAPBE est un dépôt d'infrastructure as code (bash + Incus) qui déploie et exploite toute l'infrastructure du domaine capbe.ovh sur un serveur dédié OVH : réseau privé capbe-br0 (10.10.10.0/24, NAT), 7 conteneurs système Incus, reverse-proxy Caddy (TLS automatique), bases PostgreSQL 18 + Oracle AI Database Free, Odoo 19 multi-tenant et messagerie complète (Stalwart + webmail SnappyMail). Aucun port de l'hôte n'est ouvert : toute l'exposition passe par un network forward Incus (DNAT noyau).

Architecture

        Internet ── forward public 51.79.11.50 (80/443) ── + mail direct 51.79.11.52 (IP dédiée)
                        │
                 [ capbe-caddy ]   ← chef d'orchestre (TLS auto, On-Demand)
                        │
          Réseau privé capbe-br0 (10.10.10.0/24) — NAT sortant
   ┌──────────┬──────────┬──────────┬────────────┬───────────────┬───────────────┐
   ▼          ▼          ▼          ▼            ▼               ▼               ▼
capbe-pgis capbe-oracle capbe-odoo capbe-mail capbe-meca     capbe-agro
10.10.10.2  10.10.10.3  10.10.10.4  10.10.10.5  (front nginx)  (front nginx)
Postgres18  OracleFree  Odoo19     Stalwart     + API pgis:8000 + API pgis:8001
+PostGIS    +Spatial    multi-tenant SMTP/IMAP/  + tenant Odoo  + tenant Odoo
                                   JMAP/webmail  « meca »       « agro »

🧱 Backends mutualisés

  • capbe-pgis — PostgreSQL 18 + PostGIS, héberge les API migrées (meca-api :8000, agro-api :8001)
  • capbe-oracle — Oracle AI DB Free + Spatial (stack #2, API sur :8000)
  • capbe-odoo — Odoo 19 multi-tenant (un tenant = une base, dbfilter ^%d$)
  • capbe-mail — Stalwart (SMTP/IMAP/POP3/JMAP) + webmail SnappyMail

🌐 Points d'entrée

📧 Messagerie (capbe-mail)

  • Bascule « 1 IP » (05/08/2026) : tout le mail (entrée, sortie/egress, webmail) vit sur l'IP dédiée 51.79.11.52 ; le forward .50 ne sert plus que le web.
  • Domaine mail capbe.ovh (racine de la zone) : boîtes @capbe.ovh, hôte mail.capbe.ovh, anciens noms *.ci.capbe.ovh supprimés.
  • 4 comptes applicatifs : admin@, odoo@, meca@, agro@capbe.ovh (SMTP 587 STARTTLS) + alias postmaster@admin@ (RFC 5321).
  • SPF/DKIM/DMARC/PTR publiés et validés ; audit de délivrabilité automatisé (audit-deliverability.sh), cron mensuel root 1er du mois 06h00.
  • Odoo (tenants meca/agro) et l'API MECA envoient leurs mails via capbe-mail (le relais Gmail est supprimé).

🗂️ Kits MECA & AGRO

Deux projets hérités (agrimeca / agroworoba) ont été migrés dans l'architecture CAPBE (playbook étape 12) : front Flutter statique, API FastAPI sur capbe-pgis (ports 8000 / 8001), tenant Odoo. Les conteneurs héritage ont été décommissionnés. Chaque kit est autonome : ops/ (statut, smoke, monitor, logs, db, backups), deploy/ (migration, push API, front) et sa documentation dédiée.

🛰️ Exploitation & supervision

  • scripts/status-global.sh — résumé global des 2 kits (cron 07h40, --alert → mail si point rouge).
  • ops/check-nightly.sh — santé des sauvegardes de nuit (07h30 / 07h35).
  • Monitors toutes les 5 min (alertes mail via lib/mail.shsend_alert_mail(), SMTP 587, mot de passe jamais en argv).
  • Sauvegardes : globale 02h00 (10-backup.sh), kits 02h30 / 02h45 — snapshots ZFS + dumps SQL.
  • Smoke-test 05/08/2026 : 27 OK / 0 échec · délivrabilité Gmail : PASS.

🩺 État git (récupéré à la génération)

Dépôt

Branchemain
Remotegit@gitlab.com:adidev2503/capbe.git
Commits57 (du 2026-08-03 au 2026-08-06)
AuteurAdmin CAPBE <admin@ci.capbe.ovh>
Dernier commitef79064 feat(caddy): docs.capbe.ovh → documentation statique (file_server /var/www/docs) + publish-docs.sh (régénération + push + DNS idempotent)
Auteur(s)Adama FOFANA, Admin CAPBE
Copie de travail non propre — 13 fichier(s) modifié(s)/non suivi(s) :
  • M docs/CAPBE-AGRO/README.html
  • M docs/CAPBE-AGRO/docs/EVOLUTIONS.html
  • M docs/CAPBE-AGRO/docs/MIGRATION.html
  • M docs/CAPBE-MECA/README.html
  • M docs/CAPBE-MECA/docs/EVOLUTIONS.html
  • M docs/CAPBE-MECA/docs/MIGRATION.html
  • M docs/URLS.html
  • M docs/index.html
  • M docs/playbook/DEPLOY.html
  • M docs/playbook/POST-DEPLOY.html
  • M docs/playbook/README.html
  • M playbook/publish-docs.sh
  • ?? playbook/.publish-docs.lock

Répartition des commits

8feat
4fix
6docs
1refactor
0chore

Historique récent (14 derniers commits) :

  • ef79064feat(caddy): docs.capbe.ovh → documentation statique (file_server /var/www/docs) + publish-docs.sh (régénération + push + DNS idempotent)
  • f0b082fdocs(docs): site de documentation HTML généré — docs/ (index état projet+git, 10 pages, générateur rejouable, PDF 54 pages) + URLS.md (docs.capbe.ovh)
  • 1fb85cefeat(mail): alias postmaster@capbe.ovh → admin (RFC 5321) + audit mensuel automatisé (--alert / --install-cron)
  • 206916ddocs(POST-DEPLOY): récap §7 — comptes applicatifs, audit-deliverability.sh, smoke-test --app-accounts, délivrabilité Gmail PASS
  • f07bfcffeat(smoke-test): section 7 optionnelle --app-accounts — auth SMTP 587 des 4 comptes applicatifs + docs audit
  • 4fa5630feat(playbook): audit-deliverability.sh — audit rejouable de la messagerie CAPBE (comptes + DNS)
  • ce694d1feat(playbook): 07-mail.sh section 3b — création idempotente des comptes SMTP applicatifs odoo@/meca@/agro@capbe.ovh
  • d39348cfix(common.sh): garde MAIL_APP_* avec motif "[^"]+" — une valeur vide (="") est bien détectée (le motif .+ matchait les guillemets)
  • 1afae98fix(common.sh): garde de generation MAIL_APP_* sur non-vacuité — une clé présente mais vide est régénérée (évite les mots de passe vides pour Odoo/MECA/AGRO)
  • b9e4cacfeat(mail): les applications envoient via capbe-mail (SMTP 587 STARTTLS, comptes dedies)
  • 7fcd13cdocs(POST-DEPLOY): PTR 51.79.11.50 → ci.capbe.ovh — purement web, aucun lien avec le mail
  • c2816e9feat(mail): bascule « 1 IP » — tout le mail sur l'IP dédiée 51.79.11.52 (capbe-mail autonome)
  • 54b9f6afix(mail): webmail fige sur « SnappyMail » — file_server manquant dans le caddy interne
  • ecaff7ffix(mail): PTR du forward sur webmail.capbe.ovh (FCrDNS) + bilan bascule réelle

📚 Documentation générée

10 documents Markdown convertis en pages HTML (navigation, sommaire automatique, coloration syntaxique). Régénération : python3 docs/generate.py.

🚀README · Playbook CAPBE — Infrastructure Incusplaybook/README.mdVue d'ensemble du playbook : prérequis, ordre d'exécution (00→12), architecture Incus, tableau des conteneurs, routage Caddy, sécurité.Ouvrir →DEPLOY · Checklist de déploiement — CAPBE sur serveur OVHplaybook/DEPLOY.mdChecklist pas-à-pas de déploiement sur serveur OVH : prérequis, étapes avec durées et vérifications, pièges connus, validation finale, rollback.Ouvrir →📬POST-DEPLOY · POST-DEPLOY — Dernier point rouge : PTR (reverse DNS) & sort des héritagesplaybook/POST-DEPLOY.mdDernier point rouge (PTR / FCrDNS), délivrabilité (mail-tester, audit-deliverability), bascule « 1 IP », migration du domaine mail, sort des héritages.Ouvrir →⚙️README · CAPBE-MECA — Kit d'interaction et d'évolutionCAPBE-MECA/README.mdKit autonome de capbe-meca (ex-agrimeca) : carte d'identité, flux applicatif, commandes rapides (ops/deploy), structure, sécurité.Ouvrir →🔄MIGRATION · MIGRATION — agrimeca → capbe-mecaCAPBE-MECA/docs/MIGRATION.mdComment agrimeca est devenu capbe-meca : architecture cible, les 3 phases de migration, pièges rencontrés en réel.Ouvrir →🧬EVOLUTIONS · EVOLUTIONS — Faire évoluer capbe-meca (avec IA ou sans)CAPBE-MECA/docs/EVOLUTIONS.mdGuide d'évolution de capbe-meca (API FastAPI, front Flutter, tenant Odoo) : cycles de déploiement, supervision au quotidien, checklist.Ouvrir →🌾README · CAPBE-AGRO — Kit d'interaction et d'évolutionCAPBE-AGRO/README.mdKit autonome de capbe-agro (ex-agroworoba) : carte d'identité, flux applicatif, commandes rapides (ops/deploy), structure, sécurité.Ouvrir →🔄MIGRATION · MIGRATION — agroworoba → capbe-agroCAPBE-AGRO/docs/MIGRATION.mdComment agroworoba est devenu capbe-agro : architecture cible, les 3 phases de migration, pièges rencontrés en réel.Ouvrir →🧬EVOLUTIONS · EVOLUTIONS — Faire évoluer capbe-agro (avec IA ou sans)CAPBE-AGRO/docs/EVOLUTIONS.mdGuide d'évolution de capbe-agro (API FastAPI, front Flutter, tenant Odoo) : cycles de déploiement, supervision au quotidien, checklist.Ouvrir →🔗URLS · 🌐 URLs CAPBE — Tous les points d'accèsURLS.mdRegistre central de tous les points d'accès : frontends, tenants Odoo, APIs FastAPI (+ endpoints), messagerie, protocoles mail.Ouvrir →