Outils pour utilisateurs

Outils du site


amipo_documentation_backup

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
amipo_documentation_backup [2020/01/10 17:17] bigMaxamipo_documentation_backup [2020/10/09 07:04] (Version actuelle) – Tag0 Added: amipo serge
Ligne 1: Ligne 1:
 <markdown> <markdown>
  
-# Documentation des Backup AMIPO+# Documentation des Sauvegardes AMIPO
  
-## Restauration d'un backup+## Réalisation des Sauvegardes
  
 +### Fichiers sauvegardées
 +*  Le schéma de la base de données 
 +*  Les données de la base de données
 +*  Les données hors base (le système de fichier /var/nextcloud/data)
 +*  Les fichiers exécutables de l'application nextcloud (/var/www/nuage)
 +*  Les fichiers de logs du nextcloud de prod (/var/log/nuage-prod.log*)
 +*  Les fichiers de config nginx (/etc/nginx)
 +
 +
 +### Scripts de Sauvegarde
 +Les scripts de backups sont entreposés ici : https://framagit.org/amipo/amipo-admin-code/tree/master/backups
 +Actuellement il y a 2 scripts :
 +*  backup_nextcloud.sh : effectue le backup de l'instance nextcloud de prod
 +*  restore_nextcloud_maintenance.sh : s'assure que l'instance nextcloud de prod n'est plus en mode maintenance
 +
 +
 +### Principes de la Sauvegarde
 +-  Création d'un nouveau dossier pour recueillir les fichiers à sauvegardées dans le dossier conteneur de backups (/backups/nextcloud sur le FS / pour profiter de ses 20 GB que l'on ne peut pas réduire)
 +-  Mise en mode maintenance de l'instance Nextcloud (mode maintenance ON)
 +-  Création du dump de la BD (schéma et data)
 +-  Copie du système de fichier "data" de Nextcloud
 +-  Remise en route de l'instance Nextcloud (mode maintenance OFF)
 +-  Copie des autres systèmes de fichiers (exécutables, logs, config, ...)
 +-  Création d'une archive compréssée au format tar.gz à partir du nouveau dossier créé à l'étape 1.
 +-  Suppression du dossier créé à l'étape 1.
 +-  Vérification et Suppression des anciennes archives vieilles de plus de 7 jours.
 +
 +
 +### Sécuritées
 +-  Actuellement, la suppression des archives n'est effectué que pour les archives vieilles de plus de 7 jours, et si il existe au moins 7 fichiers présent dans le dossier contenant les archives.
 +-  Le script de backup ne plante pas en cas d'erreur de copie de fichiers pour tenter de backup le plus possibles de données. Pour chaque plantage durant une copie, un compteur est incrémenté pour indiquer le nombre d'erreur de copie dans le nom de l'archive et ainsi indiquer la "qualité" du backup.
 +-  Si le script de backup vient à planter, on execute alors le script restore_nextcloud_maintenance.sh pour ne pas laisser l'instance nextcloud en mode maintenance.
 +-  Un rapport est envoyé par email après chaque déroulement des backups. Ce rapport contient les logs des scripts, et un état du dossier contenant les ancienes archives (nombre d'archives et espace disque restant).
 +
 +
 +### Automatisation de la Sauvegarde
 +*  Le backup est automatisé par un cronjob de l'utilisateur www-data. Pour le voir : `crontab -l -u www-data`. Cela devrait être : 
 +``` cron
 +# Nextcloud backup
 +0  2  *  *  * ( export PGPASSWORD="XXXXX"; /var/amipo-admin-code/backups/backup_nextcloud.sh 2>&1 || /var/amipo-admin-code/backups/restore_nextcloud_maintenance.sh 2>&1 ) | mailx -s "[AMIPO Admin] Sorties de backup nocturne de Gits." admin
 +```
 +*  Le cronjob est exécuté chaque nuit à 02h00.
 +*  Les sorties d'erreur et standard du backup sont envoyés par email à l'alias admin qui est configuré dans /etc/aliases
 +
 +
 +### Sauvegarde de la base de données
 +*  Les sauvegardes de la base de données sont séparées en 2 fichiers : la structure et les données.
 +*  La sauvegarde de la structure des données est sauvegardé au format texte compressé (.psql.gz).
 +*  Les données sont sauvegardé au format custom postgres déjà compréssé (.custom), cela permet une restauration plus rapide.
 +*  On ne sauvegarde que le contenu du schéma "nextcloud".
 +*  Un utilisateur spécifique dans la BD réalise les sauvegardes : "nextcloud_backup" avec des privilèges minimaux.
 +
 +
 +## Restauration d'une Sauvegarde
 +
 +### Création de la BD dans lequel sera effectué la restauration
 ``` psql ``` psql
 create role restore_user; create role restore_user;
 alter role restore_user encrypted password 'foo'; alter role restore_user encrypted password 'foo';
 alter role restore_user login; alter role restore_user login;
 +
 +alter role restore_user set search_path to nextcloud;
 create database restore_nextcloud; create database restore_nextcloud;
-\c restore_nextcloud +\c restore_nextcloud; 
-create schema restore+create schema nextcloud
-grant all on schema restore to restore_user; +grant usage on schema nextcloud to restore_user; 
-alter role restore_user set search_path to restore;+grant all on all tables in schema nextcloud to restore_user
 +grant all on all sequences in schema nextcloud to restore_user;
 ``` ```
  
 +### Restauration de la BD
 ``` bash ``` bash
 sudo mkdir /var/restore sudo mkdir /var/restore
 sudo chown max:max /var/restore sudo chown max:max /var/restore
 cd /var/restore cd /var/restore
 +sudo chown -R max:max *
 sudo tar -xzf /backups/nextcloud/latest sudo tar -xzf /backups/nextcloud/latest
 +sudo chown www-data:www-data /var/restore/.../nextcloud/data
 psql -U restore_user -h localhost -d restore_nextcloud -c "show search_path;" psql -U restore_user -h localhost -d restore_nextcloud -c "show search_path;"
 +
 +zcat schema-nextcloud-dump.psql.gz | sudo -u postgres -s psql -d restore_nextcloud
 +sudo -u postgres -s pg_restore -d restore_nextcloud data-nextcloud-dump.custom
  
 ``` ```
-   + 
-grant connect on nextcloud to nextcloud_backup; +### Duplication de l'app nextcloud 
-grant usage on schema public to nextcloud_backup; +``` bash 
-grant select on all tables in schema public to nextcloud_backup; +sudo cp -ar /var/www/nuage/ /var/www/restore_nuage 
-grant select on all sequences in schema public to nextcloud_backup; +``` 
-  +Edition du fichier /var/www/restore_nuage/config/config.php pour se connecter la BD: 
 +``` php 
 +'datadirectory' => '/var/restore/.../nextcloud/data', 
 +'overwrite.cli.url' => 'https://amipo.fr/restore_nuage', 
 +'dbname' => 'restore_nextcloud', 
 +'dbuser' => 'restore_nextcloud', 
 +'dbpassword' => '***', 
 +``` 
 + 
 +Ajouter un cronjob 
 +``` bash 
 +sudo mkdir -p /var/log/restore_nextcloud/ 
 +sudo chown root:www-data /var/log/restore_nextcloud/ 
 +sudo chmod 0660 /var/log/restore_nextcloud/ 
 +sudo crontab -e -u www-data 
 +*/5  *  *  *  * php -f /var/www/restore_nuage/cron.php 2>&1 /var/log/restore_nextcloud/cron.log 
 +``` 
 + 
 +### Config Nginx 
 +sudo cp /etc/nginc/nextcloud.conf /etc/nginc/restore_nextcloud.conf 
 +Remplacement de /nuage par /restore_nuage dans ce nouveau fichier. 
 +Ajout dans /etc/nginx/sites-available/amipo.fr de include /etc/nginx/restore-nextcloud.conf; 
  
 </markdown> </markdown>
 +{{tag>amipo}}
amipo_documentation_backup.1578676675.txt.gz · Dernière modification : 2020/01/10 17:17 de bigMax