Les instantanés de la machine sont la « grosse » sauvegarde : tout le disque, pour quand quelque chose casse. Mais parfois vous voulez quelque chose de plus fin et de moins cher : une copie quotidienne d'un dossier (les fichiers envoyés sur le site, les documents, un export de la base de données) dans un endroit hors de la machine, d'où vous pouvez récupérer un seul fichier sans rien restaurer. C'est S3, et l'outil en ligne de commande d'AWS fournit une commande, aws s3 sync, qui ne copie que ce qui a changé. Programmée chaque nuit, c'est la sauvegarde de fichiers la moins chère et la plus fiable que vous puissiez avoir.
Avant de commencer : ce que signifie chaque chose
- S3 et bucket
- S3 est l'entrepôt de fichiers d'Amazon ; un bucket est le « dossier racine » où vous les stockez, avec un nom unique dans le monde.
- AWS CLI
- L'outil en ligne de commande d'AWS : un programme qui s'installe sur la machine et permet de donner des ordres à AWS en tapant des commandes.
- sync (synchroniser)
- Comparer un dossier avec le bucket et ne copier que ce qui est nouveau ou modifié. La première fois, tout est copié ; les suivantes, peu de choses.
- Clé d'accès
- L'identifiant et le mot de passe pour les programmes. Ici, la machine l'utilisera pour parler à S3 ; elle ne doit avoir de permission que sur ce bucket.
- Cron
- Le planificateur de tâches de Linux : il exécute une commande à l'heure que vous lui indiquez, chaque jour.
- Gestion des versions
- Option de S3 qui conserve les versions précédentes d'un fichier. Elle protège contre une sauvegarde nocturne qui écraserait quelque chose de bon par quelque chose de cassé.
Pas à pas
Créez le bucket
Console S3, Créer un compartiment, nom unique (
copias-miempresa-web), même région que la machine (ainsi le transfert entre les deux ne consomme pas de quota et n'est pas facturé), bloquer tous les accès publics activé, gestion des versions activée et chiffrement par défaut. Créez.Créez une clé qui ne peut écrire que dans ce bucket
Dans IAM, créez une politique avec ce contenu (changez le nom du bucket) et un utilisateur
copias-webavec cette politique et une clé d'accès, comme l'explique le guide sur l'utilisateur IAM avec des permissions minimales :{ "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/*" } ] }Si cette clé fuyait un jour, la seule chose que quelqu'un pourrait faire serait de toucher à ce bucket. Rien d'autre.
Installez l'outil d'AWS sur la machine
En SSH, sur Ubuntu ou Debian :
sudo apt update && sudo apt install -y awscli(Sur Amazon Linux, il est déjà installé.) Configurez-le avec la clé de l'étape précédente :
aws configureIl vous demande l'identifiant de la clé, le secret, la région (
eu-west-1, par exemple) et le format de sortie (laissezjson). Ils sont enregistrés dans le dossier de l'utilisateur, lisibles par lui seul.Testez la commande à la main
aws s3 sync /var/www/html/uploads s3://copias-miempresa-web/uploads --deleteLa première fois, c'est long, parce que tout est envoyé ; vous verrez chaque fichier défiler. Les fois suivantes, seul ce qui a changé est envoyé. L'option
--deletesupprime dans le bucket ce qui n'est plus dans le dossier, pour que la copie soit un miroir ; avec la gestion des versions activée, ce qui est supprimé reste récupérable. Vérifiez dans la console S3 que les fichiers sont bien là.Ajoutez la base de données si vous en avez une
Pour que la sauvegarde contienne aussi la base de données, exportez-la d'abord dans un fichier du même dossier que celui qui est synchronisé, par exemple avec un petit 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 --deleteDonnez-lui les droits d'exécution (
chmod 700) et testez-le avecsudo /usr/local/bin/copia.sh. La lignefindsupprime sur la machine les exports de plus d'une semaine ; dans S3, ils restent.Programmez-le chaque nuit
sudo crontab -eAjoutez à la fin une ligne pour 3 h 30 du matin (heure de la machine, qui est en général UTC) :
30 3 * * * /usr/local/bin/copia.sh >> /var/log/copia.log 2>&1Enregistrez. Le lendemain, regardez
/var/log/copia.loget la date des fichiers dans S3. Mettez en plus une règle de cycle de vie sur le bucket qui supprime les anciennes versions après 30 ou 90 jours, pour qu'il ne grossisse pas sans fin (guide dans cette rubrique).
Ce qui peut mal tourner
« Access Denied » lors de la synchronisation
La politique ne couvre pas ce que vous demandez : vérifiez que le nom du bucket est exact sur les deux lignes Resource, et que la première (ListBucket) ne porte pas /* alors que la seconde oui.
La sauvegarde prend des heures
Première exécution avec beaucoup de petits fichiers : normal. Si chaque nuit c'est long, il y a des fichiers qui changent tout le temps (caches, journaux) : excluez-les avec --exclude "cache/*".
Le mot de passe de la base de données est dans le script
Mettez-le plutôt dans le fichier ~/.my.cnf de l'utilisateur root avec les droits 600, et retirez -pCONTRASEÑA de la commande. Et faites en sorte que seul root puisse lire le script.
J'ai supprimé un fichier par erreur et la sauvegarde nocturne l'a supprimé aussi
C'est à ça que sert la gestion des versions : dans la console S3, activez « Afficher les versions » dans le dossier et récupérez la version précédente. Sans gestion des versions, il aurait été perdu : c'est pour cela qu'on l'active à l'étape 1.
Dans Simplio
Dans Simplio, vous lancez la sauvegarde nocturne vers S3 depuis le catalogue de scripts : vous choisissez le dossier de la machine et le bucket, et Simplio crée la clé avec des permissions limitées à ce bucket, installe le nécessaire et programme la tâche, sans ouvrir de terminal. Le bucket se voit dans Simplio comme un dossier, avec ses versions, pour récupérer un fichier en deux clics. Et si une nuit la sauvegarde n'apparaît pas, vous êtes prévenu par e-mail.
La même chose, dans AWS et dans Simplio
| Dans la console AWS | Dans Simplio | |
|---|---|---|
| Mettre en place la sauvegarde nocturne | Bucket, politique IAM, clé, installer la CLI, script, cron : 6 étapes et un terminal, 25 minutes | Script « Sauvegarde vers S3 » du catalogue : vous choisissez le dossier et le bucket, Simplio crée la clé limitée et programme la tâche |
| Savoir si elle a eu lieu cette nuit | Regarder le journal sur la machine | Alerte par e-mail si une sauvegarde programmée n'apparaît pas |
| Récupérer un fichier | Console S3, chercher, versions | Ouvrir le bucket dans Simplio comme un dossier et télécharger |