Brigole forum

Forum consacré au bricolage en général et à la détente !
 
AccueilFAQRechercherS'enregistrerConnexion
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Derniers sujets
» caméra déportée sur chien
par amosjerome Ven 17 Nov - 11:02

» arduino self balancing project
par amosjerome Dim 3 Sep - 22:52

» Table de tir 20 lignes
par bricoleur_1 Mar 22 Aoû - 19:37

» roue à aubes
par qtth Sam 20 Mai - 23:45

» Simulation acoustique
par Biduleohm Mar 24 Jan - 15:14

» DAC en réseau R-2R pour appli à faible résolution
par Biduleohm Mar 10 Jan - 23:38

» Corps de chauffe
par Antot Sam 31 Déc - 0:41

» Anémomètre[RESOLU]
par Biduleohm Jeu 22 Déc - 15:30

» Électrocardiogramme détection mouvement
par amosjerome Sam 3 Déc - 2:16

Partenaires
Mots-clés
hilarant couteau voiture mousse

Partagez | 
 

 Tuto : système de backup automatique pour site web

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Biduleohm
Modérateur
Modérateur
avatar

Masculin Nombre de messages : 8851
Age : 26
Localisation : 77 Seine-et-Marne
Emploi/loisirs : bricolage, informatique, électronique, THT, laser, aquariophilie
Humeur :  
Date d'inscription : 25/03/2009

MessageSujet: Tuto : système de backup automatique pour site web   Ven 29 Juin - 1:48

Bonjour, comme j'ai un peu galéré pour mettre en place une backup auto sur mon site j'ai décidé de faire ce petit tuto Wink

Pourquoi ? parce que backuper à la main un site complet en le copiant en ftp c'est très vite très peu pratique, surtout si on n'y pense quasiment jamais, qu'il y a des répertoires à exclure (gros fichiers par exemple), qu'il y a beaucoup de répertoires et de fichiers, etc.

Le but ici est de générer une archive zippée à intervales réguliers sans aucune intervention humaine. Il ne reste plus qu'à télécharger l'archive ensuite, ou alors, on peut même automatiser cette étape si la configuration du serveur le permet et qu'on a un autre serveur pour y envoyer les backups Smile

L'intérêt de l'archive est que ça ne fait qu'un seul fichier à télécharger, certes gros, mais un seul fichier. Au final comme il est compressé et comme il n'y a pas à attendre entre chaque initialisation du transfert de chaque fichier comme pour la copie fichier par fichier c'est bien plus rapide pour le télécharger.



Donc voyons comment générer un zip en php : il existe plusieurs librairies, la seule que j'ai trouvé qui soit relativement simple et légère est PclZip --> http://www.phpconcept.net/pclzip/ Smile

Pour l'utiliser c'est très simple : http://biduleohm.free.fr/images_forums/brigole/cron_backup/backup.php.html (à cause de la coloration syntaxique il ne faut ne pas enregistrer et renommer le fichier mais faire un ctrl+a suivi d'un ctrl+v dans un nouveau fichier php) je pense que c'est assez clair et correctement commenté Wink

Il faut bien-sûr modifier certaines variables pour l'adapter à votre config. Par ailleurs un petit problème s'est posé quand j'ai utilisé pour la première fois la lib : elle n'exclue pas automatiquement le répertoire où le zip est généré donc à chaque nouvelle backup elle prenait aussi les précédents zips... j'ai dû modifier légèrement la classe pclzip pour y ajouter une exclusion de répertoire mais de toute façon j'avais quelques autres répertoires à exclure à cause de leur contenu très lourd. La version modifiée se trouve ici (attention, le fichier est très lourd à cause de la coloration syntaxique, ne pas l'ouvrir avec un navigateur en carton) http://biduleohm.free.fr/images_forums/brigole/cron_backup/pclzip.lib.php.html la liste des répertoires à exclure se trouve à la ligne 195 du fichier.

Certains vont se demander c'est quoi le bloc de if douteux tout en bas... la fonction mail est assez capricieuse (en fait elle l'est extrêmement avec ses paramètres...) et quelques fois le mail n'est pas envoyé. Si c'est le cas on le détecte et on relance la fonction, là y'a 3 essais ce qui devrait amplement suffir (si après 3 tentatives elle échoue encore c'est pas la peine de s'acharner...) alors oui j'aurais pu faire une boucle mais c'est un peu overkill pour maximum 3 itérations et une seule 90% du temps...



Bon, on a de quoi zipper notre site, c'est cool mais il faut lancer le fichier à la main... comment faire pour automatiser tout ça ?

D'habitude on utilise un cron qui, grosso-modo, sert à exécuter un script périodiquement (par exemple tous les jours à 3H exécute-moi toto.php) oui mais étant sur un serveur free.fr je n'ai pas de cron disponible. La solution qui m'est venue à l'esprit est d'utiliser les visites des personnes pour déclencher le cron, le problème c'est que le temps de génération du zip est d'environ 20 à 30 secondes... donc j'ai cherché sur le net et j'ai trouvé un script juste génial --> http://a32.me/2012/01/do-php-cron-without-cron-available/ :D

Le problème c'est que ma config actuelle ne permettait pas de faire ça facilement et je n'avais pas envie de me lancer dans de grosses modifs de choses qui marchent déjà niquel, donc retour case départ. Bon le visiteur n'est pas content si la page se load pendant 20 sec mais les bots d'indexation, eux ils s'en foutent en principe. Quelques tests plus tard et effectivement ils s'en foutent (il se peut toutefois que du coup l'indexation de cette page soit mal prise en compte, je n'en sais rien mais perso je m'en fou un peu, c'est pas grave comparé au service que ça me rend) \0/

J'ai donc pondu ce script --> http://biduleohm.free.fr/images_forums/brigole/cron_backup/cron.php.html qui permet de lancer le cron à chaque visite de bot ou de soi-même (ce qui déchargera un peu les bots) le but est de regarder les dates des zips et de voir si le plus récent est assez vieux pour lancer une nouvelle backup Smile Si vous modifiez le path ou le nom de l'archive dans le backup.php pensez à faire correspondre le cron.php. Là encore rien de miraculeux. Le cron.php doit être inclus sur toutes les pages, ou au moins l'accueil, pour pouvoir être déclenché par les visites.

Le délai est fixé à 5 jours mais il est à noter que les backups seront éloignées d'un peu plus que ce temps là vu qu'il n'y a pas un bot toute les minutes qui passe sur les sites... on peut compenser en réduisant un peu le temps si on veut.



J'en profite pour détailler un peu le "lock.txt" dans le backup.php --> il sert à éviter de lancer plusieurs fois simultanément le script de backup, ce qui serait à tous les coups le cas avec les bots car en général ils arrivent et scannent tout un répertoire d'un coup. C'est exactement le même principe que les mutex quand on fait du multithreadé, ça évite d'accéder à la même ressource de deux endroits différents (ce qui amènerait à des résultats aléatoires, dans le meilleur des cas...) Wink Par ailleurs il faut créer ce fichier la première fois en écrivant unlocked dedans sans aucun saut de ligne.

