feat: initialisation complète du CORE ProxmoxPanel

Backend Go 1.23+ :
- API REST + WebSocket (chi, gorilla/websocket)
- Authentification PAM via SSH + JWT RS256
- Chiffrement AES-256-GCM pour secrets SQLite
- Pool SSH, client Proxmox REST, hub WebSocket pub/sub
- Système de modules compilés à initialisation conditionnelle
- Audit log, migrations SQLite versionnées

Frontend Vue 3 + Vite + TypeScript :
- Thème Neumorphism sombre/clair (CSS custom properties)
- Wizard d'installation, Dashboard drag-drop, Terminal xterm.js
- Toutes les vues CORE + stubs modules optionnels
- i18n EN/FR (vue-i18n v11)

Infrastructure :
- Docker multi-stage (Go → alpine, Node → nginx)
- docker-compose.yml, .gitattributes, LICENSE MIT, README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
enzo 2026-03-20 21:08:53 +01:00
commit 5dbcb1df07
66 changed files with 10370 additions and 0 deletions

73
docker-compose.yml Normal file
View file

@ -0,0 +1,73 @@
# ProxmoxPanel — Docker Compose
# Démarrage : docker-compose up --build
# Accès : http://localhost (port 80) ou https://panel.geronzi.fr via Traefik
services:
# ── Backend Go (API + WebSocket) ────────────────────────────────────────
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: proxmoxpanel-backend
restart: unless-stopped
expose:
- "3001"
volumes:
# Volume persistant pour SQLite, clés JWT, clé maître AES
- panel-data:/app/data
environment:
- DATA_DIR=/app/data
- LISTEN_ADDR=:3001
- APP_ENV=production
# Pas de réseau host — le container reste isolé
# Les connexions SSH sortantes vers le host Proxmox sont autorisées via le réseau Docker
networks:
- proxmoxpanel-net
# Limite de ressources recommandées
deploy:
resources:
limits:
memory: 256M
cpus: "1.0"
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:3001/api/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
# ── Frontend Vue 3 (Nginx + assets statiques) ───────────────────────────
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: proxmoxpanel-frontend
restart: unless-stopped
ports:
# En développement local : http://localhost:80
# En production : Traefik se charge du port 443 → ce port est juste pour accès direct
- "80:80"
depends_on:
backend:
condition: service_healthy
networks:
- proxmoxpanel-net
deploy:
resources:
limits:
memory: 64M
cpus: "0.5"
# ── Volumes ────────────────────────────────────────────────────────────────
volumes:
# Données persistantes : SQLite + clés cryptographiques
# NE PAS supprimer ce volume sans sauvegarder panel.db au préalable
panel-data:
name: proxmoxpanel-data
# ── Réseaux ────────────────────────────────────────────────────────────────
networks:
proxmoxpanel-net:
name: proxmoxpanel-net
driver: bridge