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.
📋 É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
- ci.capbe.ovh — hub / apps web (forward .50 → caddy)
- odoo.ci.capbe.ovh · meca · agro — tenants Odoo
- meca.app.ci.capbe.ovh · agro.app.ci.capbe.ovh — fronts Flutter
- webmail.capbe.ovh — webmail (IP dédiée .52)
📧 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ôtemail.capbe.ovh, anciens noms*.ci.capbe.ovhsupprimés. - 4 comptes applicatifs :
admin@,odoo@,meca@,agro@capbe.ovh(SMTP 587 STARTTLS) + aliaspostmaster@→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.sh→send_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
| Branche | main |
| Remote | git@gitlab.com:adidev2503/capbe.git |
| Commits | 60 (du 2026-08-03 au 2026-08-06) |
| Auteur | Admin CAPBE <admin@ci.capbe.ovh> |
| Dernier commit | 51191fe docs(mail): admin-mail.capbe.ovh dans URLS.md + POST-DEPLOY §7 (credential STALWART_RECOVERY_ADMIN) + site docs régénéré |
| Auteur(s) | Adama FOFANA, Admin CAPBE |
M docs/CAPBE-AGRO/README.htmlM docs/CAPBE-AGRO/docs/EVOLUTIONS.htmlM docs/CAPBE-AGRO/docs/MIGRATION.htmlM docs/CAPBE-MECA/README.htmlM docs/CAPBE-MECA/docs/EVOLUTIONS.htmlM docs/CAPBE-MECA/docs/MIGRATION.htmlM docs/URLS.htmlM docs/index.htmlM docs/playbook/DEPLOY.htmlM docs/playbook/POST-DEPLOY.htmlM docs/playbook/README.htmlM playbook/07-mail.shM playbook/POST-DEPLOY.md
Répartition des commits
Historique récent (14 derniers commits) :
- 51191fedocs(mail): admin-mail.capbe.ovh dans URLS.md + POST-DEPLOY §7 (credential STALWART_RECOVERY_ADMIN) + site docs régénéré
- 85ddc27feat(mail): admin Stalwart exposé publiquement sur admin-mail.capbe.ovh — bloc Caddy (proxy /admin + /jmap vers 8080, redir racine), record A admin-mail (07 + publish-mail-dns)
- 8edf5dffix(publish-docs): préserve la propriété devl (chown SUDO_UID), garde flock, smoke HTTP, exclusion du générateur/README du push + docs régénérées (état git à jour)
- 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
📚 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.