OVH Community, votre nouvel espace communautaire.

Backup serveur - Comment et où ?


nonoseki
08/07/2015, 10h19
J'ai enfin un script de backup qui tourne.
Merci pour vos codes et conseils.
J'ai du le repasser en PHP5.3 sans succès, puis revenu en PHP5.2 ca tourne.
J'ai partagé les sources ici ;
https://forum.ovh.com/showthread.php...%E9-FTP-et-SQL

nonoseki
21/05/2015, 08h12
Pas moyen que le planificateur de tâches OVH mutualisé envoie lui même les fichiers par FTP alors ?
Merci pour le script !
Je vais attendre d'avoir les moyens de me payer un kimsufit et continuer les backups manuellement.

fritz2cat
20/05/2015, 20h17
Avec un kimsufi le moins cher, tu fais ce petit script sans prétention en cron:
Code:
#!/bin/bash
cd /home/endroit/du/backup
ncftpget -R -V -d ncftpget.log -u login -p ftp.cluster010.ovh.net . /
ncftp est assez malin pour demander au serveur distant les dates des fichiers et ne pas transférer ce que tu as déjà.

Ensuite il faut être un peu créatif pour garder des copies à dates plus espacées, comme par exemple rsync avec les paramètres qui vont bien.

nonoseki
20/05/2015, 19h15
Ca y est je prend le temps de tester tes scripts.
Je n'ai pas réussi à lancer le .sh avec le planificateur de tâches OVH mutualisé,
alors j'ai commencé par utiliser le fichier folder_zip.php et j'y ai ajouté une connexion FTP.

Le zip du serveur intégral ne zip que les fichiers présents à la racine et pas tous les dossiers présents à la racine.

Mais le zip d'un edossier précis fonctionne très bien,
J'ai dont lancé le fichier folder_zip.php?dir=dossier1, puis folder_zip.php?dir=dossier2, ...
OK, j'ai les zip de chacun de mes dossiers.

Par contre mon script de connexion FTP ajouté en fin de fichier ne fonctionne pas, si vous avez une idée ou une info, je suis preneur car je reçois toujours la réponse "Impossible de se connecter au serveur $ftp_server" bien que les identifiants soient corrects ReTestés avec filezilla.
Peut-être que le serveur mutualisé OVH bloque les connexions sur un autre serveur FTP ?

Voici mon code avec connexion en fin de fichier :
Code:
";
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }
//print $source." ok1,
"; $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } //print $destination." ok2,
"; $source = str_replace('\\', '/', realpath($source)); if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace('\\', '/', realpath($file)); if (is_dir($file) === true) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file) === true) { $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } } else if (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); } function compressroot($source, $destination) { if (!extension_loaded('zip') || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } $source = str_replace('\\', '/', realpath($source)); $filenames = array(); $iterator = new DirectoryIterator($source); foreach ($iterator as $fileinfo) { if ($fileinfo->isFile()) { $file = $fileinfo->getFilename(); $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } return $zip->close(); } // $HTTP_GET_VARS n'est plus sécurisé //$dir = (isset($HTTP_GET_VARS['dir'])) ? $HTTP_GET_VARS['dir'] : ''; // Remplacé par $_GET[] : $dir = (isset($_GET['dir'])) ? $_GET['dir'] : ''; print "dir:".$dir; // if ($dir != "") { // compress('./'.$dir, '../sauvegardes/back_'.$dir.'.zip'); // } else { // compressroot('./', '../sauvegardes/back_root.zip'); // } $today = date("Y-m-d_H\Hi\ms\s"); if ($dir != "") { compress('../'.$dir, './FTP/FTP_'.$dir.'_'.$today.'.zip'); } else { compressroot('../', './FTP/FTP_root_'.$today.'.zip'); } print "File Zipped
\n"; $file = '/FTP/FTP_'.$dir.'_'.$today.'.zip'; $remote_file = '/Disque dur/BackupOVH/FTP_'.$dir.'_'.$today.'.zip'; // Mise en place d'une connexion basique $ftp_server = '1.2.3.4'; $ftp_user_name = 'freebox'; $ftp_user_pass = 'motdepassefreebox'; $conn_id = ftp_connect($ftp_server) or die("Impossible de se connecter au serveur $ftp_server"); ; // Identification avec un nom d'utilisateur et un mot de passe $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // Charge un fichier if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) { echo "Le fichier $file a té chargé avec succès\n"; } else { echo "Il y a eu un problème lors du chargement du fichier $file\n"; } // Fermeture de la connexion ftp_close($conn_id); ?>

nonoseki
12/05/2015, 08h01
Ok je testerais le backup avec le temps de pause que as défini.
et si je fais évoluer ton script je partagerais !
Merci !

buddy
11/05/2015, 21h35
Citation Envoyé par nonoseki
Je vais tenter d'utiliser ma freebox comme NAS, ce serait parfait et sans aucun coût !

Pourquoi fait-tu une pause dans tes scripts ? Pour laisser le temps aux fichiers d'être zippés ?
entre autre, oui. si je ne mettais pas de sleep des fois je ne récuperai pas le fichier. après j'ai mis 2m mais tu peux mettre moins surement. (Moi je m'en moque car mon NAS syncro aussi le cloud pendant ce temps, ce qui lui prend beaucoup plus de temps que le script de backup donc je m'en "fou" du temps en pause... j'ai aussi l'habitude "perso" de mettre des sleeps dans tous mes scripts de backup. c'est tout. ce n'est pas vital, mais j'aime bien mettre des sleep 1 ou 2 minutes pour laisser reposer le serveur après une opérateur de backup)
Si c'est le cas,y-a-t-il moyen de savoir si le zip s'est fait correctement ? et ensuite de savoir s'il a été correctement reçu sur le NAS ?
heu, oui tu pourrais vérifier que le fichier est bien présent par exemple à la fin de la procédure de sauvegarde puis envoyer un email. Je ne le fais pas, car çà deviendra illisible / une perte de temps . (plusieurs mutu + plusieurs serveurs)
Le .sh permet de lancer les sauvegardes, puis de les envoyer c'est ça ?
oui, c'est un script à exécuter. quand il fait des wget http://monsite/fr/fichier.php il "lance" le fichier .php qui permet de faire les sauvegardes.
Ensuite, il importe tout les nouveaux fichiers avec "wget -r -nc ....." (il ne réimporte pas les anciens)
Un grand merci pour ton aide ainsi qu'à Nowwhat et pour tes précieux scripts !!!

nonoseki
11/05/2015, 15h49
j'utilise la version pro.
oui je n'avais pas vu, mais ce code est peu lisible pour le débutant que je suis ^^
de plus, il est possible de passer des commandes linux sur un hébergement mutualisé linux ?
Je pense utiliser des scripts php de compression et envoi précédents si je ne trouve pas mieux.
Dommage que je ne puisse utiliser rsynch pour vérifier l'évolution des précédentes sauvegardes.

fritz2cat
11/05/2015, 15h32
Relis l'article: j'ai mis un script Linux vers serveur rsync
Mais peut-tu dire quel type de mutu as-tu ? Un perso ? un Pro ?

nonoseki
11/05/2015, 15h29
Merci pour ton lien mais je suis sur un mutualisé sous Linux pour mon serveur donc pas d'outils windows possible.

fritz2cat
11/05/2015, 14h19
Pour faire un rsync incrémental sans dédoubler tous les fichiers, tu peux t'inspirer de ceci: http://blog.demees.net/?p=129

même si je fais mes backups dans l'autre sens, d'une machine linux ou Windows vers un dédié kimsufi chez OVH. Du moment que ton NAS supporte ssh et rsync, c'est pareil.

nonoseki
10/05/2015, 18h47
Je vais tenter d'utiliser ma freebox comme NAS, ce serait parfait et sans aucun coût !

Pourquoi fait-tu une pause dans tes scripts ? Pour laisser le temps aux fichiers d'être zippés ?
Si c'est le cas,y-a-t-il moyen de savoir si le zip s'est fait correctement ? et ensuite de savoir s'il a été correctement reçu sur le NAS ?

Le .sh permet de lancer les sauvegardes, puis de les envoyer c'est ça ?

Un grand merci pour ton aide ainsi qu'à Nowwhat et pour tes précieux scripts !!!

buddy
10/05/2015, 17h48
Bonjour,

pour mes scripts, le NAS a juste besoin d'avoir accès à internet. (cette technique marche avec un NAS synology - et surement d'autres - et avec n'importe quel hébergement OVH. testé sur OVH perso et OVH Pro)

1) il faut créer à la racine de l'hébergement un dossier "sauvegardes"
2) copier le .php avec le nom "folder_zip.php" dans le dossier www
3) copier le 2eme php avec le nom "backup_database.php" dans le dossier www
4) mettre le scripts .sh sur le NAS synology et le lancer périodiquement.


je sauvegarde les dossiers avec ce fichier .php .

fichier folder_zip.php
Code:
";
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }
//print $source." ok1,
"; $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } //print $destination." ok2,
"; $source = str_replace('\\', '/', realpath($source)); if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace('\\', '/', realpath($file)); if (is_dir($file) === true) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file) === true) { $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } } else if (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); } function compressroot($source, $destination) { if (!extension_loaded('zip') || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } $source = str_replace('\\', '/', realpath($source)); $filenames = array(); $iterator = new DirectoryIterator($source); foreach ($iterator as $fileinfo) { if ($fileinfo->isFile()) { $file = $fileinfo->getFilename(); $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } return $zip->close(); } $dir = (isset($HTTP_GET_VARS['dir'])) ? $HTTP_GET_VARS['dir'] : ''; print "dir:".$dir; if ($dir != "") { compress('./'.$dir, '../sauvegardes/back_'.$dir.'.zip'); } else { compressroot('./', '../sauvegardes/back_root.zip'); } print "finished
\n"; ?>
fichier backup_database.php
Code:
le .sh
Code:
#!/bin/bash
#


cd /volume1/site_backup/

#on lance la sauvegarde du dossier en .zip
wget http://monsite.fr/folder_zip.php?dir=forum # ne sauvegarde que le dossier "forum"
wget http://monsite.fr/folder_zip.php # sauvegarde tout le contenu de www

sleep 2m# on dit au script d'attendre 2 minutes

#on fait le backup de la base de donnees
wget http://monsite.fr/backup_database.php

sleep 2m# on dit au script d'attendre 2 minutes

# on recupere les sauvegardes

wget -r -nc --ftp-user=USER_FTP --ftp-password=PASSWORD_FTP ftp://ftp.monsite.fr/sauvegardes/
et quand on lance le script, çà récupère tout sur le NAS (puisqu'il y a un sleep 5m, çà prendre environ 6 à 7 min en totalité selon la taille du dossier et le débit de la connexion internet)

nonoseki
10/05/2015, 17h01
Je reviens sur vos réponse,
ca y est j'ai remonté une machine pour pouvoir travailler ...

J'ai regardé et je vois que le NAS Synologie est un petit serveur personnel.
Apparemment le prix total doit tourner autour des 150 pour le NAS + 2 x 50€ pour les 2 disques durs soit 250€ d'investissement.
Je n'ai pas trouvé de service de stockage en ligne pour le backup de serveur complet, à part un petit serveur dédié OVH mais c'est tout de suite 13€TTC/mois, soit plus cher que le NAS au bout de 2 ans.

Si je comprend bien :
- je monte mon NAS sur mon réseau local à IP fixe,
- je le configure pour qu'il recueille les envois FTP depuis mon hébergement mutualisé OVH
- j'utilise votre script pour récupérer les dossiers de mon serveur mutualisé, les compresser et les envoyer par FTP sur mon NAS

Dites moi si je me trompe :-) ?

Par contre, Je suis sur un hébergement mutualisé OVH donc je n'ai pas accès à rsync utilisé par Nowwhat si je ne me trompe pas, est-ce un problème ?

Buddy, est-ce que tu utilises également un mutualisé ?
Peux-tu m'envoyer tes scripts pour que je voie comment la sauvegarde fonctionne ?

Merci beaucoup pour votre aide !

nonoseki
04/05/2015, 14h39
Merci pour vos réponses !!!
malheureux hasard, mon pc vient de tomber en rade,
alors je regarde vos infos dès que c'est réglé !

Nowwhat
04/05/2015, 08h39
Citation Envoyé par buddy
...
Si tu as un nas synology, je te donnerai les scripts.
C'est exactement ce que je fait moi aussi.

Mon script :
Code:
#!/bin/bash
echo  "/var/www"
rsync --port 1222 -azv --delete-after -e "ssh -p 1222 -i /root/.ssh/diskstation-openssh-private" /var/www root@mon-domaine-chez-moi.tld:/volume2/SYS/var
echo "/var/spool"
rsync --port 1222 -azv --delete-after -e "ssh -p 1222 -i /root/.ssh/diskstation-openssh-private" /var/spool root@mon-domaine-chez-moi.tld:/volume2/SYS/var
echo "/var/lib/"
rsync --port 1222 -azv --delete-after -e "ssh -p 1222 -i /root/.ssh/diskstation-openssh-private" /var/lib root@mon-domaine-chez-moi.tld:/volume2/SYS/var
echo "/var/cache"
rsync --port 1222 -azv --delete-after -e "ssh -p 1222 -i /root/.ssh/diskstation-openssh-private" /var/cache root@mon-domaine-chez-moi.tld:/volume2/SYS/var
echo "/var/log"
rsync --port 1222 -azv --delete-after -e "ssh -p 1222 -i /root/.ssh/diskstation-openssh-private" /var/log root@mon-domaine-chez-moi.tld:/volume2/SYS/var
echo "/etc"
rsync --port 1222 -azv --delete-after -e "ssh -p 1222 -i /root/.ssh/diskstation-openssh-private" /etc root@mon-domaine-chez-moi.tld:/volume2/SYS
Explications:
--port 1222 : dans mon router chez moi, disons mon "Livebox", j'ai natté la porte "1222" vers la porte "22" de mon NAS, le Synologie, comme ça, rsync qui s'exécute sur mon serveur chez OVH se connecte à mon NAS dans mon LAN chez moi.
-- delete-after : pour supprimer les fichiers sur le NAS qui ne sont plus présent sur mon serveur
-e "ssh -p 1222 -i /root/.ssh/diskstation-openssh-private" : sur mon nAS; dans /root/.ssh/authorized_keys, j'ai ajouté mon clé publique. la conenction se fait ainsi sans mot de passe. Sur mon serveur j'ai le clé privé: /root/.ssh/diskstation-openssh-private
/var/www : le répertoire à copier.
root@mon-domaine-chez-moi.tld:/volume2/SYS/var : le chemin vers la destination. J’ai eux disques dans mon NAS, volume1 et volume2. Sur volume2, les données de mon serveur sont copié dans /volume2/SYS/. ceci "mon-domaine-chez-moi.tld" est l'URL vers mon IP, que je garde à jour avec un système de DynDNS car chez Orange (mon FAI) mon IP change chaque semaine.

De mémoire, j'ai du activer le service 'rsync' sur mon NAS.
J'ai généré un pair des clés.
Option : le parafeu sur le NAS n'accepte QUE l'IP de mon serveur comme connexion venant d 'Internet.

Attention: ce script fait une copié de mon serveur vers le NAS. Quand je synchronise, les fichiers qui ne sont plus présent sur mon serveur, ne le seront plus sur mon NAS non plus.

buddy
03/05/2015, 20h53
Salut,

moi j'importe tout sur mon Nas synology.

Si tu as un nas synology, je te donnerai les scripts.

nonoseki
02/05/2015, 17h09
Bonjour,
Mon serveur commence à avoir plusieurs sites et le backup fait main actuellement en place devient trop lourd à gérer.

J'utilise pour les sites sous Wordpress une extension pour zipper les fichiers importants que je récupère ensuite avec Cobian sur mon pc,
et pour 2 autres sites fait maison je conserve la dernière version sur mon pc, le tout avec un backup mensuel sur un HDD externe.
J'ai également une tâche cron qui lance un script PHP pour créer des sauvegardes journalières de mes bases de données.

Seulement je ne peux plus continuer à vérifier tout ça chaque mois et en faire une partie à la main ça me prend trop de temps.
Et je ne peux pas non plus continuer à uniquement conserver les backup sur mon ordinateur, il me faut un serveur distant de sauvegarde.

Voilà ma demande de conseils :
1 - Pouvez-vous me conseiller un script ou une technique pour faire un backup de tous mes dossiers, en zip ? avec la gestion du nombre de sauvegardes des dernières version ça existe ?

2 - Comment puis-je copier ces backup sur un autre hébergement que mon serveur ? Par quelle technique ? Quelles offres existent actuellement ?


Un grand merci d'avance pour vos conseils, car je ne sais plus comment faire !