Panoramica Server

Spazio Disco: 0%
Daemon: Checking...
Siti Monitorati 0
Archivi Backup 0
Watcher Daemon STOPPED
Spazio Disponibile 0 GB

Siti Attivi nel Server

Monitor Tracciamento Real-Time

Legenda: [A] Aggiunti [M] Modificati [D] Eliminati

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

Configura Destinazione Tempo

Tracciamento Modifiche File

Modifiche rilevate: 0
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.

Email per recupero password

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.

Ultima Esecuzione Schedulata:
Backup DB: Mai
Backup Completo: Mai

Politica di Conservazione

Gestisci lo spazio eliminando automaticamente o manualmente gli archivi storici più vecchi.

I backup più vecchi del limite indicato verranno eliminati automaticamente ad ogni ciclo dello schedulatore.

Esegui una cancellazione manuale dei file storici più vecchi dei giorni sopra impostati con un solo clic.

Attivazione Schedulatore di Sistema (Cron Job)

Verifica dello stato del Crontab in corso...

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):

Verifica Stato Crontab...
* * * * * php /percorso/del/tuo/progetto/api/cron_backup.php

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)

Manuale Operativo

Backupserver — Guida Completa per Amministratori

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.

Frontend SPA

Pannello di controllo in HTML/CSS/JavaScript puro. Comunica con il backend tramite API REST JSON.

Backend API PHP

Cartella api/ con endpoint REST per autenticazione, siti, backup, impostazioni e restore.

Watcher Daemon

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)
Due motori di backup: Il sistema usa due meccanismi paralleli: il Watcher Daemon (real-time, per tracciamento commit Git) e i cron job PHP (schedulati, per dump DB e archivi ZIP completi).

2. Panoramica — Dashboard

La schermata principale fornisce una visione globale in tempo reale del sistema.

Siti Monitorati

Contatore aggiornato dei siti web registrati nel sistema. Ogni sito può avere tracciamento Git attivo o sospeso.

Archivi Backup

Numero totale di backup (DB dump e ZIP completi) presenti nelle cartelle di archiviazione configurate.

Stato Watcher Daemon

Indicatore ATTIVO/INATTIVO del daemon Python. Se inattivo, nessun commit automatico viene eseguito.

Monitor Real-Time

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

1
Clicca Registra Nuovo Sito nella sezione Gestione Siti.
2
Inserisci il Nome Sito (es: qrcode) e il Percorso Cartella (es: /var/www/html/qrcode).
3
Compila i dati del database MySQL: Host DB, Nome DB, Utente DB, Password DB.
4
Abilita il Tracciamento Real-Time se vuoi commit Git automatici ad ogni modifica file.
5
Imposta i Giorni di Conservazione Git (default 30 giorni) per il pruning automatico della cronologia.

Aggiungere un Sito Remoto (SSH)

Per monitorare siti su server Linux remoti, seleziona "Remoto (Server SSH)" nel campo Tipo di Collegamento.

CampoDescrizioneEsempio
Host RemotoIP o hostname del server SSH remoto192.168.1.100
Porta SSHPorta del demone SSH (default 22)22
Utente SSHUsername per il login SSHroot
AutenticazionePassword SSH oppure Chiave SSH (raccomandato)key
Percorso RemotoPercorso assoluto della cartella sul server remoto/var/www/html/sito
Nota: I siti remoti non supportano il tracciamento Git real-time né la funzione Time Travel. Supportano esclusivamente backup ZIP e dump DB tramite rsync/SCP.

4. Archivio Backup

Il sistema supporta due tipologie di backup, avviabili manualmente o schedulati automaticamente.

Backup DB (Solo Database)

Esegue mysqldump del database configurato. Genera un file .sql.gz compresso nella cartella db_backups/.

Backup Completo (ZIP)

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).

Smart Skip: Se abilitato nelle Impostazioni, il sistema salta automaticamente la creazione del backup se non sono avvenute modifiche dall'ultimo salvataggio. I backup saltati appaiono con il badge Smart Skip.

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.

ParametroDescrizione
Server RemotoIP o hostname del server di destinazione
Porta SSHDefault 22
Metodo TrasferimentoSCP (copia singolo file) o Rsync (sincronizzazione differenziale)
AutenticazionePassword SSH o Chiave SSH pubblica (consigliato)
Percorso RemotoCartella di destinazione sul server remoto (es: /var/backups)
Attiva automaticoSe spuntato, ogni backup creato viene copiato in automatico sul server remoto

Configurare la Chiave SSH

1
Vai in Archivio Backup → Sezione Backup Remoto e scegli "Chiave SSH" come metodo autenticazione.
2
Visualizza la Chiave Pubblica SSH di Backupserver e copiala.
3
Clicca Installa Chiave sul Server Remoto Automaticamente (richiede password SSH una-tantum) oppure aggiungila manualmente a ~/.ssh/authorized_keys sul server remoto.
4
Usa Test Connessione per verificare che la comunicazione SSH funzioni correttamente.

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.

1
Seleziona il sito dal menu a tendina. Appariranno le scorciatoie temporali e il selettore data/ora.
2
Scegli un preset (10 min, 1 ora, 1 giorno, 13 giorni fa) oppure imposta una data e ora personalizzata.
3
Clicca Cerca Versione — il sistema trova il commit Git più vicino a quella data.
4
Esplora l'Esploratore File nel Passato: naviga la struttura ad albero, visualizza il codice o i diff rispetto alla versione attuale.
5
Scegli tra tre modalità di ripristino:
Ripristina Qui

Sovrascrive il sito corrente con la versione passata. Crea prima un backup di sicurezza automatico in safety_backups/.

Fork Progetto

Crea una copia del sito nella versione passata in una nuova cartella, senza toccare il sito originale.

Esporta per Altro Server

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.

RuoloDescrizionePermessi
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.
Il primo utente admin viene creato eseguendo lo script di installazione iniziale. Gli utenti successivi possono essere aggiunti dalla sezione Gestione Utenti → Nuovo Utente.

8. Impostazioni Generali

Pannello di configurazione globale del sistema, accessibile solo agli amministratori.

ImpostazioneDescrizione
Percorso BackupCartella base dove vengono salvati tutti i dump DB e gli archivi ZIP
Schedule DBFrequenza automatica per i dump del database: Orario / Giornaliero / Settimanale
Schedule Full BackupFrequenza automatica per il backup completo (file + DB)
Ora di EsecuzioneOrario cron per le schedule giornaliere/settimanali (es: 02:00)
Smart SkipSalta il backup se non ci sono modifiche dall'ultimo salvataggio
Spazio DiscoMonitor dello spazio disco con grafico utilizzo e gestione file obsoleti
SMTP GmailConfigurazione per notifiche email HTML professionali tramite App Password Gmail
Daemon WatcherAvvia/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

1
Il daemon legge tutti i siti con is_tracked = 1 dal database.
2
Per ogni sito, usa inotifywait per intercettare eventi filesystem (CREATE, MODIFY, DELETE).
3
Ogni modifica rilevata genera un git add + git commit nel repository bare del sito in git_repos/.
4
L'evento viene registrato in 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

ScheduleTipoVoce 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 &
Il pannello Impostazioni Generali include un pulsante "Forza Esecuzione Manuale dei Backup Ora!" che lancia immediatamente l'endpoint cron senza aspettare la schedule.

11. Dipendenze Software

Le seguenti dipendenze devono essere installate sul server per garantire il funzionamento completo del sistema.

SoftwareUtilizzoInstallazione (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.

1
Installare le dipendenze
apt update && apt install -y apache2 php php-pdo php-mysql mariadb-server git python3 inotify-tools zip gzip sshpass rsync
2
Copiare i file del progetto
# 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
3
Creare il database e importare i dati
mysql -u root -p -e "CREATE DATABASE serverbackup CHARACTER SET utf8mb4;"
mysql -u root -p serverbackup < backup_serverbackup.sql
4
Configurare le credenziali DB in api/db.php
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'serverbackup');
define('DB_USER', 'root');
define('DB_PASS', 'nuova_password');
5
Impostare i permessi corretti
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
6
Configurare il crontab sul nuovo server
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
7
Avviare il daemon e verificare
cd /percorso/del/tuo/progetto && python3 watcher.py &
# Verifica status
curl http://127.0.0.1/serverbackup/api/status.php
8
Accedere al pannello

Apri il browser su http://NUOVO_SERVER/serverbackup/ e accedi con le credenziali admin. Verifica che il daemon risulti ATTIVO nella dashboard.

Importante: Aggiorna i percorsi delle cartelle dei siti registrati nelle impostazioni dopo la migrazione. I percorsi assoluti potrebbero essere diversi sul nuovo server.