refact: use only server
This commit is contained in:
265
README.md
265
README.md
@@ -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.
|
||||
Reference in New Issue
Block a user