[Tuto/HowTo] [GNU/Linux] Sauvegarder les fichiers de phpBB3 sur le cloud (nextcloud / owncloud) via script Bash

Post Reply
User avatar
voxdemonix
Posts: 880
Joined: Mon Feb 02, 2015 7:28 pm

[Tuto/HowTo] [GNU/Linux] Sauvegarder les fichiers de phpBB3 sur le cloud (nextcloud / owncloud) via script Bash

Post by voxdemonix » Wed Jan 11, 2017 3:04 am

musique d'entrain : Zanski - Lead Fever
Testé sur : Raspbian Jessie, Xubuntu 16.04

Introduction
  • Pour protéger le forum phpBB3 d'une perte de données (en cas par exemple de mise à jours foirée), il faut maintenir une ou plusieurs copies de la base de données, des fichiers joints, des avatars, des smiley et, si vous avez personnalisé votre thème, de vos fichiers styles. Par simplicité, nous allons sauvegarder l'entièreté des fichiers de notre forum phpBB.
    Le client va donc faire deux choses :
    1. Avec rsync il va conserver la dernière copie prêt a l'emploi dans le dossier /latest/ qui se trouvera sur le montage distant que vous aurez configuré. Lors de chaque mise à jours du backup le contenu de ce dossier sera ré-initialisé.
    2. Avec tar il va conserver une copie compressée (tar.gz) dans un dossier /temps/ ou temps aura une des valeurs suivantes : hourly, daily, weekly, monthly, yearly. Ces dossiers seront eux aussi situé dans le montage distant que vous aurez configuré. Les mises jours temporelles ne sont pas (encore) supprimées automatiquement.
    Le script s'appelle de la faon suivante
    • Code: Select all

      sudo /opt/scripts/synchroCloud.sh [hourly|daily|weekly|monthly|yearly]
    Si le paramètre temps n'est pas défini par défaut se sera daily

Farm Link Mise en place
Sur votre serveur cloud (nextcloud / owncloud)
  1. Créez un utilisateur dédié avec des droits restreints
  2. Connectez-vous à cet utilisateur et créé un dossier dédié à votre synchronisation (par exemple : phpBB_fichiers_joints)
Sur votre client (le serveur où est hébergé votre forum phpBB)
  1. Effectuez un montage WEBDAV/DAVFS2, ici le point de montage sera /media/montageDistant
  2. Créez le fichier /opt/scripts/synchroCloud.sh
    • Code: Select all

      sudo nano /opt/scripts/synchroCloud.sh
  3. Insérez le code suivant en l'adaptant à votre config
    • Code: Select all

      #!/bin/bash
      # Licence WTFPL - infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=71&t=496#p1081
      # synchronisation des fichiers joints d'un ou plusieurs forum phpBB sur le cloud
      # V 1.5 - lancer le software sans paramètre = backup dans dossierDistant/latest et dossierDistant/daily si non ajoutez un des paramètres cron suivant : hourly, daily, weekly, monthly, yearly (dans tout les cas le dossier latest sera update)
      
      montageLocal="/media/montageDistant" #le point de montage locale
      dossierDistant="/phpBB_fichiers" #le dossier destination ne terminez pas par /
      dossierSource="/var/www/html/forum" #le dossier source
      userPourCopie="root" #l'utilisateur a utiliser pour la copie
      identifiantFichier="savephpBBFullFichiers_" # remplissez si vous souhaitez placer un mot pour identifier les fichiers compressé
      maxBackupParDossier=7
      
      if [ ! "$SUDO_USER" ]; then
      echo "this script need to be lunch by root"
      exit 0
      fi
      
         #VERIFICATION DU MONTAGE
      startTime=`date +%s`
      if [ -d "$montageLocal$dossierDistant" ];then
         endTime=`date +%s`
         runTime=$((endTime-startTime))
         if [ "$runTime" -lt "600" ];then
         
         #ACTION
      
      
                  dossierTemps="/daily/"
      
                  case "$1" in
                  "hourly")
                      dossierTemps="/hourly/"
                      ;;
                  "daily")
                      dossierTemps="/daily/"
                      ;;
                  "weekly")
                      dossierTemps="/weekly/"
                      ;;
                  "monthly")
                      dossierTemps="/monthly/"
                      ;;
                  "yearly")
                      dossierTemps="/yearly/"
                      ;;
                  esac
      
                      # VERIF IF DESTINATION FOLDER EXIST IF NOT CREAT IT
                  if ! [ -d "$montageLocal$dossierDistant$dossierTemps" ];then
                          mkdir -p "$montageLocal$dossierDistant$dossierTemps"
                  fi
                  if ! [ -d "$montageLocal$dossierDistant/latest" ];then
                          mkdir -p "$montageLocal$dossierDistant/latest"
                  fi
      
                  sudo chown www-data:$userPourCopie -R $dossierSource/ & sudo chmod 770 -R $dossierSource
                    #sauvegarde des fichiers locaux vers cloud
      #echo "copie dans $montageLocal$dossierDistant$dossierTemps"
            dateBackup=$(date +%Y-%m-%d)
            heureBackup=$(date +%Hh%Mm)
            jourBackup=$(date +%A)
      #echo "$montageLocal$dossierDistant$dossierTemps$identifiantFichier$dateBackup.$heureBackup.$jourBackup.tar.gz"
            tar -cvzf "$montageLocal$dossierDistant$dossierTemps${identifiantFichier}_${dateBackup}_${heureBackup}_${jourBackup}.tar.gz" $dossierSource*
      
      
      #echo "copie dans $montageLocal$dossierDistant/latest"
      #           su $userPourCopie -c "rsync $dossierSource/ $montageLocal$dossierDistant/latest/ -r --delete --exclude ${dossierSource}/plupload --exclude ${dossierSource}/**index.htm*"
                      su $userPourCopie -c "rsync -r --delete --exclude=plupload* --exclude=index.htm* ${dossierSource}/ ${montageLocal}${dossierDistant}/latest/"
                    #on reverrouille l'accès au dossier
                      sudo chown www-data:root -R $dossierSource/ & sudo chmod 770 -R $dossierSource/
      
                              #PURGE des backup excedent la limite definie par l'user
                      cd $montageLocal$dossierDistant$dossierTemps
                      ls -t | tail -n +$maxBackupParDossier | xargs rm --
      
         else
         echo "$montageLocal => not responding (408) / delais d'attente depasse"
         fi
      else
      echo "$montageLocal$dossierDistant => not exist"
      fi
      
      • montageLocal="/media/montageDistant" : le point de montage
        dossierDistant="/phpBB_fichiers/" : le dossier destination
        monDossier="/var/www/html/forum" : le dossier source
        userPourCopie="root" : l’utilisateur a utiliser pour la copie
        identifiantFichier="savephpBBFullFichiers_" : remplissez si vous souhaitez placer un mot pour identifier les fichiers compressé
        maxBackupParDossier=7 : le nombre maximal de backup à conserver pour chaque dossier temps
      Note : le script a un soucis d'héritage des variables quand on veut utiliser un utilisateur système dédié (les variables sont créées par root et inaccessible aux autres users)
  4. Accordez les bonnes permissions au script
    • Code: Select all

      sudo chown root:root /opt/scripts/synchroCloud.sh
      sudo chmod 755 /opt/scripts/synchroCloud.sh
  5. Ajoutez votre script au cron (tâches planifiées) de votre machine
  6. Insérez les lignes suivantes en les adaptant éventuellement
    • Code: Select all

              #synchro des fichiers joints de phpBB sur le cloud
      #@hourly        /opt/scripts/synchroCloud.sh hourly >/dev/null 2>&1
      @daily          /opt/scripts/synchroCloud.sh >/dev/null 2>&1
      @monthly        /opt/scripts/synchroCloud.sh monthly >/dev/null 2>&1
      @yearly         /opt/scripts/synchroCloud.sh yearly >/dev/null 2>&1
      Avec cette commande la tâche sera exécutée une fois par jours a minuit et une minute (équivalent de "0 0 * * *").
      Si vous préférez le lancer toutes les heures à la troisième minute, dé-commentez (enlevez le "#") @hourly


Remerciements
Merci aux utilisateurs de LinuxFR de m'avoir aidé a améliorer le script :)
Last edited by voxdemonix on Wed Feb 01, 2017 12:32 am, edited 11 times in total.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

User avatar
voxdemonix
Posts: 880
Joined: Mon Feb 02, 2015 7:28 pm

Re: [Tuto/HowTo] [GNU/Linux] Sauvegarder la Base de données de phpBB sur ubuntu/debian/raspbian avec automysqlbackup

Post by voxdemonix » Wed Jan 18, 2017 8:33 pm

Sauvegarder la Base de données de phpBB sur ubuntu/debian/raspbian avec automysqlbackup
  • automysqlbackup est un script libre, disponible dans les paquets Ubuntu et Debian/Raspbian, qui permet d'automatiser la sauvegarde de base de données.
    Une fois le paquet installé, par défaut il copiera les bases de données en suivant les cron suivants : @daily ("0 0 * * *"), @monthly ("0 0 1 * *"), @weekly ("0 0 * * 0"). Et grâce à l'option LATEST=yes vous disposerez aussi d'un dossier intitulé latest dans lequel sera situé le dernier backup en date.
    Si vous souhaitez éditer le script
    • Code: Select all

      sudo nano /usr/sbin/automysqlbackup
Farm Link Mise en place
  1. Créez le dossier pour accueillir les sauvegardes des Bases De Données sur votre montage webdav/davfs2 créez dans le tuto précédent
    • Code: Select all

      sudo mkdir /media/montageDistant/phpBB_BDD/
  2. Installez le logiciel
    • Code: Select all

      sudo apt-get update
      sudo apt-get install automysqlbackup nano
  3. Éditez le fichier de configuration
    • Code: Select all

      sudo nano /etc/default/automysqlbackup
      Pour rechercher un élément tapez CTRL+W. Modifiez les valeurs suivantes :
      • BACKUPDIR="/var/lib/automysqlbackup" => remplacez /var/lib/automysqlbackup par le dossier où vous souhaitez ranger les backup de votre base de données (dans ce tuto /media/montageDistant/phpBB_BDD/)
        LATEST=no => passez la valeur no à yes
        SEPDIR=yes => Si vous souhaitez un dossier par base de données laissez yes, si vous préférez grouper les BDD dans un seul fichier pour chaque backup, entrez no
        #PREBACKUP="/etc/mysql-backup-pre" => vous pouvez décommenter la commande (supprimer le #) et remplacer "/etc/mysql-backup-pre" par "/usr/sbin/service apache2 stop"
        #POSTBACKUP="/etc/mysql-backup-post" => vous pouvez décommenter la commande (supprimer le #) et remplacer "/etc/mysql-backup-pre" par "/usr/sbin/service apache2 start"
        DBEXCLUDE="" => si vous souhaitez ne pas inclure des base de données, indiquez les.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest