Sauve Backup Htdocs & Documents (module en cours)

j’ai écrit rapidement cet outil extrabackup.php pour sauvegarder facilement les dossiers htdocs ou documents de dolibarr des utilisateurs en hébergement mutualisé.
il génère automatiquement un zip par défaut dans le dossier /documents/admin/backup (donc avec les sauvegardes mysql ) ce qui permet de gérer les sauvegarde directement depuis dolibarr (transfert / effacement)
il est également possible de les placer dans un sous dossier mais dans ce cas ce sera a gérer en ftp

dezipper et placer le fichier extrabackup.php dans le dossier /htdocs/custom/extrabackup

le lancer directement depuis « mon_url.com » /htdocs/custom/extrabackup/extrabackup.php
rajouter ci besoin en paramètre « mon_url.com » /htdocs/custom/extrabackup/extrabackup.php&action=1&separate=1

adapter l’adresse en fonction de votre install

Attention : il ne s’affiche rien avant la fin du script, et cela peut etre long :unhappy:

A savoir parametre a passer en option
action
0 save the htdocs
1 save the documents folder (default)
2 save the documents folder except backup folder (not yet) j’ai pas fini mais cela est prevu

separate =
0 save in documents/admin/backup with mysql backup
backup are managed by the mysql backup tool to download & delete
1 save in separate folder data_root/admin/backup/BackupHtdocs
data_root/admin/backup/BackupDocs
dans ce cas les backups sont gérés par vous directement via ftp

je modifierais cela pour en faire un module mais peut etre plus adequat de le rejouter dans le backup actuel en etape 2 / 3 ???

extrabackup.100.public.zip (2.25 KB)

Bonjour,
L’idée de backup les documents est sympa mais il manque un point important si je le place sur un hébergement : la sécurité !!!
Ligne 55 par exemple j’ajouterais bien if (! $user->admin) accessforbidden();
Sinon un utilisateur inconnu peut lancer le backup à volonté et donc saturer le serveur très vite !
@+

Bonjour tel quel ce n’est pas un module
J’ai vite rajouter la reprise de fichier de conf de dolibarr pour faire des tests
bien sur les securitées seront presente avec par exemple
- des clef de cryptage possible du zip
- ou la possibilite de donner droit à un utilisateur de lancer le backup sans acces adminitrateur
- je me pose la question d’une url cron pour un backup automatique
- un dossier dans les documents ou hors dolibarr et des sous dossiers…
- la possiblite de recuperer une version de dolibar et la dezipper sur le serveur directement (voire l’installer directement …) mais a voir suivant les droit chmod possible (linix / windows).

pour l’instant le backup marche sur ovh mutu en linux, sous des postes windows, j’ai pas moyen de tester

je travaille sur le module actuellement il ressemble a ca

2015-11-2317_35_02-Dolibarr-Configuration.png

les images ne passent pas :unhappy:

Jer tombe sur ce vieux post…tu as pérennisé ton process ??

Bonjour,
Apparemment sans suite … hélas. Tout le monde compte aveuglément sur les sauvegardes des hébergeurs (Qui diminuent leurs jours de sauvegardes pour certains et pour d’autres n’en font plus en standard).
Je regarde de mon côté à mettre en place pour mes clients une sauvegarde hebdomadaire externe via FTP… si quelqu’un avait un bout de code, j’en serai très heureux.
Bonne journée

je crois surtout que cette fonctionnalité est native à présent …

Oui les travaux planifies; mais pas trouvé le moyen de faire cela vers un Google Drive ou a minima vers un dossier FTP :slight_smile:

Bonjour,

vous pouvez utiliser rclone pour sauvegarder vers un système comme Google Drive, rclone est compatible avec de nombreux fournisseurs d’espace de stockage

1 « J'aime »

Hello,

Yes trés bien, mais c’est en GO, du coup pas facile à généraliser.

Je recherche depuis longtemps une lib PHP qui ferai la même chose (même si plus limité).
Tu saurais si ça existe ?

C’est utilisable en php à travers les Foreign Function Interface, mais j’ai jamais testé ça.

Je fais tourner rclone avec systemd sur mes serveurs (pour être plus précis, c’est restic - qui utilise rclone - qui est configuré en tant que service systemd).
https://restic.net/

Merci pour l’info hop.
Mais les Dolibarr sont sur des serveurs mutualisés et je crains que cela soit pour du Windows… ou du serveur dédié (?)

Restic et Rclone sont multi plateforme.

Sur un mutualisé, aucune idée, je n’utilise que des instances cloud qui tournent sous NixOS.

Pour donner un aperçu voici un exemple de config qui fait une sauvegarde horaire de l’ensemble des bases mysql et une sauvegarde journalière des documents d’une instance dolibarr.

Il n’y a rien d’autre à faire avec NixOS tout se met en place lorsque l’on déploie la config sur le serveur.

En gros on dit juste : je veux une sauvegarde de tel répertoire à telle fréquence sur tel espace de stockage. Pour mysql on lance juste un script supplémentaire avant de faire la sauvegarde pour faire le dump des bases de données dans le répertoire qui sera ensuite sauvegardé.

      restic = {
        backups = {
          dolibarr = {
            repository = "rclone:ovh:restic.${hostName}/${app}";
            initialize = true;
            passwordFile = config.age.secrets."restic.pwd".path;
            rcloneConfigFile = config.age.secrets."rclone.conf".path;
            paths = [ "${app}/documents" ];
            pruneOpts = [ "--keep-last 25" ];
            timerConfig = {
              OnCalendar = "*-*-* 18:00:00";
              Persistent = true;
              RandomizedDelaySec = "1h";
            };
          };
          mysql = {
            user = "root";
            repository = "rclone:ovh:restic.${hostName}/mysql";
            initialize = true;
            passwordFile = config.age.secrets."restic.pwd".path;
            rcloneConfigFile = config.age.secrets."rclone.conf".path;
            paths = [ "${cfg.location}" ];
            backupPrepareCommand = ''
              for DB in $(${mariadb}/bin/mysql -e 'show databases' -s --skip-column-names); do
                  dest="${cfg.location}/$DB-$(date +%Y-%m-%d-%H-%M-%S).gz"
                  if ${mariadb}/bin/mysqldump $DB | ${gzip}/bin/gzip -c > $dest.tmp; then
                      mv $dest.tmp $dest
                  else
                      echo "Failed to back up to $dest"
                      rm -f $dest.tmp
                  fi
              done
            '';
            backupCleanupCommand = ''
              find ${cfg.location} -type f -name '*.gz' -mtime +2 -exec rm {} \;
            '';
            pruneOpts = [ "--keep-last 7" ];
            timerConfig = {
              OnCalendar = "*-*-* *:00:00";
              Persistent = true;
              RandomizedDelaySec = "10min";
            };
          };
        };
      };