Bannière - Salle serveur au CERN

Le module d’administration cPanel est installé sur de nombreux serveurs – c’est le cas chez Mavenhosting, et permet de créer une sauvegarde intégrale de votre compte FTP, vos bases MySQL et vos comptes mails associés à votre nom de domaine. Pour gagner en efficacité, nous allons créer une tâche planifiée dite CRON pour générer une sauvegarde à intervalle régulier. Il ne vous restera plus qu’à rapatrier l’archive compressée sur votre machine personnelle.

N.B : ce tutoriel est réservé à des utilisateurs expérimentés disposant des droits d’accès à la configuration du serveur (mutualisé ou non). La technique décrite ci-dessous est une reprise de cet excellent article Blog Avis-PlanetHoster en y ajoutant quelques mesures de sécurité proposées par Julio Potier ainsi qu’une documentation dans le code plus détaillée.

Étape n°1 – Création du script de sauvegarde PHP

A l’aide de votre éditeur de texte favori, créez un nouveau fichier de type PHP puis copiez / collez les lignes de code suivantes :

<?php

// ***************** CONFIGURATION *****************

// Information du cPanel
 $cputilisateur = "identifiant"; // Nom d'utilisateur du cPanel
 $cpmotdepass = "motdepasse"; // Mot de passe du cPanel
 $domaine = "wpchannel.com"; // Le nom de domaine du site Web
 $skin = "x3"; // Le thème d'affichage utilisé par cPanel (obligatoire)

// Information sur la sauvegarde
 $ftpmode = "homedir"; // FTP mode ("homedir" pour une complète, "ftp" pour active, "passiveftp" pour passive)
// Scan antivirus (1 = Activé || 0 = Désactivé)
 $antivirus = 1;

// Durée de conservation de la sauvegarde sur le FTP
 $jours=30;

// Recevoir un mail de notification une fois la sauvegarde prête
 $emailnotification = "mail@mail.fr";

// Sécurisé ou non avec https
 $securise = 1; // Indiquez 1 pour SSL
// Vérification du bon fonctionnement du script
 $test = 1;

 // ***************** A NE PAS MODIFIER *****************

if ($securise) { // Si sécurisé
 $url = "ssl://".$domaine; // Domaine
 $port = 2083; // Port 2083
 } else { // Sinon
 $url = $domaine;; // Domaine
 $port = 2082; // Port 2082
 }
$fsocket = fsockopen($url,$port); // Ouverture via fsockopen
 if (!$fsocket) // Si on arrive pas a lire
 {
 echo "Impossible d'ouvrir le socket ... \n"; // Affiche une erreur
 exit; // On stop
 }

// Encode le mot de passe et utilisateur
 $authstr = $cputilisateur.":".$cpmotdepass;
 $pass = base64_encode($authstr);

// Le paramètre transmis en GET
 $params = "dest=$ftpmode&email=$emailnotification&server=&user=&pass=&port=&rdir=&submit=Generate Backup";

// Envoie un "POST" au cPanel
 fputs($fsocket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n");
 fputs($fsocket,"Host: $domaine\r\n");
 fputs($fsocket,"Authorization: Basic $pass\r\n");
 fputs($fsocket,"Connection: Close\r\n");
 fputs($fsocket,"\r\n");

// Reçoit la réponce
 while (!feof($fsocket)) {
 $response = fgets($fsocket,4096); // Reçoit ligne par ligne
 if ($test) // Si on est en mode debug
 echo $response; // On affiche
 }
 fclose($fsocket);
//Antivirus CLAMAV !?
 if($antivirus==1)
 {
 $fsocket = fsockopen($url,$port);
 if (!$fsocket) { echo "Impossible d'ouvrir le socket ... \n"; exit; }

 // Encode le mot de passe et utilisateur (Anti-Virus)
 $authstr = $cputilisateur.":".$cpmotdepass;
 $pass = base64_encode($authstr);

 // Envoie un "POST" au cPanel
 fputs($fsocket,"GET /frontend/".$skin."/clamavconnector/scanner.html?scanpath=home HTTP/1.0\r\n");
 fputs($fsocket,"Host: $domaine\r\n");
 fputs($fsocket,"Authorization: Basic $pass\r\n");
 fputs($fsocket,"Connection: Close\r\n");
 fputs($fsocket,"\r\n");

 // Reçoit la réponse
 while (!feof($fsocket)) {
 $response = fgets($fsocket,4096);
 if ($test) echo $response;
 }
 fclose($fsocket);
 }

// Supprime les vielles sauvegardes (X jours)
 foreach (glob("*.tar.gz") as $filename) { // Pour tout les *.tar.gz qui se trouve dans le /
 if ((time() - filemtime($filename) >= $jours*86400)) //86400sec = 1 jour
 unlink("$filename"); // Suppression
 }
 ?>

Les seules lignes que vous devez impérativement modifiées sont les 3 premières. Vous devez spécifier le couple identifiant / mot de passe pour accéder à votre cPanel. Ces informations vous ont été communiquées par votre hébergeur. La 3e ligne concernera votre nom de domaine.

Une fois le fichier correctement édité, envoyez-le à sur votre serveur Web – de préférence dans le dossier parent de la racine Web. Prenez soin de le placer dans un dossier en le suffixant de plusieurs chiffres. Faites de même pour le fichier proprement dit de façon à sécuriser son accès, par exemple :

/home/IDENTIFIANT/cron_backup_20133102/sauvegarde_4321.php

Étape n°2 – Création de la tâche CRON (Command Run On)

Rendez-vous à présent sur votre panneau d’administration cPanel. Le lien est généralement accessible via le port 2082 de l’URL de votre domaine. Renseignez-vous auprès de votre hébergeur pour obtenir davantage d’informations.

Dans Avancé, cliquez sur Tâches Cron.

Capture d'écran - cPanel, création d'une tâche CRON
cPanel, module de création d’une tâche CRON

L’écran suivant vous propose de paramétrer la fréquence à laquelle s’exécutera votre tâche – autrement dit, le script PHP. Pour tester le bon fonctionnement du script, je vous conseille d’indiquer une fois par minute pour effectuer une première sauvegarde. Vous basculerez ensuite sur une fréquence quotidienne ou hebdomadaire.

Spécifiez une adresse si vous souhaitez recevoir une notification dès lors que la tâche est lancée.

Enfin, dans le champ Commande, collez la ligne de code ci-dessous :

php -q /home/IDENTIFIANT/cron_backup.php

cpanel-backup-2

Le chemin du fichier peut être obtenu par le menu contextuel des clients FTP en général ou via les barres d’adresses. Il vous faudra notamment modifier le nom d’utilisateur dans l’adresse, ainsi que le nom du fichier par celui de votre création.

Pour valider, faites Ajouter une nouvelle tâche Cron puis attendez la confirmation visuelle du succès.

Il ne vous reste plus qu’à patienter quelques minutes, le temps que la tâche planifiée s’active et que votre sauvegarde soit créé de façon automatique. N’oubliez pas de modifier la fréquence de création par la suite, si l’opération est un succès.

Obtenir le script PHP

Pour gagner du temps, je vous propose de télécharger le script complet de sauvegarde :

WordPress Backup cPanel CRON

Script PHP pour sauvegarder intégralement via cPanel votre site. Certifié sans faille de sécurité connue par BoiteAWeb.

Taille : 1,9 KiB  •  Date : 17 décembre 2012 •  Hits : 414

Bien entendu, suivez le tutoriel pour remplir les informations adéquates.

La méthode de sauvegarde hebdomadaire décrite dans cet article n’est pas très compliquée à mettre en œuvre et vous permettra de gagner en productivité. Reste à trouver un moyen d’automatiser le rapatriement des sauvegardes sur un serveur de type NAS par exemple… si vous avez des idées je suis preneur !

torkildr

13 commentaires

  1. Solution intéressante mais il existe une solution encore plus simple avec le plugin WP XCloner (http://www.xcloner.com/).

    Avec ce plugin toutes les sauvegardes sont possibles (même via CRON) et il est très facilement configurable. Il est possible d’effectuer automatiquement un transfert FTP de la sauvegarde réalisé (sauvegarde vers Amazon S3 possible). Un must !

  2. Avant de faire une sauvegarde de ma base, j’exécute des requêtes SQL qui font le ménage (par exemple une requête SQL qui supprime les révisions d’articles) et juste avant la sauvegarde j’optimise toutes les tables, y aurait-il un moyen de programmer tout ça ?

  3. Intéressant, il faut absolument que je mette en place çà.
    Dis moi est-ce que je pourrai mériter un article avec mon site car je pense qu’on n’est pas nombreux en France à avoir développer ce genre de dite, merci.

  4. Bonjour,

    J’ai testé votre script mais malheureusement il ne fonctionne pas.
    Je suis chez planethoster,les paramètres ont bien été modifiés…

    voilà le retour :

    HTTP/1.1 401 Access Denied Set-Cookie: cprelogin=no; HttpOnly; path=/; port=2083; secure Set-Cookie: cpsession=%3as26nm9XYxznav4QrWhdruhfQ4Z37EGeVi3KowALFh613CkgTeHGuGAuGVYMXDB0n; HttpOnly; path=/; port=2083; secure Server: cpsrvd/11.36.0.20 Content-type: text/html; charset= »utf-8″ Connection: close Date: Mon, 08 Apr 2013 20:55:44 GMT Content-Length: 24154
    The login is invalid.