Dupliquer un fichier sur serveur distant par commande ftp ?

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Dupliquer un fichier sur serveur distant par commande ftp ?

    Bonjour,

    Suite au sujet que j'ai ouvert concernant les sauvegardes, je suis en train de tenter de créer un script dont le but est de mettre à l'abri une sauvegarde Akeeba envoyée sur un serveur distant.
    L'idéal serait de ne pas perturber la gestion des sauvegardes Akeeba en conservant le fichier distant dans le dossier connu d'Akeeba backup.

    J'utilise un serveur strictement dédié au stockage, ne disposant pas de PHP ; le script PHP doit donc se lancer depuis un autre serveur, par tâche cron.

    Mes premiers essais m'ont permis, depuis mon serveur local, de copier un fichier vers ce serveur distant s'il n'y est pas déjà, puis de lister les dossiers et fichiers du serveur distant.
    Mais je bute sur l'absence d'une commande ftp_copy comparable à copy pour les fichiers locaux.

    J'ai quatre options pour garantir une protection des fichiers d'un effacement accidentel depuis l'administration des sauvegardes Akeeba backup, les trois premières depuis un script unique avec donc une seule tâche cron :
    • faire une copie du fichier vers un autre dossier du même serveur ftp (ce que je tente actuellement), ce qui n'obligerait pas à des manipulations pour récupérer le fichier de sauvegarde pour restauration, tout en garantissant qu'un effacement du ficher principal ne ferait pas perdre la sauvegarde, mais ça semble impossible via ftp, sauf en rapatriant une copie du fichier vers le serveur du script et en la renvoyant vers l'autre dossier du serveur de fichiers ;
    • déplacer le fichier sur le serveur ftp après l'envoi par Akeeba vers un dossier correspondant au site, par exemple, avec comme avantage qu'un effacement depuis la gestion des sauvegardes dans l'administration du site deviendrait impossible, mais un inconvénient, celui de devoir récupérer manuellement la sauvegarde pour restauration ;
    • envoyer les sauvegardes non plus vers le serveur de backups, mais vers un serveur web classique, le script étant chargé d'en envoyer une copie vers le serveur de backups sans supprimer la sauvegarde locale, sachant que certains hébergeurs n'acceptent pas qu'on conserve ces sauvegardes sur leur serveur mutualisé ;
    • utiliser la fonction d'envoi de la sauvegarde sans supprimer le fichier local et faire agir le script en local pour envoyer une copie et si besoin supprimer le fichier local, avec un inconvénient majeur : les infos d'accès au serveur de backups ne seraient plus sur un mais sur de multiples sites...
    Avez-vous des conseils à me donner sur une solution aussi sûre que possible ?
    Merci d'avance !
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    Hello.

    Ton script c'est un bash ?

    Pourquoi du ftp ?

    Moi j'utilise rsync pour les synchros entre serveurs.
    rsync fonctionne en local comme entre serveurs.
    En externe, il faut juste bien configurer le deamon rsync (dont autoriser les ip des serveurs qui doivent prendre l’initiative de la synchronisation).
    Il y a pas mal de tutos sur le net à ce sujet.
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3
      Merci Roland, mais je crois que tu oublies que je parle d'une part de serveurs mutualisés pour les sites et de simples serveurs de fichiers pour le stockage des sauvegardes, et que donc je suis loin d'être sûr (sans compter que je ne m'y connais pas) de pouvoir utiliser rsync.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Bonjour

        Il y a quelques années, j'ai utilisé avec succès le script php ci-dessous. Depuis mon ordinateur Windows, il permet de lancer un script php permettant de synchroniser mon dossier (où je développais mon projet php) avec les serveurs (tests et production) et ça marchait parfaitement.



        C'est donc à exécuter en ligne de commandes et peut-être cela peut-il t'aider à rencontrer ton besoin.

        Bon dimanche
        Christophe (cavo789)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

        Commentaire


        • #5
          Merci Christophe !

          Je l'étudierai avec attention.

          Comme je l'ai dit, je sais maintenant lister les fichiers du serveur de backup. J'avais une autre routine développée il y a quelques années avec l'aide du forum (et dont je ne me souviens plus le script de départ) qui permet de lister et si besoin supprimer des fichiers précis, par exemple un php.ini ou un .htaccess, ou encore pour moi qui utilise toujours Dreamweaver, les dossiers "_notes".

          Avec ton exemple en plus, j'arriverai à au moins une des solutions que j'ai évoquées.
          Celle qui m'intéresse le plus est la première, avec duplication sur le même serveur, mais faute de ftp_copy, il me faudra récupérer une copie sur le serveur du script (donc pas en local) puis la renvoyer dans un autre dossier (ou carrément vers un autre serveur pour encore plus de sécurité).

          Ensuite, il y aura la question de la sécurité du script que je compte utiliser en tâche cron depuis un serveur web distant. Je préférerais ne pas avoir besoin d'une URL, il va falloir que j'étudie ça !
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          Commentaire


          • #6
            Je rebondis sur ton dernier point concernant ma sécurité, nulle url dans la proposition que j'ai faite. Par contre il faudra stocker les données de connexion. Ici, avec l'outil proposé, c'est en clair dans un fichier ini, voir s'il propose des solutions de cryptage... Je n'avais pas ce besoin là car j'étais sur mon pc avec connexion intranet et liste blanche d'IP (au bureau)
            Christophe (cavo789)
            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

            Commentaire


            • #7
              C'est en effet parce que dans mon script il y a les infos de connexion au drive de backups qu'il faut que je trouve à le protéger.
              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
              MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

              Commentaire


              • #8
                Si on cherche sur le repo que j'ai mentionné, dans la liste des issues, plusieurs personnes ont posé ce problème. Différentes solutions comme https://github.com/dg/ftp-deployment/issues/75 ont été données (mais ici en introduction manuelle ce qui ne te convient pas).
                Christophe (cavo789)
                Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                Commentaire


                • #9
                  En effet, il faudrait trouver une méthode pour récupérer ces infos d'accès sans qu'un visiteur puisse les lire en accédant au fichier.
                  Mais d'une manière ou d'une autre, un visiteur qui arriverait jusqu'au script serait en mesure de le modifier pour vider le serveur...
                  Je ne sais pas comment Akeeba backup crypte et décrypte ces informations lorsqu'il doit envoyer les sauvegardes à distance.
                  "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                  MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                  Commentaire


                  • #10
                    Note qu'il faudrait avoir accès au serveur. Ces fichiers ne seraient nullement accessibles depuis une URL.

                    Si tu sauves le script que je propose ailleurs que dans var/www, nul n'aura accès (excepté la société qui héberge ton site).
                    Christophe (cavo789)
                    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                    Commentaire


                    • #11
                      Oui, Christophe, mais le souci est que les deux hébergeurs chez qui j'ai la possibilité de lancer une tâche cron nécessitent pour un (PHPNET/Nuxit) uniquement une URL (de type "https://www.monsite.tld/index.php?cleancache=MnT%C3%A9_02-clean"), l'autre (PlanetHoster) l'incluant dans une commande de type wget.

                      Je viens quand même de regarder plus en détails, et chez PlanetHoster, il serait possible d'utiliser un répertoire hors sites avec une commande de type "php -q /home/djdaeqtk/modules/cron.php >/dev/null 2>&1" . Il faut que je teste, car il me semble que je n'avais pas réussi avec ce mode-là.
                      Si ça fonctionne, il restera à bétonner l'accès au serveur.
                      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                      Commentaire


                      • #12
                        Bonjour,

                        J'avance à petits pas... et j'adore l'exhaustivité de la doc sur PHP !
                        Hier, pour le test d'un site, j'ai passé Wampserver en PHP 8.1, puis je suis revenu un peu plus tard sur ce script pour constater qu'il ne fonctionne plus !
                        Cliquez sur l'image pour l'afficher en taille normale  Nom : Capture d’écran 2023-01-31 072437.jpg  Affichages : 0  Taille : 45,1 Ko  ID : 2047605
                        Alors je suis allé voir le manuel PHP officiel pour lire :
                        8.1.0 Returns an FTP\Connection instance now; previously, a resource was returned.
                        Mais j'ai eu beau chercher, je n'ai pas réussi à trouver quelle modification faire pour gérer le passage en PHP 8.1 du serveur où devrait être placé ce script.
                        Le lien ouvre cette page https://www.php.net/manual/fr/class.ftp-connection.php
                        Il faudrait donc tester la version de PHP puis utiliser ftp_connect tel que je le fais aujourd'hui ($ftp = ftp_connect($ftp_server); ) pour une version inférieure à 8.1 et d'une autre manière sinon ?
                        Quelqu'un connaîtrait-il une doc sur la manière de procéder ? Merci d'avance !

                        PS : je viens de changer mes critères de recherche et trouvé cette page https://php.watch/versions/8.1/FTPConnection-resource dans laquelle je ne comprends pas vraiment ce que je devrais faire.
                        Dernière édition par RobertG à 31/01/2023, 07h39
                        "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                        MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                        Commentaire


                        • #13
                          Hello

                          Rapide coup d'oeil sur la page Github : https://github.com/dg/ftp-deployment...ftp-deployment et il est bien fait mention qu'ils sont compatibles PHP 8.

                          N'hésite pas à leur demander du support au travers d'une issue : https://github.com/dg/ftp-deployment/issues
                          Christophe (cavo789)
                          Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                          Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                          Commentaire


                          • #14
                            Merci Christophe, mais c'est à partir de 8.1 que ftp_connect change de type. En 8.0 le script fonctionne. Je n'ai pas compris comment le script que tu cites crée la connexion (pas doué, le gars ).
                            J'ai essayé d'ajouter en début de script
                            Code:
                            namespace FTP;
                            final class Connection {}
                            mais ça ne change pas, l'erreur persiste.
                            Je ne comprends pas comment passer du simple "ftp_connect", ressource, à une FTP/Connection. J'ai exploré un Joomla! 4.2 et une version récente d'Akeeba backup sans trouver comment ce changement est géré.
                            Mon script (basé sur la page correspondante du manuel PHP https://www.php.net/manual/fr/function.ftp-connect.php) se connecte jusqu'en 8.0 et déclenche l'erreur en 8.1 :
                            Code:
                            $ftp_server = "monserveur";
                            $ftp = ftp_connect($ftp_server);
                            "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                            MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                            Commentaire


                            • #15
                              Je crois qu'il faut que je mette du code dans la classe, entre les deux accolades, mais je n'ai pas trouvé d'exemple me permettant de comprendre quoi faire.
                              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                              MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X