Commit graph

33 commits

Author SHA1 Message Date
Adam Belkacemi
ec4eae3744 ajoute la visio de classe : Jitsi auto-hébergé, jetons du portail, prof seul modérateur
Jitsi (docker-jitsi-meet, version figée) derrière Nginx sur meet.syllabuslab.fr,
accès par jeton JWT signé par le portail, modération du micro, mains levées
synchronisées avec l'application. Pare-feu : UDP 10000 et pont interne
br-visio (accords d'Adam). Jicofo n'authentifie plus lui-même : il donnait
le rôle de propriétaire aux élèves. Capacité ramenée à 20 VM.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 12:35:35 +02:00
Adam Belkacemi
dd4f9c3c55 permet aux élèves de rejoindre leur classe avec son code, et les fiches en lot
L'élève saisit le code de classe et son prénom, le prof accepte, l'élève
voit une seule fois son identifiant et son code. Aucun e-mail. Le prof
peut aussi régénérer les fiches de plusieurs élèves d'un coup. Procédure
pour prouver la copie de la clé des sauvegardes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:18:53 +02:00
Adam Belkacemi
1ac8d4773a corrige /ide, sert Mulish depuis le portail et complète les mentions légales
/ide avait une erreur de syntaxe depuis la maquette et un aperçu hors de
son bac à sable. Mulish était encore importée depuis Google par la feuille
de thème. Nouveaux tests : syntaxe des scripts de chaque page, feuilles de
style sans import externe. public/vendor exclu du rsync.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:44:02 +02:00
Adam Belkacemi
e4a6aaebb1 ajoute les pages légales, la purge RGPD et sert polices et scripts depuis le portail
Pages /legal et /confidentialite réécrites d'après le système réel, purge
des classes archivées depuis 90 jours (prouvée par Pest), archivage côté
prof. Polices, xterm.js et CodeMirror ne sont plus chargés depuis Google
ni jsDelivr. Pages d'aperçu signalées, sans vrais établissements ni faux
chiffres. Journaux Laravel gardés 14 jours.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:07:25 +02:00
Adam Belkacemi
0a5df89201 documente la capacité, la restauration et le redémarrage (étape 13)
Capacité mesurée sur 20 VM (docs/capacite.md), restauration complète du
portail réussie, retour automatique de tous les services après redémarrage.
Retire l'unité systemd orpheline de ProxySQL, rend fidèle au navigateur la
mesure du temps d'ouverture d'un lab (2,8 s), et regroupe la dette révélée.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:12:11 +02:00
Adam Belkacemi
42884597a9 fixe la capacité à 22 VM d'après le test de capacité
Réserve mémoire de Nova alignée sur l'usage réel de l'hôte (15 Go) : Nova
refuse proprement au-delà de 22 VM eleve.petit, au lieu d'en accepter ~41
et de saturer la mémoire. Le plafond du portail suit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:49:24 +02:00
Adam Belkacemi
3f0b565e1e sauvegarde la base du portail et teste sa restauration chaque semaine
La sauvegarde ne couvrait que /etc, /home et /root : la base MariaDB du
portail et son .env (APP_KEY) en étaient absents. Ajoute aussi le réglage
du quota et du gabarit du projet des labs dans Ansible, la reprise des VM
au démarrage de l'hôte (Nova), et le script du test de capacité.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:28:50 +02:00
Adam Belkacemi
424d0f6f79 journal : page de statut publique vérifiée ; précise la dette sur l'image Kuma
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:04:25 +02:00
Adam Belkacemi
320bb48500 journal : site de statut activé et vérifié
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:59:45 +02:00
Adam Belkacemi
80840b9f62 limite l'attente vers Kuma sur le site de statut et précise sa mise en place
Kuma 1.23 ne répond jamais pour une page de statut inexistante. Le runbook
détaille maintenant le champ sous-domaine d'OVH et la création de la page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:50:30 +02:00
Adam Belkacemi
618cd7efbe passe le portail en HTTPS sur syllabuslab.fr, avec en-têtes de sécurité et CSP
Certificat Let's Encrypt obtenu et renouvelé par certbot (authentificateur
nginx), expiration surveillée par Prometheus. TLS selon Mozilla v6.0
intermediate, HSTS, CSP stricte avec nonce sur l'application et adaptée
sur la vitrine, xterm.js servi par le portail. Page de statut prévue sur
status.syllabuslab.fr, administration de Grafana et Kuma par tunnel seul.

Corrige aussi une faille XSS dans la page de classe, la page /cours en
erreur depuis l'étape 8, et NodeSource relancé à chaque déploiement.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:39:50 +02:00
Adam Belkacemi
aa004c0736 corrige Uptime Kuma : réseau hôte, écoute sur 127.0.0.1 uniquement
Avec le pont Docker désactivé (bridge: none), le port demandé n'était
jamais publié. Le rôle vérifie maintenant que le port écoute, et seulement
sur 127.0.0.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 09:38:28 +02:00
Adam Belkacemi
80b6c0722d ajoute le stock chaud, la correction automatique et les nouveaux essais de création de stack
Stock de stacks prêtes par lab dans Redis (prise atomique en Lua, ménage
par comparaison avec Heat, disjoncteur), files gérées par Horizon, séances
planifiables. Correcteur Go sur l'hyperviseur : socket Unix, commandes lues
dans le lab.yaml uniquement, exécution par l'agent invité QEMU. Une création
de stack ratée est supprimée et réessayée deux fois, puis la session passe
en échec, visible du prof.

Corrige aussi trois défauts des étapes précédentes : la console se coupait
à la première frappe d'un navigateur (trames texte), l'élève ne pouvait pas
rejoindre une séance, la déconnexion n'avait pas de jeton CSRF.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:52:16 +02:00
Adam Belkacemi
ca2f6f3b7a ajoute le runbook de rotation du compte de service OpenStack
Redémarre aussi le worker de file quand Ansible change une variable de
.env : queue:work lit la configuration une seule fois au démarrage, et
garderait sinon l'ancien mot de passe après une rotation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:01:08 +02:00
Adam Belkacemi
c1e443ea73 ADR 0002 : vérifie que --unrestricted ne contourne pas l'interdiction des trusts
Testé sur le serveur réel à la demande d'Adam : une application credential
--unrestricted échoue avec la même erreur Keystone que l'application
credential restreinte. Confirme que seule l'authentification par mot de
passe permet à Heat de créer son trust.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 20:53:19 +02:00
Adam Belkacemi
67a754f733 ajoute la liaison Laravel-OpenStack et le modèle Heat du lab 08
Un gabarit Heat généré depuis chaque lab.yaml, une stack par session de
lab (création à l'admission, suppression à l'expiration via des jobs
Redis et un worker systemd dédié). Passage du compte de service à une
authentification par mot de passe : Heat refuse de créer un trust à
partir d'un jeton d'application credential (voir ADR 0002).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 10:14:24 +02:00
Adam Belkacemi
8742bde807 ajoute le proxy console Go et le relais WebSocket vers nova-serialproxy
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 09:35:16 +02:00
Adam Belkacemi
30e14b1c54 ajoute le portail Laravel : connexion prof/élève, session unique, gestion de classe, salle d'attente
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 02:01:58 +02:00
Adam Belkacemi
aa31b6112f ajoute la supervision : règles d'alerte Prometheus, relais ntfy, Uptime Kuma
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 21:20:01 +02:00
Adam Belkacemi
d21c6ef544 journal : nettoyage des ressources de test de l'étape 6
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 16:24:32 +02:00
Adam Belkacemi
3e54e5020b corrige le README : tree n'est pas préinstallé dans l'image (lab 02)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 16:23:48 +02:00
Adam Belkacemi
44384847e5 construit l'image paillasse-debian, crée le projet OpenStack et teste la console série
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 16:14:06 +02:00
Adam Belkacemi
21c9de6d10 restreint l'écoute des bases OVN à l'interface interne, supprime le volume proxysql_socket résiduel
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 15:57:46 +02:00
Adam Belkacemi
db2842689a déploie OpenStack 2025.2 avec Kolla-Ansible (tout-en-un, API sur dummy0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 15:50:54 +02:00
Adam Belkacemi
87c8aac5f5 ajoute le réseau pour OpenStack : dummy0, paire veth, NAT restreint au réseau externe
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 11:40:34 +02:00
Adam Belkacemi
e879a214a9 ajoute les sauvegardes chiffrées vers Dedibackup (rôle Ansible, timer quotidien, rotation)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 11:08:22 +02:00
Adam Belkacemi
f5a5e8d8a9 durcit le serveur : pare-feu nftables, SSH par clé, fail2ban, chrony, mises à jour de sécurité
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 10:32:09 +02:00
Adam Belkacemi
b7e866f868 ajoute l'inventaire du serveur et le journal (étape 1 : reconnaissance)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 06:54:40 +02:00
Adam Belkacemi
ca4669156a Prompt final 2026-10-07 01:12:34 +02:00
Adam Belkacemi
5c396d5a94 Pack de contenus (8 labs, séquence 08 complète) 2026-10-07 00:35:50 +02:00
Adam Belkacemi
138235bd76 CLAUDE.md, contenus, prompt et référentiel 2026-10-07 00:11:20 +02:00
Adam Belkacemi
236d2d3567 Maquettes Claude Design avec visio de classe 2026-10-06 23:28:18 +02:00
Adam Belkacemi
238070ae54 Premier commit 2026-09-28 23:16:30 +02:00