-
Notifications
You must be signed in to change notification settings - Fork 14
Sauvegardes du serveur Ubuntu
Marc edited this page Aug 5, 2017
·
1 revision
Install et config des sauvegardes
Noter l'ID du conteneur postgress :
sudo docker ps -a
Créer un script de sauvegarde dans le fichier /var/www/backups/scripts/hackmd.sh
:
#!/bin/sh
DATE=`date +"%Y-%m-%d_%H-%M-%S"`
docker exec 80c6a4ef581a pg_dump hackmd -U postgres > /var/www/backups/hackmd/$DATE.sql
find /var/www/backups/hackmd/* -mtime +30 -exec rm {} \;
if find /var/www/backups/hackmd/$DATE.sql -type f -size +10c 2>/dev/null | grep -q .; then
echo "The backup has run successfully"
else
echo "The backup has was unsuccessful"
echo "La sauvegarde de HackMd a echoue. C est probablement l identifiant du conteneur posgress du docker qui a change" | mail -s "Probleme de sauvegarde sur le serveur Infomaniak" contact@marc.fun
fi
Puis programmer des sauvegardes journalières de la BDD :
sudo crontab -e
et rajouter :
@daily /var/www/backups/scripts/hackmd.sh
Créer le fichier /var/www/backups/scripts/pastel-backup.php
:
#!/usr/bin/php
<?php
// Pastel Backup
// Marc Farré
// contact@marc.fun
// 2013-08-01
$version = '1.2';
$backupScriptPath = '/var/www/backups/scripts';
$mailAdressIfError = 'webmaster@marc.fun';
$mailSubjectIfError = 'Erreur lors de la sauvegarde des sites';
// La fonction system ne doit pas être bloquée pour appeler mysqldump et zip
// syntaxe : php /chemin/pastel-backup.php config=fichier-dans-le-dossier-configs.php
parse_str(implode('&', array_slice($argv, 1)), $_GET);
include $backupScriptPath.'/configs/'.$_GET["config"];
?>
===== Pastel Backup v<?php echo $version ?> =====
Sauvegarde de la base de données en cours...
<?php
// supression des sauvegardes MySQL précédentes
array_map('unlink', glob($mysqlSaveDir."/*.bz2"));
// Création d'une nouvelle sauvegarde MySQL
system('mysqldump --host="'.$mysql_server.'" --user="'.$mysql_login.'" --password="'.$mysql_passwd.'" --all-databases | bzip2 -c > '.$mysqlSaveDir.'/'.$fileNamePrefix.'.sql.bz2');
?>
Sauvegarde des fichiers en cours (peut être très long)...
<?php
foreach ($dirListToSave as $dirToSave) {
echo 'Zippage en cours de '.$dirToSave.'
';
system('zip '.$zipSaveDir.'/'.$fileNamePrefix.'-'.str_ireplace('/', '_', $dirToSave).'.zip -q --exclude "*.mp4" --exclude "*.avi" --exclude "*.mov" --exclude "*.mp3" -r '.$dirToSave.'/*');
}
?>
Copie des fichiers zip via FTP (peut être très très long !)...
<?php
if ($ftp_server != "") {
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
if ((!$conn_id) || (!$login_result)) {
echo "La connexion au serveur $ftp_server pour l'utilisateur $ftp_user a échoué !";
mail ($mailAdressIfError, $mailSubjectIfError, "La connexion au serveur $ftp_server pour l'utilisateur $ftp_user a échoué !");
exit;
}
foreach ($dirListToSave as $dirToSave) {
echo 'Envoi en cours de '.$dirToSave.'
';
$upload = ftp_put($conn_id, $ftp_path.'/'.$fileNamePrefix.'-'.str_ireplace('/', '_', $dirToSave).'.zip', $zipSaveDir.'/'.$fileNamePrefix.'-'.str_ireplace('/', '_', $dirToSave).'.zip', FTP_BINARY);
if (!$upload) {
echo "Le chargement du fichier ".$fileNamePrefix."-".str_ireplace('/', '_', $dirToSave).".zip via FTP a échoué !";
mail ($mailAdressIfError, $mailSubjectIfError, "Le chargement du fichier '.$fileNamePrefix.'-'.str_ireplace('/', '_', $dirToSave).'.zip via FTP a échoué !");
exit;
}
}
$upload = ftp_put($conn_id, $ftp_path.'/'.$fileNamePrefix.'.sql.bz2', $mysqlSaveDir.'/'.$fileNamePrefix.'.sql.bz2', FTP_BINARY);
if (!$upload) {
echo "Le chargement du fichier ".$mysqlSaveDir."/".$fileNamePrefix.".sql.bz2 via FTP a échoué !";
mail ($mailAdressIfError, $mailSubjectIfError, "Le chargement du fichier ".$mysqlSaveDir."/".$fileNamePrefix.".sql.bz2 via FTP a échoué !");
exit;
}
ftp_close($conn_id);
}
?>
Et le fichier /var/www/backups/scripts/configs/nextcloud.php
:
<?php
// ne pas rajouter de / à la fin
// dans cet exemple, pastel-backup.php est installé dans /sauvegardes et les répertoires /sauvegardes/MySQL et /sauvegardes/completes ont été créés et sont accessibles en écriture
$dirListToSave = array(
'/var/www/cloud.communecter.org/data',
);
$mysqlSaveDir = '/var/www/backups/nextcloud/MySql_Backups';
$zipSaveDir = '/var/www/backups/nextcloud/Zip_Backups';
$fileNamePrefix = 'backup_nextcloud_'.date('Y-m-d_H-i-s');
$mysql_server = "localhost";
$mysql_login = "root";
$mysql_passwd = "{MOT-DE-PASSE}";
$mysql_bdd = "--all-databases"; // Si "--all-databases" : sauvegardera toutes les bases pour lesquelles pastel_mysqldump est autorisé
$ftp_server=""; // Si vide, il n'y aura pas d'uplad ftp
$ftp_user='';
$ftp_pass='';
$ftp_path="";
?>
sudo crontab -e
:
5 3 * * * php /var/www/backups/scripts/pastel-backup.php config=nextcloud.php
Nous sommes disponible à tout moment sur le chat.
Ancien Wiki