Pour info j'ai testé ces scripts depuis une semaine en les améliorant un peu chaque jour et je pense qu'ils sont niquels (toutefois pas parfaits, notamment les paths en relatif qu'il faudrait passer en absolu, mais la flemme...). J'ai remarqué qu'il y avait en moyenne une visite de bot toutes les 3 heures ce qui permet une cadence assez soutenue au niveau du cron quand même. Il faut voir aussi qu'à la base les bots ne sont pas fait pour ça donc évitez de potentiellement détruire le référencement de votre site en mettant un délai trop court dans le cron, je pense que 2-3 jours est le minimum et une semaine me parait parfait Smile

Pensez à mettre un .htaccess qui interdit l'accès au répertoire du script et à celui des backups sinon vous risquez d'avoir quelques suprises si quelqu'un trouve le répertoire.

Si vous avez des questions, n'hésitez pas Wink

_________________
Mes créations  Mon site  Mon forum  Congratulations !!! You've just created a temporal loophole...


Dernière édition par Biduleohm le Ven 29 Juin - 14:24, édité 1 fois
Revenir en haut Aller en bas
http://biduleohm.free.fr/
san41
Jeune bricoleur
Jeune bricoleur
avatar

Masculin Nombre de messages : 186
Age : 22
Localisation : Centre
Emploi/loisirs : Etude
Humeur : Bien :)
Date d'inscription : 14/05/2012

MessageSujet: Re: Tuto : système de backup automatique pour site web   Ven 29 Juin - 2:09

Merci de ton partage Smile bien expliquer
Revenir en haut Aller en bas
Biduleohm
Modérateur
Modérateur
avatar

Masculin Nombre de messages : 8851
Age : 26
Localisation : 77 Seine-et-Marne
Emploi/loisirs : bricolage, informatique, électronique, THT, laser, aquariophilie
Humeur :  
Date d'inscription : 25/03/2009

MessageSujet: Re: Tuto : système de backup automatique pour site web   Ven 29 Juin - 2:10

De rien, et merci à toi Wink

_________________
Mes créations  Mon site  Mon forum  Congratulations !!! You've just created a temporal loophole...
Revenir en haut Aller en bas
http://biduleohm.free.fr/
Supernours
Jeune bricoleur
Jeune bricoleur
avatar

Masculin Nombre de messages : 236
Age : 21
Localisation : Paris
Emploi/loisirs : Electronique
Humeur :
Date d'inscription : 28/01/2011

MessageSujet: Re: Tuto : système de backup automatique pour site web   Ven 29 Juin - 2:58

Merci !
Je crois que je vais en mettre 2 par jour étant donné qu'en ce moment je travaille 6-8h par jour sur mon site ^^ (même si la plupart des trucs je les fais en localhost je test quand même les bdd en ligne)

Juste un truc : comment savoir si son hébergeur gère le cron ?
Revenir en haut Aller en bas
http://coilgun.olympe.in/
Biduleohm
Modérateur
Modérateur
avatar

Masculin Nombre de messages : 8851
Age : 26
Localisation : 77 Seine-et-Marne
Emploi/loisirs : bricolage, informatique, électronique, THT, laser, aquariophilie
Humeur :  
Date d'inscription : 25/03/2009

MessageSujet: Re: Tuto : système de backup automatique pour site web   Ven 29 Juin - 12:15

Oui toi tu peux car le contenu est très léger sur ton site donc le zip va être généré en quelques secondes, pour ma part le zip fait 200 Mo (principalement à cause des images en fait)...

Cette semaine j'ai testé en mettant un délai de 2 heures et j'ai eu en moyenne une backup toutes les 5 heures donc je pense que tu devrais mettre le délai à 8 heures soit 3 backups/jour au max avec de fortes chances de n'en avoir que 2. A tester, ce n'est pas un paramètre critique de toute façon Smile

Si c'est un hébergeur gratuit tu peux oublier le cron amha... l'hébergeur a forcément une description des services qu'il offre, regarde sur son site.

Ah j'oubliais, on peut trouver sur le net des scripts pour backuper les BDD SQL dans un fichier, il suffit donc de le lancer avant la génération du zip pour que la backup soit inclue dans celui-ci si vous voulez sauvegardez votre BDD en même temps que le site Wink

Par exemple, j'avais dev ces scripts (export et import) pour un projet de l'école :

