Panoramica Server
Siti Attivi nel Server
Monitor Tracciamento Real-Time
Configurazione Siti Web & Database
| Nome Sito | Percorso Locale | Configurazione DB | Tracciamento Git | Dimensioni | Azioni |
|---|
Archivio Storico dei Backup manuali
| Sito | Tipo | Nome File | Database | Dimensioni | Data Creazione | Note | Azioni |
|---|
Tracciamento Modifiche File
| Progetto | Tipo Modifica | File | Orario Modifica | Messaggio Commit | Azioni |
|---|
Modifica la tua password
Mantieni sicuro il tuo account aggiornando regolarmente le tue credenziali di accesso.
Imposta la tua email per poter recuperare l'accesso in caso di password dimenticata.
Autenticazione a Due Fattori (MFA)
Proteggi il tuo account aggiungendo un ulteriore livello di sicurezza. Ogni volta che effettuerai l'accesso, ti verrà richiesto un codice monouso OTP.
Gestione Utenti di Sistema
| Username | Email Recupero | Ruolo | Data Registrazione | Azioni |
|---|
Impostazioni di Sistema
Schedulatore Backup Automatici
Pianifica l'esecuzione periodica dei backup in background per tutti i progetti gestiti.
Politica di Conservazione
Gestisci lo spazio eliminando automaticamente o manualmente gli archivi storici più vecchi.
Esegui una cancellazione manuale dei file storici più vecchi dei giorni sopra impostati con un solo clic.
Attivazione Schedulatore di Sistema (Cron Job)
Per fare in modo che i backup programmati sopra vengano eseguiti regolarmente in background dal server, devi aggiungere il seguente comando al Crontab del server Linux principale (eseguito in modo sicuro sotto l'utente www-data):
Questo comando viene eseguito ogni minuto in background dal server per verificare le pianificazioni all'ora esatta configurata ed eliminare automaticamente i backup obsoleti.
Regole Crontab Attive nel Server (utente: www-data)
Indice dei Contenuti
1. Architettura del Sistema
Backupserver è un sistema di backup, versioning e ripristino per applicazioni web. Si compone di tre strati principali che lavorano in modo coordinato.
Pannello di controllo in HTML/CSS/JavaScript puro. Comunica con il backend tramite API REST JSON.
Cartella api/ con endpoint REST per autenticazione, siti, backup, impostazioni e restore.
watcher.py — Daemon Python che monitora i file in real-time tramite inotifywait e crea commit Git automatici.
Struttura delle Cartelle
serverbackup/ ├── api/ ← Endpoint PHP (auth, backup, restore, sites...) │ ├── auth.php ← Login / logout / sessione │ ├── backups.php ← Creazione, lista, restore, download backup │ ├── sites.php ← CRUD siti monitorati │ ├── settings.php ← Impostazioni globali (DB, cron, SMTP) │ ├── cron_backup.php ← Eseguito da crontab per backup schedulati │ ├── restore.php ← Logica restore: in-place, fork, export │ ├── db.php ← Connessione PDO + helper configurazione │ └── mail_helper.php ← Invio email SMTP Gmail ├── git_repos/ ← Repository Git bare per ogni sito tracciato ├── db_backups/ ← Dump SQL dei database (configurabile) ├── site_backups/ ← Archivi ZIP completi (configurabile) ├── safety_backups/ ← Backup di sicurezza pre-restore ├── assets/ ← Screenshot e risorse statiche ├── index.html ← SPA Frontend ├── app.js ← Logica JavaScript SPA ├── style.css ← Foglio stile principale ├── watcher.py ← Daemon di monitoraggio real-time └── manual.php ← Manuale operativo (versione PHP autonoma)
2. Panoramica — Dashboard
La schermata principale fornisce una visione globale in tempo reale del sistema.
Contatore aggiornato dei siti web registrati nel sistema. Ogni sito può avere tracciamento Git attivo o sospeso.
Numero totale di backup (DB dump e ZIP completi) presenti nelle cartelle di archiviazione configurate.
Indicatore ATTIVO/INATTIVO del daemon Python. Se inattivo, nessun commit automatico viene eseguito.
Feed live degli eventi registrati dal daemon: file aggiunti [A], modificati [M] o eliminati [D] con hash Git.
3. Gestione Siti
Ogni sito web da monitorare deve essere registrato con le sue configurazioni. Sono supportati sia siti locali che server remoti via SSH.
Aggiungere un Sito Locale
qrcode) e il Percorso Cartella (es: /var/www/html/qrcode).Aggiungere un Sito Remoto (SSH)
Per monitorare siti su server Linux remoti, seleziona "Remoto (Server SSH)" nel campo Tipo di Collegamento.
| Campo | Descrizione | Esempio |
|---|---|---|
Host Remoto | IP o hostname del server SSH remoto | 192.168.1.100 |
Porta SSH | Porta del demone SSH (default 22) | 22 |
Utente SSH | Username per il login SSH | root |
Autenticazione | Password SSH oppure Chiave SSH (raccomandato) | key |
Percorso Remoto | Percorso assoluto della cartella sul server remoto | /var/www/html/sito |
4. Archivio Backup
Il sistema supporta due tipologie di backup, avviabili manualmente o schedulati automaticamente.
Esegue mysqldump del database configurato. Genera un file .sql.gz compresso nella cartella db_backups/.
Crea un archivio ZIP dell'intera cartella del sito + dump SQL del DB. Salvato in site_backups/.
Filtrare i Backup
La barra filtri permette di cercare per sito, tipo (DB o Completo), data specifica e testo libero (nome file, note, database).
Scaricare o Eliminare un Backup
Per ogni backup nella tabella sono disponibili: Scarica (download diretto del file) e Elimina (rimozione definitiva dal disco).
5. Backup Remoto (SCP / Rsync)
Il modulo di offsite backup permette di inviare ogni nuovo backup creato verso un server Linux remoto via SSH, usando SCP o Rsync.
| Parametro | Descrizione |
|---|---|
| Server Remoto | IP o hostname del server di destinazione |
| Porta SSH | Default 22 |
| Metodo Trasferimento | SCP (copia singolo file) o Rsync (sincronizzazione differenziale) |
| Autenticazione | Password SSH o Chiave SSH pubblica (consigliato) |
| Percorso Remoto | Cartella di destinazione sul server remoto (es: /var/backups) |
| Attiva automatico | Se spuntato, ogni backup creato viene copiato in automatico sul server remoto |
Configurare la Chiave SSH
~/.ssh/authorized_keys sul server remoto.6. Time Travel — Ripristino Versioni
Il Time Travel sfrutta il repository Git interno per navigare nella cronologia dei file e ripristinare qualsiasi versione passata con precisione al minuto.
Sovrascrive il sito corrente con la versione passata. Crea prima un backup di sicurezza automatico in safety_backups/.
Crea una copia del sito nella versione passata in una nuova cartella, senza toccare il sito originale.
Genera un pacchetto ZIP autonomo della versione passata, scaricabile e deployabile su qualsiasi server.
Ricerca File nello Storico
Puoi cercare un file specifico (es: index.php) per vedere tutte le versioni in cui è stato modificato nel tempo, ordinando la cronologia commit per quel file.
7. Gestione Utenti
Il sistema supporta due ruoli con permessi differenti.
| Ruolo | Descrizione | Permessi |
|---|---|---|
| admin | Amministratore del sistema | Accesso completo: backup, restore, gestione siti, impostazioni, manuale, utenti |
| viewer | Utente di sola lettura | Visualizza panoramica, backup e Time Travel. Non può modificare nulla. |
8. Impostazioni Generali
Pannello di configurazione globale del sistema, accessibile solo agli amministratori.
| Impostazione | Descrizione |
|---|---|
| Percorso Backup | Cartella base dove vengono salvati tutti i dump DB e gli archivi ZIP |
| Schedule DB | Frequenza automatica per i dump del database: Orario / Giornaliero / Settimanale |
| Schedule Full Backup | Frequenza automatica per il backup completo (file + DB) |
| Ora di Esecuzione | Orario cron per le schedule giornaliere/settimanali (es: 02:00) |
| Smart Skip | Salta il backup se non ci sono modifiche dall'ultimo salvataggio |
| Spazio Disco | Monitor dello spazio disco con grafico utilizzo e gestione file obsoleti |
| SMTP Gmail | Configurazione per notifiche email HTML professionali tramite App Password Gmail |
| Daemon Watcher | Avvia/Ferma il daemon di monitoraggio file real-time, forza backup immediato |
9. Watcher Daemon
Il Watcher Daemon è un processo Python che gira in background e monitora le cartelle dei siti tracciati usando inotifywait.
Come funziona
is_tracked = 1 dal database.inotifywait per intercettare eventi filesystem (CREATE, MODIFY, DELETE).git add + git commit nel repository bare del sito in git_repos/.daemon_status.json e reso disponibile nella dashboard in tempo reale.Avviare il Daemon Manualmente
cd /percorso/del/tuo/progetto python3 watcher.py &
Avviare il Daemon in Modo Persistente (consigliato)
Per far partire il daemon automaticamente all'avvio del server, aggiungi una voce crontab con @reboot:
@reboot cd /percorso/del/tuo/progetto && python3 watcher.py >> /tmp/watcher.log 2>&1 &
10. Crontab e Scheduler
Il sistema genera automaticamente le voci crontab in base alle impostazioni configurate nel pannello. I backup schedulati vengono eseguiti dall'endpoint api/cron_backup.php.
Configurare il Crontab
Poiché questo pannello web è eseguito dall'utente del server web (www-data), le pianificazioni automatiche sono registrate direttamente nel crontab dell'utente www-data. Se utilizzi un terminale SSH (ad esempio come utente root), digitando semplicemente crontab -e vedrai il crontab dell'utente corrente (che risulterà vuoto o non conterrà queste voci).
Per ispezionare o modificare le schedulazioni generate automaticamente direttamente dal terminale SSH, devi specificare l'utente corretto utilizzando il flag -u:
crontab -u www-data -l # Per visualizzare le pianificazioni attive crontab -u www-data -e # Per modificare manualmente le pianificazioni
Voci Crontab Tipiche
| Schedule | Tipo | Voce Crontab |
|---|---|---|
| Ogni ora | Dump DB | 0 * * * * curl -s http://127.0.0.1/serverbackup/api/cron_backup.php?type=db |
| Ogni giorno alle 02:00 | Dump DB | 0 2 * * * curl -s http://127.0.0.1/serverbackup/api/cron_backup.php?type=db |
| Ogni settimana (Lunedì alle 02:00) | Backup Completo | 0 2 * * 1 curl -s http://127.0.0.1/serverbackup/api/cron_backup.php?type=full |
| All'avvio del server | Watcher Daemon | @reboot cd /percorso/del/tuo/progetto && python3 watcher.py >> /tmp/watcher.log 2>&1 & |
11. Dipendenze Software
Le seguenti dipendenze devono essere installate sul server per garantire il funzionamento completo del sistema.
| Software | Utilizzo | Installazione (Debian/Ubuntu) | Obbligatorio |
|---|---|---|---|
| PHP 8+ | Backend API, cron, restore | apt install php php-pdo php-mysql |
✓ Sì |
| MySQL / MariaDB | Database del sistema | apt install mariadb-server |
✓ Sì |
| Apache / Nginx | Web server per l'interfaccia | apt install apache2 |
✓ Sì |
| Git | Versioning e Time Travel | apt install git |
✓ Sì |
| Python 3 | Watcher Daemon real-time | apt install python3 |
✓ Sì |
| inotifywait | Monitoraggio filesystem del daemon | apt install inotify-tools |
✓ Sì |
| zip / gzip | Compressione backup ZIP e .sql.gz | apt install zip gzip |
✓ Sì |
| mysqldump | Dump dei database MySQL | Incluso con mariadb-client |
✓ Sì |
| sshpass | Backup remoto con password SSH | apt install sshpass |
◎ Opzionale |
| rsync | Backup remoto con Rsync | apt install rsync |
◎ Opzionale |
Comando Unico di Installazione Completa
apt update && apt install -y apache2 php php-pdo php-mysql mariadb-server git python3 inotify-tools zip gzip sshpass rsync
12. Migrazione su Altro Server
Guida passo per passo per installare e configurare Backupserver su un nuovo server Linux.
apt update && apt install -y apache2 php php-pdo php-mysql mariadb-server git python3 inotify-tools zip gzip sshpass rsync
# Via SCP dal vecchio server scp -r /percorso/del/tuo/progetto root@NUOVO_SERVER:/var/www/html/ # Oppure da Git (se hai il repo) git clone https://github.com/tuo-repo/serverbackup /percorso/del/tuo/progetto
mysql -u root -p -e "CREATE DATABASE serverbackup CHARACTER SET utf8mb4;" mysql -u root -p serverbackup < backup_serverbackup.sql
api/db.php
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'serverbackup');
define('DB_USER', 'root');
define('DB_PASS', 'nuova_password');
chown -R www-data:www-data /percorso/del/tuo/progetto chmod -R 755 /percorso/del/tuo/progetto chmod -R 775 /percorso/del/tuo/progetto/git_repos chmod -R 775 /percorso/del/tuo/progetto/db_backups chmod -R 775 /percorso/del/tuo/progetto/site_backups
crontab -e # Aggiungere le seguenti righe: @reboot cd /percorso/del/tuo/progetto && python3 watcher.py >> /tmp/watcher.log 2>&1 & 0 2 * * * curl -s http://127.0.0.1/serverbackup/api/cron_backup.php?type=db 0 2 * * 1 curl -s http://127.0.0.1/serverbackup/api/cron_backup.php?type=full
cd /percorso/del/tuo/progetto && python3 watcher.py & # Verifica status curl http://127.0.0.1/serverbackup/api/status.php
Apri il browser su http://NUOVO_SERVER/serverbackup/ e accedi con le credenziali admin. Verifica che il daemon risulti ATTIVO nella dashboard.