Skip to content

Repository files navigation

🖥️ GIT VM Portal

Plateforme self-service de provisioning de machines virtuelles SSO Microsoft → demande → validation → VM OpenStack (Infomaniak) automatique → arrêt à l'échéance. Le tout sur Cloudflare Workers.

CI  ·  Prod : https://git-vm-portal-openstack.thomas-prudhomme.workers.dev


✨ Fonctionnalités

  • 🔐 SSO Microsoft Entra ID (OIDC authorization-code, in-Worker, aucun mot de passe stocké).
  • 🖥️ Demande de VM en libre-service depuis un catalogue performance × stockage × OS ; 1 à 4 VM d'un coup, chacune nommée et configurée ; >1 VM ⇒ groupe (piloté ensemble).
  • 🐧 7 systèmes : Ubuntu 24.04 & 22.04, Debian 12 & 13, Rocky Linux 9, Windows Server 2022 et Windows poste de travail (Server 2025, bureau).
  • 👥 3 rôles : membre · formateur (page « Demande groupée » : 1–30 VM attribuées à des utilisateurs) · admin.
  • Workflow de validation (admin approuve/refuse, à la VM ou au groupe) + notifications.
  • ⚙️ Provisioning OpenStack automatique et idempotent via un réconciliateur cron.
  • 🔑 Accès sécurisé par VM : clé SSH ed25519 chiffrée AES-GCM (Linux) ou mot de passe RDP chiffré (Windows) — propriétaire uniquement. Guides intégrés (MobaXterm, Termius, Bureau à distance).
  • 💾 Snapshots (images Glance) : créer / supprimer, snapshot auto avant suppression, restaurer une VM depuis un snapshot à la création.
  • ⏱️ Cycle de vie : dates obligatoires, suppression auto à l'échéance, arrêt sur inactivité (CPU, optionnel), extinction nocturne, planification start/stop par VM.
  • 🛡️ Durcissement sécurité : DNS filtré (Cloudflare for Families), blocage P2P/torrent, hostname verrouillé, + egress du Security Group verrouillé (filtrage réseau non contournable).
  • 📊 Console admin unifiée (demandes + machines), monitoring Grafana, export CSV, audit.
  • 🌗 Thème clair/sombre · 🌐 FR/EN.

🧱 Stack

Couche Techno
Frontend React 19 · Vite · TypeScript · Tailwind v4 · TanStack Query · react-i18next
Backend Cloudflare Worker (Hono) — API JSON + cron scheduled()
Base de données Cloudflare D1 (SQLite)
Hébergement Cloudflare Workers Static Assets (SPA) + Worker (API)
Auth Microsoft Entra ID (OIDC)
Compute OpenStack (Infomaniak Public Cloud, dc3-a) — Keystone/Nova/Glance/Neutron REST
Email EmailJS (REST) · Erreurs : Sentry (optionnel)

Choix d'architecture justifiés dans les ADR.

🚀 Démarrage rapide

# 1. Installer les dépendances (worker + SPA)
npm install && npm --prefix web install

# 2. Migrer la base locale
npx wrangler d1 migrations apply git_vm_portal --local

# 3. Lancer le worker (API) et la SPA
npx wrangler dev                 # → http://localhost:8787  (API)
npm --prefix web run dev         # → http://localhost:5173  (SPA, proxy /api → :8787)

Les secrets locaux se mettent dans un fichier .dev.vars (non commité). Voir docs/CONFIGURATION.md.

🗺️ Architecture en bref

Navigateur ──HTTPS──> Cloudflare Worker (Hono)
   │  React SPA            │  OIDC Entra ID · API JSON · cron scheduled()
   │  (static assets)      ├──> D1 (SQLite)  = état désiré
   │                       ├──> OpenStack (Nova/Glance/Neutron) = provisioning réel
   │                       └──> EmailJS = notifications
   └─ La cron réconcilie en continu l'état réel OpenStack avec la DB (provisioning→active, drift, expiry).

Détails et diagrammes : docs/ARCHITECTURE.md.

📁 Structure

src/            Worker Cloudflare (API, OIDC, OpenStack, email, D1, cron)
migrations/     Migrations de schéma D1
web/            SPA React (build → web/dist, servie en static assets)
scripts/        Helpers OpenStack one-off (discover images/réseaux, setup SG, harden egress)
docs/           Architecture, déploiement, configuration, ADR, analyse, roadmap
wrangler.jsonc  Config Worker + bindings
AGENTS.md       Guide d'entrée pour agents IA & nouveaux devs
CLAUDE.md       Contexte projet détaillé

🚢 Déploiement

Le déploiement est automatique via Cloudflare Workers Builds : un merge sur main déclenche build + migrations D1 + déploiement. Pas de wrangler deploy manuel. Voir docs/DEPLOYMENT.md.

🔐 Secrets

Config publique dans wrangler.jsonc (vars). Secrets via wrangler secret put (jamais commités) : SESSION_SECRET, ENTRA_CLIENT_SECRET, OS_PASSWORD, EMAILJS_PRIVATE_KEY. Détail, credentials OpenStack, rotation : docs/CONFIGURATION.md.

📚 Documentation

Document Contenu
AGENTS.md Référence canonique — IA & onboarding : stack, archi, données, sécurité, déploiement
CLAUDE.md Redirige vers AGENTS.md
docs/ARCHITECTURE.md Architecture, flux, modèle de données, sécurité
docs/DEPLOYMENT.md Pipeline CI/CD, publication, rollback
docs/CONFIGURATION.md Variables, secrets, credentials OpenStack, Entra, EmailJS, rotation
CONTRIBUTING.md Workflow, conventions, qualité, PR
docs/adr/ Décisions d'architecture (ADR)

📄 Licence

Projet éducatif interne — tous droits réservés.

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages