Creare una fotografia speculare del sito attuale CON TUTTI I DATI per ripristino completo su un'altra piattaforma.
Sul sistema SORGENTE (dove hai i dati attuali):
cd /home/mpasqui/insightlearn-wasm
# Esegui backup completo
./backup-data.sh
# Output esempio:
# ✅ SQL Server backup saved: 250MB
# ✅ MongoDB backup saved: 1.2GB
# ✅ Redis backup saved: 45MB
# ✅ API files backup saved: 3.5GB
# ✅ Backup complete: ./backups/data_20251102_223000Questo crea:
InsightLearnDb.bak- Database SQL Server COMPLETO con tutti i datimongodb_dump/- Tutti i dati MongoDB (video, chatbot messages)redis_dump.rdb- Cache Redisapi-files.tar.gz- Tutti i file caricati dagli utentirestore-data.sh- Script di ripristino automatico
# Crea archivio completo con codice + dati
tar -czf insightlearn-complete-$(date +%Y%m%d).tar.gz \
--exclude='.git' \
--exclude='*.log' \
--exclude='obj' \
--exclude='bin' \
.
# Risultato: archivio con TUTTO
# - Codice sorgente
# - Configurazioni
# - Docker Compose
# - Kubernetes manifests
# - Script deployment
# - Backup dati (backups/)Metodo A: USB/Storage Esterno
# Copia su USB
cp insightlearn-complete-20251102.tar.gz /media/usb/
# Sul nuovo sistema
cp /media/usb/insightlearn-complete-20251102.tar.gz ~/
cd ~
tar xzf insightlearn-complete-20251102.tar.gz
cd insightlearn-wasm/Metodo B: Network Transfer
# Sul sistema sorgente
scp insightlearn-complete-20251102.tar.gz user@new-server:~/
# Sul nuovo sistema
cd ~
tar xzf insightlearn-complete-20251102.tar.gz
cd insightlearn-wasm/Metodo C: Cloud Storage
# Upload su cloud
# (Google Drive, Dropbox, S3, etc.)
# Download su nuovo sistema
wget https://drive.google.com/...
tar xzf insightlearn-complete-20251102.tar.gzcd insightlearn-wasm/
# 1. Deploy automatico (crea container vuoti)
./deploy-oneclick.sh
# Attendi che tutti i servizi siano healthy (5-10 minuti)
# L'applicazione funziona ma senza dati ancora
# 2. Ripristina i dati
cd backups/data_20251102_223000/
./restore-data.sh
# Output:
# ✅ SQL Server database restored (250MB)
# ✅ MongoDB database restored (1.2GB)
# ✅ Redis data restored (45MB)
# ✅ User files restored (3.5GB)
# ✅ Data restore complete!
# 3. Restart applicazione
cd ../..
docker-compose restart api web
# 4. Verifica
curl -k https://localhost/api/health# SQL Server - Conta utenti
docker exec insightlearn-sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "${DB_PASSWORD}" -C \
-Q "SELECT COUNT(*) AS TotalUsers FROM InsightLearnDb.dbo.Users"
# MongoDB - Conta video
docker exec insightlearn-mongodb mongosh \
-u admin -p "${MONGO_PASSWORD}" \
--eval "use insightlearn; db.videos.countDocuments()"
# MongoDB - Conta messaggi chatbot
docker exec insightlearn-mongodb mongosh \
-u admin -p "${MONGO_PASSWORD}" \
--eval "use insightlearn; db.chatbot_messages.countDocuments()"
# Verifica login
curl -k -X POST https://localhost/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@insightlearn.cloud","password":"PASSWORD"}'Cosa fa:
- Esporta database SQL Server completo (
.bakfile) - Esporta tutte le collections MongoDB
- Esporta snapshot Redis
- Esporta file caricati dagli utenti
- Crea script
restore-data.shautomatico - Genera report backup con dimensioni
Output:
backups/data_20251102_223000/
├── InsightLearnDb.bak # Database SQL Server completo
├── mongodb_dump/ # MongoDB dump
│ └── insightlearn/
│ ├── videos.bson
│ ├── chatbot_messages.bson
│ └── ...
├── redis_dump.rdb # Redis snapshot
├── api-files.tar.gz # File caricati utenti
├── restore-data.sh # Script ripristino automatico
├── backup-info.txt # Informazioni backup
└── sql_tables_list.txt # Lista tabelle SQL
Cosa fa:
- Ripristina database SQL Server da
.bak - Ripristina MongoDB con
mongorestore - Ripristina Redis da snapshot
- Ripristina file caricati dagli utenti
- Verifica integrità dati
Uso:
cd backups/data_YYYYMMDD_HHMMSS/
./restore-data.shDopo il ripristino, verifica che sia una copia esatta:
- Utenti: Stesso numero di utenti registrati
- Corsi: Stessi corsi disponibili
- Video: Stessi video caricati
- Messaggi Chatbot: Storico conversazioni preservato
- File Upload: Tutti i file caricati presenti
- Sessioni Utente: Login funzionante
- Dashboard: Stesse metriche visualizzate
- Grafana: Stesso storico metrics (se ripristinato)
- Admin: Login admin funzionante con stessi permessi
# 1. Conta tabelle SQL Server
docker exec insightlearn-sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "${DB_PASSWORD}" -C \
-Q "SELECT COUNT(*) FROM InsightLearnDb.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'"
# 2. Lista collections MongoDB
docker exec insightlearn-mongodb mongosh \
-u admin -p "${MONGO_PASSWORD}" \
--eval "use insightlearn; db.getCollectionNames()"
# 3. Verifica ultimo utente registrato
docker exec insightlearn-sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "${DB_PASSWORD}" -C \
-Q "SELECT TOP 5 Email, CreatedAt FROM InsightLearnDb.dbo.Users ORDER BY CreatedAt DESC"
# 4. Verifica ultimo messaggio chatbot
docker exec insightlearn-mongodb mongosh \
-u admin -p "${MONGO_PASSWORD}" \
--eval "use insightlearn; db.chatbot_messages.find().sort({createdAt:-1}).limit(5)"# Aggiungi al crontab
crontab -e
# Backup ogni notte alle 2:00 AM
0 2 * * * cd /home/mpasqui/insightlearn-wasm && ./backup-data.sh >> /var/log/insightlearn-backup.log 2>&1
# Pulizia backup vecchi (mantieni ultimi 7 giorni)
0 3 * * * find /home/mpasqui/insightlearn-wasm/backups -type d -name "data_*" -mtime +7 -exec rm -rf {} \;Database SQL Server: 100MB - 10GB (dipende da numero utenti/corsi) MongoDB: 500MB - 50GB (dipende da video/chatbot) Redis: 10MB - 1GB (cache temporanea) API Files: 1GB - 100GB (file caricati utenti)
Totale stimato: 2GB - 160GB
# Cripta backup
tar czf - backups/data_20251102_223000/ | gpg --symmetric --cipher-algo AES256 > backup-encrypted.tar.gz.gpg
# Decripta backup
gpg --decrypt backup-encrypted.tar.gz.gpg | tar xz- Non committare su Git (
.gitignoregià configurato) - Cripta prima di caricare su cloud
- Usa storage con encryption at rest
- Backup off-site (diversa location fisica)
- Test restore periodici
# Sul nuovo sistema (Debian)
1. Installa Docker e Docker Compose
2. Estrai archivio completo
3. cd insightlearn-wasm/
4. ./deploy-oneclick.sh
5. cd backups/data_*/
6. ./restore-data.sh
7. docker-compose restart api web# Upload backup su S3/Cloud Storage
aws s3 cp insightlearn-complete-20251102.tar.gz s3://my-bucket/
# Su cloud server
aws s3 cp s3://my-bucket/insightlearn-complete-20251102.tar.gz ~/
tar xzf insightlearn-complete-20251102.tar.gz
cd insightlearn-wasm/
./deploy-oneclick.sh
# ... ripristina dati# Verifica spazio disco
df -h
# Verifica container running
docker ps | grep insightlearn
# Verifica password in .env
cat .env | grep PASSWORD# SQL Server restore error
docker logs insightlearn-sqlserver --tail=100
# MongoDB restore error
docker exec insightlearn-mongodb mongosh --eval "db.serverStatus()"
# Ripeti restore
cd backups/data_*/
./restore-data.sh# Verifica integrità backup
cd backups/data_*/
ls -lh
cat backup-info.txt
# Verifica database dopo restore
docker exec insightlearn-sqlserver sqlcmd -S localhost -U sa -P PASSWORD -C -Q "SELECT name FROM sys.databases"- backup-data.sh - Script backup dati
- DEPLOYMENT-COMPLETE-GUIDE.md - Deployment completo
- deploy-oneclick.sh - Deploy automatico
- DOCKER-COMPOSE-GUIDE.md - Guida Docker Compose
Con questa procedura hai una fotografia speculare COMPLETA del sito con TUTTI i dati! 📸✅