Suivi d'implémentation — ProxmoxPanel CORE
Référence : instruction.md | Mis à jour : 2026-03-21
Stack technique actuelle
| Composant |
Choix |
Statut |
| Backend |
Go 1.23 + chi v5 + gorilla/websocket |
✅ Implémenté |
| Base de données |
SQLite via modernc.org/sqlite (sans CGO) |
✅ Implémenté |
| Auth |
PAM via SSH + JWT RS256 |
✅ Implémenté |
| Chiffrement |
AES-256-GCM (master.key) |
✅ Implémenté |
| Frontend |
Alpine.js v3 + HTMX v2 + Swup v4 |
✅ Branche frontend/alpine |
| Icônes |
LineIcons Duotone |
⚠️ Non intégré (symboles Unicode utilisés) |
| Terminal |
xterm.js v5 + addon-fit + WS PTY |
✅ Implémenté |
| Build frontend |
esbuild (bundler Swup ESM → IIFE) |
✅ Implémenté |
| Serveur statique |
Nginx 1.27 |
✅ Dockerfile simplifié |
Fonctionnalités CORE — État d'avancement
1. Page d'installation ✅
- Wizard 4 étapes (Alpine.js)
- Pré-remplissage URL automatique depuis
window.location.origin
- Test SSH (fetch POST /api/install/test-ssh)
- Configuration Proxmox API (token unique format
user@realm!tokenid=secret)
- Manque : pré-remplissage du port depuis la requête entrante
2. Gestion des comptes utilisateurs ✅
- Création automatique au premier login (PAM SSH → upsert SQLite)
- JWT access (15min) + refresh cookie httpOnly (7j)
- Deux niveaux : Admin (groupe sudo/wheel) et Utilisateur
- Manque : page profil utilisateur, préférences per-user en DB
3. Détection LXC/VM ✅
- API Proxmox REST (client Go, InsecureSkipVerify)
- WS
/ws/proxmox — polling 10s, type resources_update, payload [...]
- Affichage en temps réel dans les pages Dashboard et Proxmox
- Fix appliqué : données immédiates via HTTP + WS pour live updates
4. Dashboard ⚠️ Partiel
- Compteurs LXC running/stopped ✅
- Liste LXC avec CPU/RAM ✅
- WebSocket live ✅
- Manque : widgets configurables (add/remove/drag-drop) ← requis par instruction.md
- Manque : raccourcis vers services (Grafana, Proxmox, Traefik…)
- Manque : personnalisation per-user sauvegardée en DB
5. Thème Neumorphism ✅
- neu.css (dark/light mode via CSS custom properties) ✅
- Toggle dark/light dans la navbar ✅
- Sidebar repliable ✅
- Responsive (media queries) ✅
- Manque : sidebar gauche/droite per-user ← requis par instruction.md
- Manque : LineIcons Duotone (actuellement Unicode symbols) ← requis par instruction.md
6. Gestion des langues ✅
- fr.json / en.json via Alpine store i18n ✅
- Sélecteur dans la navbar ✅
- Sauvegarde dans localStorage ✅
- Manque : sauvegarde per-user en DB
7. Mises à jour paquets ✅
- Liste par cible (host + LXC) ✅
apt update + apt full-upgrade -y via SSH ✅
- Streaming WS live (type
update_output / update_done / update_error) ✅
- Fix appliqué :
msg.payload (pas msg.data)
- Manque : historique des mises à jour
8. Système de paramètres ✅
- Onglets Général / SSH / Proxmox API ✅
PUT /api/settings/{key} per-key ✅
- Secrets chiffrés AES-256-GCM en DB ✅
- Manque : onglet Apparence (sidebar position, thème par défaut)
- Manque : onglet Langues disponibles
9. Mises à jour CORE/modules ❌ Non implémenté
- Vérification nouvelles versions Forgejo
- Affichage changelog
- Détection migrations post-update
10. Store de modules ⚠️ Partiel
- Liste des modules (CORE + optionnels stubs) ✅
- Toggle enable/disable ✅
- Manque : installation/désinstallation de modules externes
- Manque : registre officiel + registres supplémentaires
11. Page post-installation/migration ❌ Non implémenté
- Blocage total de l'accès si migration en attente
Bugs résolus dans cette session
| Bug |
Fix |
| CSS cassé au changement de page via Swup |
Extraction de tous les styles inline en css/pages.css global |
| Dashboard/Proxmox WS bloqué à "⌛ Connexion…" |
Type WS était proxmox_resources → corrigé en resources_update |
WS lit msg.data au lieu de msg.payload |
Corrigé pour dashboard, proxmox, updates |
| Délai 10s avant 1er affichage données |
Ajout fetch HTTP immédiat + WS pour updates live |
access_token null au login |
Corrigé en session précédente |
CSS variables incorrectes (--bg-primary) |
Corrigé en session précédente |
Non-conformités instruction.md à corriger
| Règle |
État |
Priorité |
| Icônes LineIcons Duotone uniquement |
✅ Intégrés (css/ + toutes les pages) |
Haute |
| Dashboard widgets add/remove/drag-drop |
✅ Widget system + DnD natif HTML5 |
Haute |
| Sidebar gauche/droite per-user |
✅ data-sidebar CSS + profilePage |
Moyenne |
| Page profil préférences (thème/sidebar/langue) |
✅ profile.html créée |
Moyenne |
| Préférences utilisateur en DB |
❌ localStorage uniquement |
Basse |
| Historique mises à jour |
❌ Non affiché |
Basse |
| Mises à jour CORE/modules depuis interface |
❌ Non implémenté |
Basse |
| Page blocage migration |
❌ Non implémenté |
Basse |
Architecture Docker
core/
├── backend/ (Go — port 3001 interne)
├── frontend/ (Alpine.js — build → Nginx)
│ ├── js/app.js (stores + composants Alpine)
│ ├── css/neu.css (neumorphism + layout)
│ ├── css/pages.css (styles spécifiques pages)
│ └── *.html (pages statiques)
└── docker-compose.yml
Commandes utiles
# Build frontend (sur LXC ou machine dev)
cd core/frontend && npm run build
# Déploiement sur LXC 112
docker compose pull && docker compose up -d --build
# Logs
docker compose logs -f backend
docker compose logs -f frontend