Code:
   include($_SERVER['DOCUMENT_ROOT'] . '/conf/database.php.inc');
   $file = './backup/' . date('Y-m-d_H-i-s') . '.sql';

   $cmd = $path . 'mysqldump';
   $cmd .= ' --host=' . $host;
   $cmd .= ' --user=' . $user;
   if (!empty($pwd))
      $cmd .= ' --password=' . $pwd;
   $cmd .= ' --databases ' . $dbName;
   $cmd .= ' --result-file=' . $file;

   exec($cmd);

   echo "<br />Sauvegarde effectuée.";

Code:
   if (isset($_POST['import_file']) && !empty($_POST['import_file']))
   {
      include($_SERVER['DOCUMENT_ROOT'] . '/conf/database.php.inc');

      $query = "DROP DATABASE IF EXISTS " . $dbName;
      if (mysql_query($query))
      {
         $file = './backup/' . strip_tags($_POST['import_file']);

         $cmd = $path . 'mysql';
         $cmd .= ' --host=' . $host;
         $cmd .= ' --user=' . $user;
         if (!empty($pwd))
            $cmd .= ' --password=' . $pwd;
         $cmd .= ' < ' . $file;

         exec($cmd);

         echo "Sauvegarde restaurée.";
      }
      else
         echo "Erreur MySQL.";
   }
   else
      echo "Fichier d'import incorrect.";

Ce n'est pas excellent mais ça vous donne une solution pour le faire Wink

_________________
Mes créations  Mon site  Mon forum  Congratulations !!! You've just created a temporal loophole...
Revenir en haut Aller en bas
http://biduleohm.free.fr/
zangdar-64
Jeune bricoleur
Jeune bricoleur


Masculin Nombre de messages : 151
Age : 29
Localisation : Tarbes
Emploi/loisirs : Ingénieur/ Tout ce qui est +/- technique
Humeur : Non?
Date d'inscription : 29/11/2010

MessageSujet: Re: Tuto : système de backup automatique pour site web   Ven 29 Juin - 12:30

Je ne suis pas grand fan de cette méthode de cron, certes il n'y a pas besoin de s'en occupé mais perso j'aurais pluto rendu le script accessible depuis l'extérieur et l'activer depuis l'extérieur, du style un pot qui a un hébergement avec un cron.
Sinon je suppose que la durée des script est limité par free, c'est combien de temps?
Revenir en haut Aller en bas
Biduleohm
Modérateur
Modérateur
avatar

Masculin Nombre de messages : 8851
Age : 26
Localisation : 77 Seine-et-Marne
Emploi/loisirs : bricolage, informatique, électronique, THT, laser, aquariophilie
Humeur :  
Date d'inscription : 25/03/2009

MessageSujet: Re: Tuto : système de backup automatique pour site web   Ven 29 Juin - 13:05

Ah mais tu fais ce que tu veux, là le script peut très bien être rendu accessible de l'extérieur Wink (d'ailleurs j'ai oublié de préciser de mettre un htaccess...)

Perso je ne suis pas fan de dépendre d'un énième serveur pour de la backup. Il ne faut pas oublier que plus il y a d'élements dans un système et plus les chances d'avoir un problème augmentent... mais chacun fait ce qu'il veut, j'ai juste mis ça à dispo, vous êtes libre de prendre ou non, de modifier ou non, ... Smile

Oui, de mémoire c'est 30 secondes mais étonnamment le script les a dépassé plusieurs fois sans soucis. Donc soit je me trompe sur les 30 sec, soit le temps d'éxec de la lib n'est pas compté dans le temps d'exec du script, soit la lib est faite pour contourner ce pb, soit je ne sais pas.

_________________
Mes créations  Mon site  Mon forum  Congratulations !!! You've just created a temporal loophole...
Revenir en haut Aller en bas
http://biduleohm.free.fr/
Contenu sponsorisé




MessageSujet: Re: Tuto : système de backup automatique pour site web   

Revenir en haut Aller en bas
 
Tuto : système de backup automatique pour site web
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Brigole forum :: Divers :: L'Informatique-
Sauter vers: