Les trois environnements passent sur enervision-g3.duckdns.org, rec. et dev. : noms publics qui visent l'IP privée de la VM, donc résolus sans /etc/hosts sur le réseau de l'école et injoignables ailleurs (ADR 0018). - infra/front : nginx sur le réseau de l'hôte, seul exposé en 80 et 443. Aiguille par SNI vers la stack visée sans déchiffrer le TLS, et lui transmet l'IP du client en PROXY protocol. - Proxy de stack : écouteur 4443 en PROXY protocol, real_ip_header ; sans lui, limit_req et get_client_ip() compteraient tous les postes comme un seul. PROXY_FRONT_PORT le publie sur 127.0.0.1. - make tls-duckdns : Let's Encrypt par défi DNS-01 via l'API DuckDNS (acme.sh 3.1.6), rejouable, rejoué à chaque déploiement et chaque nuit. - provision-host.sh fait foi pour l'adressage et les secrets : un .env existant garde ses secrets, reçoit ceux qui manquent (supervision) et voit hôte et ports réalignés. Planifie le renouvellement des certificats. - deploy.yml : nouvelles URL, sonde prod sur 10443, front-up en prod. - Terraform : variable domaine. CI : validation du frontal.
Documentation
adr: décisions d'architecture, une par fichier, numérotées et immuables.architecture: les vues du système. Point d'entrée : architecture/README.md.
Décisions en vigueur
| ADR | Sujet |
|---|---|
| 0001 | PostgreSQL avec l'extension TimescaleDB |
| 0002 | Authentification par JWT d'accès et jeton de rafraîchissement opaque |
| 0003 | Autorisation RBAC à trois rôles, relecture du compte à chaque requête |
| 0004 | Journal d'audit en ajout seul, garanti par PostgreSQL |
| 0005 | LightGBM pour la prédiction de consommation, un modèle global |
| 0006 | Le moteur de règles de recommandation vit dans le backend, pas dans ml/ |
| 0007 | Terminaison TLS par un reverse proxy Nginx, en Docker Compose |
| 0008 | Airflow exécute le code du backend en sous-processus, dans son propre environnement |
| 0009 | Deux environnements sur la VM ENI, un projet Compose chacun, déployés par un runner auto-hébergé |
| 0010 | Terraform provisionne la machine, GitHub Actions déploie l'application |
| 0011 | Procédure de déploiement, telle qu'exécutée le 22/09/2026 |
| 0012 | État de la recette et de la production sur la VM ENI |
| 0013 | La surveillance de dérive vit dans le backend et écrit sa propre table |
| 0014 | Un pipeline CI unique appelle les workflows de composant et conditionne le déploiement |
| 0015 | Les tests de bout en bout et de charge visent la stack Compose déployée |
| 0016 | La supervision vit dans un profil Compose, active en prod |