Articles - Logiciel & scripts

Sauvegarde site perso OVH (v4)

  |   2192  |   Poster commentaire  |  Logiciel & scripts
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 :

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.