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:
commit
5dbcb1df07
66 changed files with 10370 additions and 0 deletions
73
docker-compose.yml
Normal file
73
docker-compose.yml
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue