Architecture
Schéma haut niveau
┌────────────────────────────────────────────────────────┐
│ nginx :80 │
│ zelhay-host.fr admin.* game.* pro.* console.* doc.* │
└─────┬───────────────┬─────────┬───────┬──────────┬─────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
vitrine espace panel pro doc
(Next.js) client Game vitrine (Nextra)
(Next.js) (Next.js)
│ │
└────┬────┘
▼
backend NestJS (API)
│
┌────────────────────┬─────────────┼─────────────┬──────────────┐
▼ ▼ ▼ ▼ ▼
PostgreSQL Proxmox API Pterodactyl Stripe SMTP
(mail)Frontends
Tous les frontends sont des Next.js App Router :
- Vitrine : pages publiques (offres, parrainage, légaux). SSR pour le SEO. Lit
/api/public/settingsau boot pour les bannières/paramètres dynamiques. - Espace client : dashboard, serveurs, vRack, facturation, tickets. Authentifié.
- Panel Game : UI dédiée aux serveurs de jeux ; relaie l'API Client de Pterodactyl.
- Pro : vitrine commerciale Pro (anti-DDoS, SLA). Thème distinct (cookie
zh_pro_theme). - Console série : terminal xterm.js connecté via WebSocket au tty série du VPS (Proxmox).
- Doc : ce site (Nextra + MDX, statique).
Backend (NestJS)
Modules orientés feature :
- auth — login, register, JWT, reset password, vérification SIRET (base Sirene).
- client — endpoints
client-*: commande, VPS, vRack, billing, tickets, Pro. - public — endpoints non authentifiés (offres publiques, settings).
- wallet — recharge, débit, historique.
- invoices — génération PDF + Factur-X + UBL.
- einvoicing — connecteur vérification SIRET / facturation électronique.
- tickets / notifications — support et notifs in-app + e-mail.
- proxmox — wrapper API Proxmox VE.
- pterodactyl — wrappers Application + Client API.
- game — provisioning et pilotage Game.
- nodes — pool de nœuds Proxmox (capacité, score).
- plans — catalogue + capacités résiduelles.
- promo — codes promo.
- crypto — utilitaires AES-256-GCM (chiffrement secrets).
- mail — templates stockés en base + transporteur SMTP.
- console — proxy WebSocket vers la console série.
- ip-scan — vérification disponibilité IP publiques.
Realtime
WebSockets authentifiés par le cookie JWT :
- Stats live VPS : push CPU/RAM/Net toutes les 5 s (le backend interroge Proxmox une seule fois et fan-out).
- Console série : proxy bidirectionnel xterm ↔ Proxmox.
- Notifications : push in-app.
Caches
- Cache mémoire 30 s pour les settings publics (réduit la pression DB).
- Stats Proxmox agrégées une fois puis diffusées.