refact: use only server

This commit is contained in:
2025-08-27 13:28:50 +02:00
parent cf8a37f183
commit 2934224787
39 changed files with 6843 additions and 1223 deletions

265
README.md
View File

@@ -1,136 +1,195 @@
# Zebra Power 🍅
Application dockerisée pour la gestion Wake-on-LAN et le contrôle des VMs/Containers Proxmox.
*Nommée d'après la tomate verte zebra*
## Fonctionnalités
- **Wake-on-LAN** : Réveil de serveurs via paquets magiques
- **Monitoring** : Ping automatique et statut des serveurs
- **Proxmox** : Gestion des clusters, VMs et containers
- **Dashboard** : Vue d'ensemble avec statistiques
- **Interface moderne** : Vue.js 3 avec Tailwind CSS
Application web dockerisée pour la gestion unifiée d'hosts Proxmox avec Wake-on-LAN, contrôle de VMs/Containers et extinction complète.
## Architecture
- **Backend** : FastAPI + SQLite
- **Frontend** : Vue.js 3 + Tailwind CSS
- **Proxy** : Nginx
- **Base de données** : SQLite (fichier local)
### Modèle unifié ProxmoxHost
- **Wake-on-LAN** : Démarrage via IP/MAC
- **Proxmox** : Gestion VMs/Containers
- **Shutdown** : Extinction host complet
- **Une seule configuration** par host physique
## Installation
### Stack technique
- **Backend** : Python 3.13 + FastAPI 0.115.0 + SQLAlchemy 2.0.35 + uv
- **Frontend** : Vue.js 3.4.0 + Vite 5.0.8 + Tailwind CSS 3.3.6
- **Base de données** : SQLite
- **Infrastructure** : Docker Compose + Nginx 1.25
### Prérequis
## Installation et lancement
- Docker & Docker Compose
- Réseau local pour WOL
### Démarrage rapide
1. Cloner le projet :
### Développement (avec hot reload)
```bash
git clone <repo-url>
cd zebra_power
# Lancer l'application en mode développement
docker-compose -f docker-compose.dev.yml up -d
# Voir les logs
docker-compose -f docker-compose.dev.yml logs -f
# Arrêter
docker-compose -f docker-compose.dev.yml down
```
2. Créer le répertoire de données :
```bash
mkdir -p data
```
**Accès développement :**
- Frontend : http://localhost:3000
- Backend API : http://localhost:8000
- Documentation API : http://localhost:8000/docs
3. Lancer l'application :
### Production
```bash
# Lancer l'application en production
docker-compose up -d
# Voir les logs
docker-compose logs -f
# Arrêter
docker-compose down
```
4. Accéder à l'interface :
- **Application** : http://localhost (via Nginx)
- **Frontend direct** : http://localhost:3000
- **API** : http://localhost:8000
- **Documentation API** : http://localhost:8000/docs
**Accès production :**
- Application complète : http://localhost
## Configuration
## Interface utilisateur
### Serveurs Wake-on-LAN
### Page Hosts unifiée (`/hosts`)
**Workflow intégré par host :**
1.**Wake** - Démarrage WOL
2. 🔄 **VMs** - Chargement et contrôle VMs/Containers
3. 🛑 **Shutdown** - Extinction host et toutes VMs
1. Accédez à la section "Serveurs"
2. Ajoutez un serveur avec :
- Nom
- Adresse IP
- Adresse MAC
- Description (optionnelle)
**Fonctionnalités :**
- Statut temps réel (en ligne/hors ligne)
- Configuration complète (WOL + Proxmox)
- Actions groupées par host physique
### Clusters Proxmox
### Dashboard (`/`)
**Vue d'ensemble :**
- Nombre total d'hosts et statut
- VMs/Containers actives
- Actions rapides Wake/Start/Stop
- Logs récents centralisés
1. Accédez à la section "Proxmox"
2. Ajoutez un cluster avec :
- Nom du cluster
- Host/IP du serveur Proxmox
- Nom d'utilisateur (ex: root@pam)
- Mot de passe
- Port (défaut: 8006)
- Vérification SSL
## API
## API Endpoints
### Endpoints principaux
- `GET /api/hosts` - Liste des hosts
- `POST /api/hosts` - Créer un host
- `POST /api/hosts/{id}/wake` - Wake-on-LAN
- `GET /api/hosts/{id}/vms` - VMs du host
- `POST /api/hosts/{id}/vms/{vmid}/start` - Démarrer VM
- `POST /api/hosts/{id}/vms/{vmid}/stop` - Arrêter VM
- `POST /api/hosts/{id}/shutdown` - Éteindre host
- `GET /api/wol/all-logs` - Logs centralisés
### Serveurs
- `GET /api/servers` - Liste des serveurs
- `POST /api/servers` - Créer un serveur
- `PUT /api/servers/{id}` - Modifier un serveur
- `DELETE /api/servers/{id}` - Supprimer un serveur
### Structure ProxmoxHost
```json
{
"name": "Mon Host",
"description": "Description optionnelle",
"ip_address": "192.168.1.100",
"mac_address": "00:11:22:33:44:55",
"proxmox_host": "192.168.1.100",
"proxmox_username": "root",
"proxmox_password": "password",
"proxmox_port": 8006,
"verify_ssl": false,
"shutdown_endpoint": "/api/shutdown"
}
```
### Wake-on-LAN
- `POST /api/wol/wake/{server_id}` - Réveiller un serveur
- `POST /api/wol/ping/{server_id}` - Ping un serveur
- `GET /api/wol/logs` - Logs WOL
## Migration depuis ancienne architecture
### Proxmox
- `GET /api/proxmox/clusters` - Liste des clusters
- `POST /api/proxmox/clusters` - Ajouter un cluster
- `GET /api/proxmox/clusters/{id}/vms` - VMs d'un cluster
- `POST /api/proxmox/clusters/{id}/vms/{vmid}/start` - Démarrer VM
- `POST /api/proxmox/clusters/{id}/vms/{vmid}/stop` - Arrêter VM
### Migration des données
```bash
# Migrer serveurs et clusters vers hosts unifiés
docker exec -it zebra_backend uv run python migrate_to_unified_hosts.py
# Optionnel : nettoyer anciennes tables après validation
docker exec -it zebra_backend uv run python cleanup_old_tables.py
```
### Redirections automatiques
- `/servers``/hosts`
- `/proxmox``/hosts`
## Base de données
### Table principale
- **`proxmox_hosts`** - Configuration unifiée hosts
- **`action_logs`** - Historique centralisé toutes actions
- **`wol_logs`** - Legacy (rétrocompatibilité)
### Sauvegarde
```bash
# Sauvegarder la base
cp ./data/zebra.db ./data/zebra.db.backup
# Restaurer
cp ./data/zebra.db.backup ./data/zebra.db
```
## Développement
### Backend
```bash
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload
### Structure backend
```
backend/app/
├── api/hosts.py # API unifiée hosts
├── api/wol.py # Logs (legacy)
├── models/schemas.py # ProxmoxHost schemas
├── services/
│ ├── proxmox_host_service.py # Service unifié
│ ├── logging_service.py # Logs centralisés
│ └── wol_service.py # Utilitaires WOL
├── database.py # Modèles SQLAlchemy
└── main.py # Application FastAPI
```
### Frontend
```bash
cd frontend
npm install
npm run dev
### Structure frontend
```
frontend/src/
├── views/
│ ├── Hosts.vue # Interface unifiée
│ └── Dashboard.vue # Vue d'ensemble
├── services/api.js # hostsApi, logsApi
└── main.js # Routes et configuration
```
## Notes techniques
- Le backend utilise `network_mode: host` pour envoyer des paquets WOL
- Les données sont persistées dans `./data/zebra.db`
- L'interface supporte les thèmes sombres/clairs
- Monitoring temps réel des statuts serveurs
## Dépannage
### WOL ne fonctionne pas
- Vérifiez que WOL est activé sur le serveur cible
- Assurez-vous que le conteneur utilise le réseau host
- Vérifiez l'adresse MAC
### Connexion Proxmox échoue
- Vérifiez les credentials et l'IP
- Testez l'accès via navigateur
- Vérifiez les certificats SSL
### Port déjà utilisé
### Commandes utiles
```bash
docker-compose down
# Modifier les ports dans docker-compose.yml si nécessaire
docker-compose up -d
```
# Tests backend
docker exec -it zebra_backend uv run python test_api.py
# Build images
docker-compose build --no-cache
# Logs spécifiques
docker-compose logs backend
docker-compose logs frontend
docker-compose logs nginx
# Health checks
docker inspect --format='{{.State.Health.Status}}' zebra_backend
```
## Sécurité
- Mode host requis pour Wake-on-LAN
- Validation Pydantic des entrées API
- Logging centralisé de toutes actions
- Gestion des erreurs et timeouts
- Health checks Docker intégrés
## Réseau
### Ports
- **80** : Nginx (production)
- **3000** : Frontend (développement)
- **8000** : Backend API (développement)
### Exigences WOL
- Backend en `network_mode: host`
- Paquet `wakeonlan` installé
- Accès réseau local pour broadcast
L'application est maintenant entièrement unifiée avec une architecture simplifiée et moderne.