Skip to content

Sauvegardes du serveur Ubuntu

Marc edited this page Aug 5, 2017 · 1 revision

Install et config des sauvegardes

HackMd

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

Owncloud (même procédure pour la sauvegarde MySQL et data)

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

Ancien Wiki

Clone this wiki locally