Sauvegarde site perso OVH (v4)
Suite à mon changement d'hébergeur (Free pages perso --> OVH), j'ai dû revoir mes scripts de sauvegarde. Voici ma petite solution perso. Il s'agit du script de la v3 (pour Free) mais adapté pour OVH. Il y a un script supplémentaire pour l'extraction. Bien sûr OVH prévoit déjà un système de sauvegarde interne pour vous même dans le cas d'un hébergement mutualisé dans sa formule la plus basique. Il suffit pour cela d'aller dans votre interface OVH Manager v3 :
Tout est vachement simplifié donc puisque Free eux n'en proposait pas de sauvegarde. Toutefois une sauvegarde comme celle-ci (externalisée chez moi) me permettra de récupérer mon site en local pour divers tests et évolutions sur mon WAMP.
Ces scripts sont disponibles ici : dossiers des scripts v4
<span class="notice">A noter que vous devez renommer le backup_bdd.txt en .php bien sûr.</span>
Oui, fichiers + base de données (comme la v2 et v3).
<span class="notice">Notez que le script récupère tous les fichiers, même ceux qui n'ont pas été modifiés depuis la sauvegarde précédente, ce qui évidemment n'est pas du tout efficient. Un autre script à base de "rsync" pour faire une sauvegarde "différentielle" est en cours.</span>
Il y a en deux :
Mon script utilise la méthode "En utilisant un script" décrite dans cette aide d'OVH. Le but étant d'appeler une page PHP qui générera le dump sur le serveur, ensuite on peut récupérer le fichier dump produit par ce script via une connexion FTP. C'est un peu la même chose que l'ancienne URL http://sql.free.fr/backup.php sauf que ici on n'a pas le dump directement en retour. Il est produit sur le serveur, et après il faut aller le chercher dans un second temps.
La mécanique est la suivante : le script backup_ovh.sh se lance (sur mon petit serveur linux NAS chez moi) et crée l’arborescence pour accueillir la sauvegarde dans le dossier /nas/sauvegarde/site/. Par la suite il enchaîne 6 phases :
Avec un procédé de la sorte, il y a une faille potentielle : si un pirate connait l'URL du script backup_bdd.php déposé sur le serveur : il peut être sujet à des attaques afin de générer des dumps, c'est pour cela qu'il convient :
Ma version du script reconnait 3 paramètres passés par la méthode POST en HTTP dont une variable inconnue d'avance :
Au final :
Exemple de log :
La 1.05 ajoute l'envoi d'un courriel à la fin, avec le log, qui est expédié à une adresse définie dans les paramètres du script. Mutt est chez moi configuré par un fichier muttrc.
https://www.ovh.com/fr/hebergement-web/restauration_fichier.xml
https://www.ovh.com/fr/g1394.exportation-bases-de-donnees
Tout est vachement simplifié donc puisque Free eux n'en proposait pas de sauvegarde. Toutefois une sauvegarde comme celle-ci (externalisée chez moi) me permettra de récupérer mon site en local pour divers tests et évolutions sur mon WAMP.
Où trouver tes scripts ?
Ces scripts sont disponibles ici : dossiers des scripts v4
<span class="notice">A noter que vous devez renommer le backup_bdd.txt en .php bien sûr.</span>
Tout est sauvegardé ?
Oui, fichiers + base de données (comme la v2 et v3).
<span class="notice">Notez que le script récupère tous les fichiers, même ceux qui n'ont pas été modifiés depuis la sauvegarde précédente, ce qui évidemment n'est pas du tout efficient. Un autre script à base de "rsync" pour faire une sauvegarde "différentielle" est en cours.</span>
Comment ça marche ?
Il y a en deux :
- Chez vous : backup_ovh.sh : script BASH (shell) principal de récupération et compression du site (sur votre serveur/PC linux).
- Sur le serveur OVH : backup_bdd.php : script PHP de génération du dump MySQL sur votre serveur OVH.
Mon script utilise la méthode "En utilisant un script" décrite dans cette aide d'OVH. Le but étant d'appeler une page PHP qui générera le dump sur le serveur, ensuite on peut récupérer le fichier dump produit par ce script via une connexion FTP. C'est un peu la même chose que l'ancienne URL http://sql.free.fr/backup.php sauf que ici on n'a pas le dump directement en retour. Il est produit sur le serveur, et après il faut aller le chercher dans un second temps.
La mécanique est la suivante : le script backup_ovh.sh se lance (sur mon petit serveur linux NAS chez moi) et crée l’arborescence pour accueillir la sauvegarde dans le dossier /nas/sauvegarde/site/. Par la suite il enchaîne 6 phases :
- PHASE 1 : Il génére un UUID. Cet UUID servira pour le nom du fichier dump MySQL sur le serveur.
- PHASE 2 : Appel du script backup_bdd.php sur le site web via sur URL en http (avec wget). Cela aura pour effet de constituer un fichier dump sur le serveur OVH (comme vu ci-dessus).
- PHASE 3 : Récupération du fichier dump MySQL via FTP.
- PHASE 4 : Suppression du fichier dump sur le serveur (avec ftp). On supprime le fichier dump généré après son transfert afin de ne pas le laisser trainer sur le serveur, faille de sécurité potentielle ! De plus cela fait le ménage. On évite de stocker des tonnes de dumps.
- PHASE 5 : Récupération de tout le site FTP (avec un wget récursif)
- PHASE 6 : Compression de tout le site web récupéré dans un tar.gz
Sécurités du backup_bdd.php
Avec un procédé de la sorte, il y a une faille potentielle : si un pirate connait l'URL du script backup_bdd.php déposé sur le serveur : il peut être sujet à des attaques afin de générer des dumps, c'est pour cela qu'il convient :
- de le placer dans un dossier au nom peu évocateur dont vous seul connaissez le nom.
- de placer un fichier index.php vide dans ce répertoire afin d'éviter le listing des fichiers.
- éventuellement de renommer le script backup_bdd.php en autre chose.
Ma version du script reconnait 3 paramètres passés par la méthode POST en HTTP dont une variable inconnue d'avance :
- Un couple clé/valeur en variable
Code PHP :$this_var="XXXXX";#Nom de la variable à tester $this_passwd="YYYYY";#Mot de passe de la page (pour lancer l'export)
Vous devez vous-même placer dans le fichier php quelle variable sera à tester (XXXXX) avec la valeur de cette variable (YYYYY). Vous seul saurait ainsi que votre script attend cette combinaison.
En méthode GET ça donnerai cela si vous voulez :
http://mondomaine.fr/mon_dossier_des_scripts/backup_bdd.php?XXXXX=YYYYY
Code PHP :# Test des paramètres if (isset($_POST["$this_var"])) { #Variable OK, test si corrélation if (($_POST["$this_var"]==$this_passwd)) { if ($sql_nom_fic_export=="") { echo "Erreur : Nom de fichier vide !"; } else { # Contrôle OK $exporter=true; } } else { echo "Erreur : Identification erronée !"; } } else { echo "Erreur : Identification erronée !"; }
- Un nom de fichier
Le script prend aussi un nom de fichier pour le dump en paramètre, ce nom de fichier est transmis toujours en méthode POST sous la variable fic. Elle sert à donner un nom au dump sur le serveur. Ce nom de dump est donné par le script bash backup_ovh.sh, il s'agit de l'UUID aléatoire généré par le script bash. Ceci afin d'augmenter la sécurité. Un nom de fichier toujours identique pourrait être une faille !
Au final :
http://mondomaine.fr/mon_dossier_de_scripts/backup_bdd.php?XXXXX=YYYYY&fic=nom_de_fichier
Personnaliser les scripts
backup_bdd.php | ||
---|---|---|
Variable |
Spécimen |
Donnée |
$sql_server | AAAAA |
Serveur SQL chez OVH (donné par mail par OVH) |
$sql_database | BBBBB |
Nom de la base de données SQL chez OVH (donné par mail par OVH) |
$sql_user | CCCCC |
Nom d'utilisateur base SQL chez OVH (donné par mail par OVH) |
$sql_passwd | DDDDD |
Mot de passe SQL chez OVH (donné par mail par OVH) |
$this_var | XXXXX |
Chaîne de caractères (qui sera un nom de variable - clé - à tester) |
$this_passwd | YYYYY |
Chaîne de caractères (qui sera un nom de variable - valeur - à tester) |
backup_ovh.sh | |
---|---|
Variable |
Donnée |
BACKUP_DIR | Répertoire final (local) où seront stockées les différentes sauvegardes horodatées. |
OVH_DB_GENERATION_URL | Chemin complet (URL) vers le script backup_bdd.php sur le serveur OVH |
ZZZZ | Répertoire sur le serveur qui contient votre script backup_bdd.php |
OVH_DB_DUMP_DIR | Répertoire sur le serveur pour aller récupérer le dump via FTP |
OVH_DB_GENERATION_IDENT | Clé pour le script, doit être égal à $this_var = XXXXX dans le script backup_bdd.php |
OVH_DB_GENERATION_PASSWD | Valeur pour le script, doit être égal à $this_passwd = YYYYY dans le script backup_bdd.php |
OVH_FTP_SERVER | Nom du serveur FTP d'OVH (information donnée par mail par OVH) |
OVH_FTP_LOGIN | Nom d'utilisateur pour accès FTP d'OVH (information donnée par mail par OVH) |
OVH_FTP_PASSWD | Mot de passe FTP d'OVH (information donnée par mail par OVH) |
Exemple de log :
Versions
La 1.05 ajoute l'envoi d'un courriel à la fin, avec le log, qui est expédié à une adresse définie dans les paramètres du script. Mutt est chez moi configuré par un fichier muttrc.