214 lines
5.7 KiB
Markdown
214 lines
5.7 KiB
Markdown
# Proxmox Manager
|
|
|
|
Applicazione web per gestire macchine virtuali Proxmox VE con supporto multi-utente, backup, snapshot e DNS Cloudflare.
|
|
|
|
---
|
|
|
|
## Prerequisiti
|
|
|
|
Prima di iniziare, assicurati di avere installato:
|
|
|
|
- **Python 3.10+** — [scarica qui](https://www.python.org/downloads/)
|
|
- **MySQL o MariaDB** — database relazionale
|
|
- **Accesso a un'istanza Proxmox VE** con API token configurato
|
|
- _(Opzionale)_ **Account Cloudflare** con API token per la gestione DNS
|
|
|
|
---
|
|
|
|
## Installazione passo per passo
|
|
|
|
### 1. Clona o scarica il progetto
|
|
|
|
```bash
|
|
# Se usi Git:
|
|
git clone <url-repository>
|
|
cd PROXMOX_FINAL
|
|
|
|
# Oppure estrai lo zip nella cartella desiderata
|
|
```
|
|
|
|
### 2. Crea un ambiente virtuale Python
|
|
|
|
```bash
|
|
# Windows
|
|
python -m venv venv
|
|
venv\Scripts\activate
|
|
|
|
# Linux / macOS
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
```
|
|
|
|
### 3. Installa le dipendenze
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 4. Configura le variabili d'ambiente
|
|
|
|
Copia il file di esempio e compila i tuoi dati:
|
|
|
|
```bash
|
|
# Windows
|
|
copy .env.example .env
|
|
|
|
# Linux / macOS
|
|
cp .env.example .env
|
|
```
|
|
|
|
Apri `.env` con un editor di testo e modifica questi campi:
|
|
|
|
```env
|
|
# Chiave segreta Flask (cambiala con una stringa casuale lunga)
|
|
SECRET_KEY=cambia-questa-stringa-con-qualcosa-di-random
|
|
|
|
# Database MySQL/MariaDB
|
|
DB_HOST=localhost
|
|
DB_USER=root
|
|
DB_PASSWORD=la-tua-password-mysql
|
|
DB_NAME=proxmox_manager
|
|
|
|
# Proxmox VE
|
|
PROXMOX_IP=192.168.1.100 # IP del tuo server Proxmox
|
|
PROXMOX_PORT=8006
|
|
API_TOKEN_ID=root@pam!mytoken # ID del token API Proxmox
|
|
API_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
|
|
# URL pubblico per l'accesso console (via reverse proxy)
|
|
PROXMOX_PUBLIC_URL=https://proxmox.tuodominio.it
|
|
|
|
# Impostazioni applicazione
|
|
MAX_BACKUPS_PER_USER=3
|
|
SESSION_TIMEOUT_MINUTES=60
|
|
|
|
# Cloudflare (opzionale, solo per gestione sottodomini DNS)
|
|
CLOUDFLARE_API_TOKEN=il-tuo-token-cloudflare
|
|
CLOUDFLARE_ZONE_ID=il-tuo-zone-id
|
|
CLOUDFLARE_DOMAIN=tuodominio.it
|
|
```
|
|
|
|
### 5. Crea il database
|
|
|
|
Esegui lo script Python che crea automaticamente l'intero database:
|
|
|
|
```bash
|
|
python create_database.py
|
|
```
|
|
|
|
Lo script creerà:
|
|
- Il database `proxmox_manager`
|
|
- Tutte le tabelle necessarie
|
|
- Un utente **admin** di default
|
|
|
|
**Credenziali di default:**
|
|
| Utente | Password | Ruolo |
|
|
|--------|----------|-------|
|
|
| `admin` | `admin123` | Amministratore |
|
|
| `testuser` | `test123` | Utente normale |
|
|
|
|
> **IMPORTANTE:** Cambia le password al primo accesso!
|
|
|
|
### 6. Avvia l'applicazione
|
|
|
|
```bash
|
|
python app.py
|
|
```
|
|
|
|
Apri il browser e vai su: **http://localhost:5000**
|
|
|
|
---
|
|
|
|
## Come ottenere il Token API di Proxmox
|
|
|
|
1. Accedi alla tua interfaccia Proxmox (`https://IP-PROXMOX:8006`)
|
|
2. Vai in **Datacenter** → **Permissions** → **API Tokens**
|
|
3. Clicca **Add** e crea un token per l'utente `root@pam`
|
|
4. Copia il **Token ID** e il **Token Secret**
|
|
5. Incollali nel file `.env`:
|
|
```
|
|
API_TOKEN_ID=root@pam!nome-del-token
|
|
API_TOKEN_SECRET=il-secret-copiato
|
|
```
|
|
|
|
---
|
|
|
|
## Come ottenere il Token API di Cloudflare (opzionale)
|
|
|
|
Solo se vuoi usare la funzione di gestione sottodomini DNS:
|
|
|
|
1. Accedi a [dash.cloudflare.com](https://dash.cloudflare.com)
|
|
2. Vai su **My Profile** → **API Tokens** → **Create Token**
|
|
3. Scegli il template **Edit zone DNS**
|
|
4. Seleziona il tuo dominio e crea il token
|
|
5. Copia il token e incollalo nel `.env`
|
|
6. Per il **Zone ID**: torna sulla dashboard, seleziona il dominio → sidebar destra → **Zone ID**
|
|
|
|
---
|
|
|
|
## Struttura del progetto
|
|
|
|
```
|
|
PROXMOX_FINAL/
|
|
├── app.py # Applicazione principale Flask (route e logica)
|
|
├── models.py # Modelli database (User, VM, Log, ecc.)
|
|
├── config.py # Configurazione (legge .env)
|
|
├── create_database.py # Script per creare il database
|
|
├── schema.sql # Schema SQL (riferimento)
|
|
├── requirements.txt # Dipendenze Python
|
|
├── .env.example # Template configurazione
|
|
├── .env # La tua configurazione (NON condividere!)
|
|
├── static/
|
|
│ └── css/ # Fogli di stile
|
|
└── templates/ # Pagine HTML (Jinja2)
|
|
```
|
|
|
|
---
|
|
|
|
## Funzionalità principali
|
|
|
|
| Funzionalità | Descrizione |
|
|
|---|---|
|
|
| **Dashboard VM** | Visualizza e gestisci le tue VM assegnate |
|
|
| **Start / Stop / Reboot** | Controlla lo stato delle VM |
|
|
| **Snapshot** | Crea e cancella snapshot (max 3 per utente) |
|
|
| **Backup** | Crea e gestisci backup (max configurabile) |
|
|
| **Console** | Accedi alla console della VM via browser |
|
|
| **Sottodomini DNS** | Crea/elimina record DNS su Cloudflare |
|
|
| **IPAM** | Gestione indirizzi IP delle VM |
|
|
| **Pannello Admin** | Gestione utenti, assegnazione VM, log audit |
|
|
| **Topologia Cluster** | Visualizzazione grafica del cluster Proxmox |
|
|
|
|
---
|
|
|
|
## Risoluzione problemi
|
|
|
|
**Errore di connessione al database:**
|
|
- Verifica che MySQL/MariaDB sia avviato
|
|
- Controlla le credenziali nel file `.env`
|
|
- Assicurati che l'utente MySQL abbia i permessi sul database
|
|
|
|
**Errore di connessione a Proxmox:**
|
|
- Verifica che l'IP di Proxmox sia raggiungibile
|
|
- Controlla che il token API sia valido e non scaduto
|
|
- L'applicazione ignora gli errori SSL (certificato self-signed Proxmox è normale)
|
|
|
|
**Login non funziona con admin/admin123:**
|
|
- Assicurati di aver eseguito `python create_database.py`
|
|
- Prova a eseguire nuovamente lo script, sovrascriverà i dati esistenti
|
|
|
|
**La porta 5000 è già in uso:**
|
|
- Su macOS la porta 5000 è occupata da AirPlay. Modifica in `app.py` la riga finale:
|
|
```python
|
|
app.run(host='0.0.0.0', port=5001, debug=True)
|
|
```
|
|
|
|
---
|
|
|
|
## Note di sicurezza
|
|
|
|
- Non esporre l'applicazione su internet senza un reverse proxy (nginx/caddy) con HTTPS
|
|
- Cambia `SECRET_KEY` con una stringa casuale sicura
|
|
- Non committare mai il file `.env` su Git (è già in `.gitignore`)
|
|
- Cambia le password di default dopo il primo accesso
|