Le istantanee della macchina sono il backup "grosso": tutto il disco, per quando qualcosa si rompe. Ma a volte vuoi qualcosa di più fine e più economico: una copia giornaliera di una cartella (i file caricati sul sito, i documenti, un dump del database) in un posto fuori dalla macchina, da cui poter recuperare un singolo file senza ripristinare nulla. Quello è S3, e lo strumento a riga di comando di AWS ha un comando, aws s3 sync, che copia solo ciò che è cambiato. Programmato ogni notte, è il backup di file più economico e affidabile che puoi avere.
Prima di iniziare: cosa significa ogni cosa
- S3 e bucket
- S3 è l'archivio di file di Amazon; un bucket è la "cartella radice" in cui li conservi, con un nome unico al mondo.
- AWS CLI
- Lo strumento a riga di comando di AWS: un programma che si installa sulla macchina e permette di dare ordini ad AWS scrivendo comandi.
- sync (sincronizzare)
- Confrontare una cartella con il bucket e copiare solo ciò che è nuovo o cambiato. La prima volta copia tutto; le successive, poco.
- Chiave di accesso
- Il nome utente e la password per i programmi. Qui la userà la macchina per parlare con S3; deve avere permesso solo su quel bucket.
- Cron
- Il pianificatore di attività di Linux: esegue un comando all'ora che gli indichi, ogni giorno.
- Controllo delle versioni
- Opzione di S3 che conserva le versioni precedenti di un file. Protegge dal rischio che un backup notturno sovrascriva qualcosa di buono con qualcosa di rotto.
Passo dopo passo
Crea il bucket
Console di S3, Crea bucket, nome unico (
copias-miempresa-web), stessa regione della macchina (così il trasferimento tra i due non consuma quota né viene addebitato), blocca tutti gli accessi pubblici attivo, controllo delle versioni attivo e crittografia predefinita. Crea.Crea una chiave che possa scrivere solo in quel bucket
In IAM, crea una policy con questo contenuto (cambia il nome del bucket) e un utente
copias-webcon quella policy e una chiave di accesso, come spiega la guida sull'utente IAM con permessi minimi:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::copias-miempresa-web" }, { "Effect": "Allow", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::copias-miempresa-web/*" } ] }Se un giorno quella chiave dovesse trapelare, l'unica cosa che qualcuno potrebbe fare è toccare quel bucket. Nient'altro.
Installa lo strumento di AWS sulla macchina
Via SSH, su Ubuntu o Debian:
sudo apt update && sudo apt install -y awscli(Su Amazon Linux è già installato.) Configuralo con la chiave del passo precedente:
aws configureTi chiede l'identificativo della chiave, il segreto, la regione (
eu-west-1, per esempio) e il formato di output (lasciajson). Restano salvati nella cartella dell'utente, leggibili solo da lui.Prova il comando a mano
aws s3 sync /var/www/html/uploads s3://copias-miempresa-web/uploads --deleteLa prima volta ci mette un po', perché carica tutto; vedrai passare ogni file. Le volte successive carica solo ciò che è cambiato. L'opzione
--deletecancella nel bucket quello che non c'è più nella cartella, perché la copia sia uno specchio; con il controllo delle versioni attivo, ciò che è stato cancellato resta recuperabile. Verifica nella console di S3 che i file siano lì.Aggiungi il database, se ce l'hai
Perché il backup contenga anche il database, prima esportalo in un file nella stessa cartella che viene sincronizzata, per esempio con un piccolo script
/usr/local/bin/copia.sh:#!/bin/bash mysqldump -u usuario -pCONTRASEÑA nombre_bd | gzip > /var/copias/bd-$(date +%F).sql.gz find /var/copias -name "bd-*.sql.gz" -mtime +7 -delete aws s3 sync /var/copias s3://copias-miempresa-web/bd aws s3 sync /var/www/html/uploads s3://copias-miempresa-web/uploads --deleteDagli i permessi di esecuzione (
chmod 700) e provalo consudo /usr/local/bin/copia.sh. La riga difindcancella sulla macchina i dump più vecchi di una settimana; su S3 restano.Programmalo ogni notte
sudo crontab -eAggiungi in fondo una riga per le 3:30 di notte (ora della macchina, che di solito è UTC):
30 3 * * * /usr/local/bin/copia.sh >> /var/log/copia.log 2>&1Salva. Il giorno dopo guarda
/var/log/copia.loge la data dei file su S3. Metti inoltre una regola di ciclo di vita sul bucket che cancelli le versioni vecchie passati 30 o 90 giorni, perché non cresca all'infinito (guida in questa sezione).
Cosa può andare storto
"Access Denied" durante la sincronizzazione
La policy non copre quello che chiedi: verifica che il nome del bucket sia esatto nelle due righe Resource, e che la prima (ListBucket) non abbia /* e la seconda sì.
Il backup ci mette ore
Prima esecuzione con molti file piccoli: normale. Se ci mette tanto ogni notte, ci sono file che cambiano sempre (cache, log): escludili con --exclude "cache/*".
La password del database è nello script
Meglio metterla nel file ~/.my.cnf dell'utente root con permessi 600, e togliere -pCONTRASEÑA dal comando. E fai in modo che lo script possa leggerlo solo root.
Ho cancellato un file per sbaglio e il backup notturno lo ha cancellato anche lui
Il controllo delle versioni serve a questo: nella console di S3, attiva "Mostra versioni" nella cartella e recupera la versione precedente. Senza controllo delle versioni sarebbe andato perso: per questo si attiva al passo 1.
In Simplio
In Simplio avvii il backup notturno su S3 dal catalogo degli script: scegli la cartella della macchina e il bucket, e Simplio crea la chiave con permessi solo per quel bucket, installa il necessario e programma l'attività, senza aprire un terminale. Il bucket si vede in Simplio come una cartella, con le sue versioni, per recuperare un file con due clic. E se una notte il backup non compare, ti avvisa via email.
La stessa cosa, in AWS e in Simplio
| Nella console di AWS | In Simplio | |
|---|---|---|
| Impostare il backup notturno | Bucket, policy IAM, chiave, installare la CLI, script, cron: 6 passi e un terminale, 25 minuti | Script "Backup su S3" del catalogo: scegli la cartella e il bucket, Simplio crea la chiave limitata e programma l'attività |
| Sapere se stanotte è stato fatto | Guardare il log sulla macchina | Avviso via email se un backup programmato non compare |
| Recuperare un file | Console di S3, cercare, versioni | Aprire il bucket in Simplio come una cartella e scaricare |