Comment migrer rapidement un site grâce à RSYNC, Linux et SSH ?

Vous disposez d’un ou plusieurs hébergements Linux, avec ou sans cPanel, mais avec un accès au Shell SSH ? Dans ce cas, ce tutoriel de migration avec RSYNC est fait pour vous, surtout si vous souhaitez pouvoir migrer des sites très rapidement, en un claquement de doigts ! ⚡️🚀

Tuto RSYNC : migration de site rapide vers EasyHoster

Dans ce tutoriel RSYNC, nous allons voir comment exécuter la ligne de commande rsync pour aspirer et synchroniser les fichiers depuis un Serveur SSH distant (un autre hébergeur par exemple), vers votre Serveur local EasyHoster.

Cette méthode est idéale, par exemple, pour récupérer rapidement tous les fichiers d’un site WordPress, depuis un Hébergeur Web concurrent, vers votre Hébergement EasyHoster.

Le tutoriel RSYNC

Tout d’abord, vérifiez que rsync est installé sur le machine de destination (l’autre hébergeur). Si ce n’est pas le cas, demandez lui de l’activer.

Sur votre Hébergement EasyHoster, rsync et SSH sont d’ores et déjà actifs, vous n’avez rien à faire.

Vous pouvez donc vous connecter au Terminal cPanel ou au Shell SSH de votre Hébergement EasyHoster.

Voici un exemple de ligne de commande RSYNC via SSH à exécuter sur votre Hébergement cPanel EasyHoster, pour aller récupérer les fichiers distants depuis un autre Hébergeur compatible SSH.

Ligne de commande RSYNC pour la migration depuis un Hébergeur SSH vers un Hébergeur cPanel

Vérifiez ceci, avant d’exécuter la ligne de commande suivante, envisagez d’utiliser certaines exclusions de dossiers / répertoires voir point « Questions fréquentes sur RSYNC : Comment exclure un dossier ou un répertoire lors d’un transfert RSYNC ? » plus bas dans cet article.

rsync -chazP -e "ssh -p 22" RemoteUsername@hostname-ssh.another-easyhoster.com:/home/username/www/example.com/ /home/username/public_html

Tuto RSYNC : rsync -chazP -e "ssh -p 22" RemoteUsername@hostname-ssh.another-easyhoster.com:/home/username/www/example.com/ /home/username/public_html
Le Terminal est accessible depuis l’interface de gestion de votre Hébergement cPanel. Vous pouvez y lancer votre ligne de commande RSYNC, car cet utilitaire est activé par défaut sur tous les hébergements EasyHoster.

Après l’exécution de cette commande rsync, il vous sera demandé de fournir le Mot de passe SSH de votre compte sur le serveur distant. N’oubliez pas que le Password reste invisible (noir) lors de la saisie.

Attention à respecter la syntaxe de RSYNC pour réaliser le transfert dans le bon sens ! En effet, pour éviter d’écraser les fichiers de votre site Web en production par du vide, rappelez-vous que la commande doit être écrite comme ceci :  rsync $source ⇨ $destination . Ceci est valable dans tous les cas, que vous utilisiez un serveur SSH distant, ou simplement un transfert local. Si vous inversez cet ordre dans votre commande, cela pourrait demander à RSYNC de purger tous vos fichiers, ou revenir à une ancienne rétention des fichiers. Faites toujours des sauvegardes de vos données avant ce type d’opération.

La ligne de commande rsync donnée en exemple ci-dessus ↑ a pour effet de se connecter en SSH sur le port 22 avec le Nom d’utilisateur RemoteUsername chez un Hébergeur distant, dont le serveur SSH est accessible via hostname-ssh.another-easyhoster.com.

Si votre Hébergeur utilise un autre port que 22, celui par défaut pour SSH, pensez à le spécifier dans votre ligne de commande : -e "ssh -p $PORT".

Cette commande va télécharger tous les fichiers et dossiers contenus dans /home/username/www/example.com/ et les déposer dans le répertoire du domaine principal EasyHoster /home/username/public_html.

Très important ! Veuillez noter la présence du signe  /  placé juste après le répertoire distant /example.com/. Celui-ci indique que vous allez aspirer tous les fichiers et dossiers contenus à l’intérieur du répertoire /example.com/*.
Si vous oubliez la slash de fin ( / ), c’est le répertoire  “example.com” qui sera copié et vous serez contraint de déplacer manuellement tous les fichiers et dossiers de  /example.com/*  vers  / .

Gardez à l’esprit l’importance de la slash ( / ) placée à la fin du chemin d’accès aux fichiers.

Ensuite, dans notre commande d’exemple ↑, vous constatez que plusieurs paramètres sont passés à rsync : -chazP -e "ssh -p 22". Nous les passons en revue ci-dessous.

  • -c, –checksum demande à rsync d’utiliser la somme de contrôle, au lieu de la date ou de la taille du fichier, pour vérifier si ce fichier a été modifié. En effet, par défaut, rsync détermine quels fichiers diffèrent entre les systèmes en vérifiant l’heure de modification et la taille de chaque fichier. Si la date ou la taille diffère entre les systèmes, il transfère le fichier. Cela ne nécessite donc que de la lecture d’informations sur les fichiers, ce qui est rapide pour RSYNC ! Mais cette méthode pourrait manquer des modifications inhabituelles qui ne touchent ni à la date, ni à la taille du fichier. Par contre, si -c ou –checksum est invoqué, RSYNC effectue une vérification plus lente mais complète, ce qui réduit le risque de manquer des fichiers modifiés.
  • -h, –human-readable demander à rsync d’afficher les résultats chiffrés dans un format plus lisible, ce qui ne mange pas de pain.
  • -a, –archive est à utiliser dans la plupart des cas. C’est un raccourci de tous ces paramètres -rlptgoD. Cette commande demande à rsync de faire un transfert récursif (il rentre dans tous les dossiers) et conserve tout ce qu’il trouve ou presque. Vous devriez l’utiliser dans la plupart des cas.
  • -z, –compress demande à rsync de compresser les fichiers avant le téléchargement sur le serveur EasyHoster. Grâce à son excellent taux de compression, cela réduit la quantité de données à transférer par le réseau. C’est donc plus rapide, en particulier avec les hébergements mutualisés limités en bande passante.
  • -P est un raccourci qui demande à rsync d’exécuter –partial et –progress. Son but est d’améliorer la continuité des longs transferts qui risqueraient d’être interrompus.
    –partial : empêche rsync de supprimer tout fichier partiellement transféré quand un processus est interrompu. En effet, parfois il est préférable de conserver les fichiers partiellement transférés, car leur utilisation ultérieure pourrait accélérer la fin du transfert du fichier, lorsque celui-ci reprendra.
    –progress : cette option demande à rsync de, si possible, afficher les informations de progression du transfert, pour vous donner quelque chose à regarder, et vous assurer que le transfert ne s’est pas interrompu. Mais pour cela, le mieux est encore d’ajouter le paramètre –verbose à votre commande.
  • -v, –verbose (si nécessaire, à ajouter vous-même à la commande), ce paramètre demande à rsync d’afficher toutes les informations sur les fichiers en cours de transfert. L’inconvénient est que cela va rapidement afficher des milliers de lignes dans votre Shell, ce qui pourrait par exemple ralentir votre Terminal cPanel. Si vous êtes pressé, il est peut-être plus prudent de se passer de Verbosité et simplement patienter en allant prendre un café.
    Pour rappel, puisque RSYNC réalise des copies incrémentielles, il est rapide de relancer un transfert qui reprendra plus ou moins là où il s’était interrompu, en vue d’obtenir une copie parfaite des fichiers distants 
  • -e spécifie à rsync quel shell distant doit être utilisé. Donc -e "ssh -p 22" utilisera le shell SSH sur le port 22.
    Si votre hébergeur utilise un autre port SSH que 22, celui par défaut, n’oubliez pas de le préciser dans votre ligne de commande rsync.

Pour rappel, voici la commande rsync à adapter selon vos besoins.

rsync -chazP -e "ssh -p 22" RemoteUsername@hostname-ssh.another-easyhoster.com:/home/username/www/example.com/ /home/username/public_html

Dans ce cas ci, notre volonté était de télécharger les fichiers depuis un serveur distant, vers un Hébergement Web EasyHoster, mais vous pouvez tout à fait transférer des fichiers avec rsync, dans un sens comme dans l’autre. Pour cela, il vous suffit d’adapter votre ligne de commande  rsync .

N’hésitez pas à réaliser vos propres tests, mais n’oubliez pas de toujours créer des sauvegardes fiables de vos données avant de lancer la commande RSYNC.

Ci-dessous, nous listons quelques questions qui ont été posées à notre support technique, concernant rsync.

Migrer la base de données MySQL suite au transfert des fichiers avec RSYNC

RSYNC est la technologie idéale pour réaliser des migrations rapides de vos fichiers.

Cependant, il manque un élément crucial pour que la migration du site soit complète… c’est la base de données MYSQL !

Pour apprendre à Exporter, Transférer et Importer une base de données MYSQL dans les règles de l’art, rapidement et sans les Time out de phpMyAdmin, nous vous recommandons la lecture de ce billet :

  Comment exporter, transférer et importer une base de données MySQL comme un PRO ? →

Un peu sur le même principe que ce Tutoriel RSYNC, dans le Tutoriel MySQL proposé ci-dessus, nous utilisons un Dump MySQL en ligne de commande pour nous faciliter la tâche et surtout, gagner du temps.

Si vous parvenez à maîtriser ces méthodes de Transfert de fichiers via RSYNC et l’Export MySQL en ligne de commande (mysqldump), cela signifiera que vous êtes capable de migrer des sites Web de façon professionnelle.

Connecter un site WordPress à la base de données MySQL après le transfert via RSYNC

Connexion MySQL et fichier wp-config.php

N’oubliez pas de modifier votre fichier wp-config.php avec les coordonnées de votre base de données MySQL.

Voici où retrouver les identifiants MySQL d'un site WordPress dans le fichier wp-config.php, depuis un Hébergement cPanel !
Dans le fichier wp-config.php, les constantes DB_NAME, DB_USER, DB_PASSWORD et DB_HOST permettent à WordPress de se connecter à votre Base de données MySQL.

Vous le savez… sans connexion à la base de données du site WordPress, pas de site Web ! 😉

Lorsque vous transférez manuellement les fichiers d’un site WordPress, rsync va également aspirer le fichier wp-config.php et les informations qu’il contient. Pour votre serveur Web, le fichier wp-config.php de votre site WordPress, c’est la porte d’entrée vers votre Base de données, où toutes vos pages, vos articles, vos produits ainsi que la configuration de votre thème et vos plugins sont enregistrés.

En effet, c’est dans le fichier wp-config.php que sont stockés vos Identifiants MySQL : serveur, username, database name mot de passe, etc.

Il est donc important de ne pas oublier ces étapes :

  1. Créer une base de données pour votre site WordPress (voir point précédent)
  2. Importer les données de WordPress dans la nouvelle Database
  3. Mettre à jour les coordonnées de connexion MySQL dans le fichier wp-config.php

Comme vous pouvez le constater si vous expérimentiez une Erreur MySQL de type “Error Establishing a Database Connection”, suivre les 3 étapes précédentes est la solution ! Si vous êtes client EasyHoster et si vous éprouvez des difficultés pour connecter votre Base de données à WordPress, n’hésitez pas à demander assistance au support technique.

Questions fréquentes sur RSYNC

Comment copier un dossier ou un répertoire avec RSYNC ?

RSYNC est un excellent outil pour copier des fichiers et des répertoires de façon sécurisée. Il peut même être utilisé pour copier des fichiers et des répertoires locaux vers des serveurs distants et vice versa. Voici un exemple de ligne de commande locale : rsync -avz /local/old-directory /local/new-directory. Le paramètre -a conserve les dates et les permissions des fichiers/dossiers. Autre exemple : rsync -avz /local/directory user@remotehost.com:/remote/directory. Cette seconde ligne de commande copiera l’intégralité du répertoire local sur le serveur distant via SSH.

Comment transférer des fichiers entre deux serveurs avec RSYNC et SSH ?

RSYNC est un outil puissant et polyvalent qui peut être utilisé pour synchroniser des fichiers entre deux serveurs. Pour cela, il existe plusieurs façons d’utiliser RSYNC pour transférer des fichiers entre serveurs, en ligne de commande et au travers du protocole SSH. Sur certains hébergements, il vous faudra spécifier l’option -e et le chemin d’accès à l’exécutable SSH. Par exemple : rsync -e "/chemin/vers/ssh" user@example.com:/source/directory /destination/répertoire.

Quel est le port par défaut de RSYNC sur serveur Linux et SSH ?

Le port par défaut pour RSYNC sur Linux et les serveurs SSH est 22. Sachez que si vous êtes par exemple l’heureux locataire d’un serveur dédié ou VPS, il est possible de changer le port par défaut de RSYNC sur votre serveur Linux ou SSH. Cela peut se faire dans le fichier /etc/ssh/sshd_config de votre serveur Linux. Il s’agit d’un processus facile et indispensable pour contrecarrer toute tentative malveillante d’accès à votre serveur. Assurez-vous donc d’avoir modifié le port par défaut de SSH et donc de RSYNC.

Avez-vous des exemples pratiques de lignes de commande RSYNC sur Linux ?

Par exemple, la ligne de commande : rsync -avz /home/user/folder1 /home/user/folder2 copiera récursivement le contenu du dossier1 vers le dossier2, en préservant les permissions, la propriété et l’horodatage des fichiers (-a) et en utilisant la compression (-z) pour le transfert. Vous pouvez supprimer -v pour éviter l’affichage du mode verbose. Ensuite, autre exemple, la ligne de commande : rsync -avz /home/user/folder1 user2@server:/home/user2/folder1 copiera le contenu du dossier 1 de l’ordinateur local vers un serveur distant, en préservant les permissions, etc.

Comment créer des sauvegardes ou des backups incrémentiels avec RSYNC ?

RSYNC fonctionne très bien pour créer des sauvegardes incrémentielles, ce qui signifie qu’il ne copie que les fichiers qui ont été modifiés depuis la dernière sauvegarde. C’est cela qui rend RSYNC si rapide pour créer plusieurs rétentions de sauvegardes quotidiennes. De plus, cela permet d’économiser de l’espace de stockage, car tous les fichiers n’ont pas besoin d’être copiés à chaque sauvegarde.
Voici un exemple de ligne de commande : rsync -av source destination. Cette commande copiera tous les fichiers du répertoire “source” vers le répertoire “destination”. L’option ‘a’ correspond au mode archive, qui préserve les permissions des fichiers et autres métadonnées, tandis que l’option -v active le mode verbose pour vous permettre de voir ce qu’il se passe pendant la copie.

Comment exclure un dossier ou un répertoire lors d’un transfert RSYNC ?

Il existe un moyen très simple d’exclure des dossiers/répertoires ou fichiers lors d’un transfert via Rsync. Il s’agit d’utiliser l’option --exclude.
Attention au chemin d’accès aux fichiers/répertoires à exclure :
Dans la commande suivante, nous allons exclure le répertoire ‘/home/user1/temp/’ de notre commande. Pour cela, imaginons que notre commande Rsync concerne le Chemin d’accès ‘/home/user1/’. Lorsque vous utilisez --exclude, tous les fichiers et répertoires à exclure devront l’être grâce à des Chemins relatifs. Par exemple, pour exclure le répertoire ‘/home/user1/temp/’, vous devriez mentionner uniquement ‘temp’ dans la commande suivante :
rsync -av --exclude 'temp' /source /destination
Dans la commande ci-dessus, cela fonctionne exactement comme si ‘/home/user1/’ précédait déjà ‘temp’.
Exclure plusieurs répertoires de la commande Rsync :
Pour cela, vous pouvez spécifier plusieurs --exclude. Par exemple, pour exclure les répertoires ‘/home/user1/temp_1/ et ‘/home/user1/temp_2/’, vous devriez utiliser la commande suivante :
rsync -av --exclude 'temp_1' --exclude 'temp_2' /source /destination
Attention, si vous ajoutez une astérisque /* à cette commande, vous allez exclure le contenu du répertoire ‘temp_1’, mais pas le répertoire lui-même :
rsync -av --exclude 'temp_1/*' /source /destination
Exclure des fichiers du transfert Rsync :
Pour exclure un fichier spécifique, tout comme pour les répertoires, transmettez le Chemin relatif du fichier à l’option --exclude. Ci-dessous, c’est ‘/home/user1/temp_1/uploads/fichier.txt’ qui sera ignoré pendant le transfert :
rsync -av --exclude 'temp_1/uploads/fichier.txt' /source /destination
Exclure massivement un groupe de fichiers ou de répertoires :
Puisque nous sommes sous Linux, il existe bien sûr la possibilité d’exclure des groupes de fichiers ou répertoires en fonction d’un Pattern de type Regex. Nous pourrions, par exemple, exclure tous les fichiers *.zip. Pour cela, nous utilisons le caractère joker * (astérisque) qui signifie “tout et n’importe quoi” en informatique :
rsync -av --exclude '*.zip' /source /destination
Autre possibilité, nous pourrions exclure tous les contenus des dossiers de cache WordPress d’un compte d’hébergement contenant plusieurs installations WP :
rsync -av --exclude '/wp-content/cache/*' /source /destination
Enfin une explication claire sur la manière d'exclure wp-content/cache wp-rocket de ses backups Rsync !

Si vous ne deviez retenir qu’une seule explication sur les « Exclusions » de répertoires avec Rsync, cela serait celle qui suit… Le répertoire à exclure doit être « relatif » au chemin renseigné comme point de départ de la sauvedarde. Autrement dit, si vous démarrez votre backup Rsync dans /home/user/public_html/, le dossier à exclure “/wp-content/cache/*” devrait être renseigné comme si la slashe de fin, après « public_html/« , était la racine absolue de dans votre système cloisonné par Rsync… exactement comme pour un serveur Web où le signe « / » indique qu’on démarre à la racine.

Exclure une longue liste de fichiers et répertoires du transfert Rsync :
Pour terminer, veuillez noter qu’il existe la possibilité d’utiliser l’option --exclude-from auquel passer le chemin d’un Fichier Texte dans lequel vous auriez construit votre liste d’exclusions (une par ligne). Dans cette commande --exclude-from, notez la présence du signe « = » (égal).
rsync -av --exclude-from='temp_1/uploads/liste.txt' /source /destination

Comment passer un mot de passe ou un password via un fichier dans la commande RSYNC ?

Lorsque vous exécutez la commande rsync, vous pouvez avoir besoin de spécifier un mot de passe stocké en texte brut, mais dans un fichier sécurisé. Pour ce faire, utilisez l’option --password-file. Par exemple, si votre mot de passe est stocké dans « password.txt », vous pouvez utiliser la commande suivante : rsync --password-file=password.txt /source/directory /destination/directory.
Ce fichier de type password.txt pourrait être utilisé à l’exécution d’un script bash. Bien sûr, pour maintenir le mot de passe RSYNC en sécurité, il est important de définir le fichier sur un chmod 600 pour les permissions et afin d’éviter que n’importe quel utilisateur Linux puisse accéder au fichier. Enfin, si pour plus de sécurité, vous ne souhaitez pas stocker le mot de passe dans un fichier, vous pouvez utiliser l’option --ask-password. Celle-ci vous demandera le mot de passe lorsque vous exécuterez la commande.

Comment résoudre une Erreur 403 “You don’t have permission…to read htaccess file” après une migration RSYNC ?

Si vous effectuez un transfert avec RSYNC depuis des systèmes différents (par exemple, depuis un Hébergement mutualisé OVH vers un Hébergement cPanel), il est possible que vous rencontriez l’erreur suivante sur votre site : « You don’t have permission to access this resource. Server unable to read htaccess file, denying access to be safe. Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request ». Vous pouvez retrouver plus d’informations au sujet de cette erreur dans le fichier error_log présent à la racine de votre site, ou si vous êtes propriétaire d’un serveur dédié, via /etc/apache2/logs/error_log. L’erreur 403 “cannot read htaccess” signifie que votre serveur ne peut lire ou exécuter votre fichier .htaccess, car ce fichier ou son Répertoire Parent n’ont pas les bons “chmod” (droits Linux) ou les bons “chown” (propriétaire et groupe Linux).
Sur la capture d’écran ci-dessous, vous pouvez voir que le répertoire /exemple-erreur.com/ est configuré sur un chmod de 705, alors pour ce dossier Web Root, le “chmod” devrait être configuré sur 750 (comme pour le répertoire /exemple-correct.com/), afin d’éviter les erreurs, tout en conservant une bonne expérience avec cPanel.Erreur 403 après rsync vers hébergement cPanel : cannot read htaccess

Comment se connecter en FTP classique via ligne de commande depuis un serveur SSH/cPanel tiers ?

Pour cela, rien de plus simple. Si vous disposez d’un serveur dédié ou VPS avec un accès à la commande “ftp”, il vous suffit de lancer la commande ftp ftp.example.com via votre Terminal ou shell SSH. Ensuite, le serveur Linux vous demandera de renseigner votre username et votre password. Vous serez ensuite en mesure de lancer toutes les lignes de commande relatives à l’utilitaire ftp.

Comment télécharger mes fichiers en ligne de commande via FTP ?

Dans le cas où votre hébergement n’inclurait ni Rsync ni SSH, il vous est possible d’obtenir un fonctionnement similaire, bien que moins fiable et performant. Il s’agirait de télécharger tous vos fichiers et répertoires, grâce au Protocole FTP classique.
La commande FTP fonctionne assez mal pour le téléchargement récursif des fichiers et dossiers. Cependant, alliée à la commande de transfert WGET, le protocole FTP peut donner des résultats satisfaisants pour le téléchargement d’un site au complet.
L’opération sera donc à réaliser en ligne de commande (CLI), comme vu précédemment et devra allier les commandes WGET et FTP.
Ci-dessous, nous allons adapter une Commande Linux (CLI), pour télécharger l’ensemble des fichiers et dossiers d’un compte d’hébergement via FTP.
Voici l’exemple simple qui vous permettra de comprendre la logique de cette commande où WGET va aspirer tout le contenu du compte FTP (exemple avec cluster OVH) :
wget -m ftp://$USER:$PASSWORD@ftp.cluster015.ovh.net
Pour des raisons de sécurité, veuillez cependant privilégier le paramètre --ask-password afin que le mot de passe FTP du précédent hébergeur n’apparaisse pas dans votre historique. Il peut également être nécessaire de passer le nom d’utilisateur via le paramètre --ftp-user, par exemple, s’il s’agit d’un compte FTP secondaire créé via un compte cPanel o2switch et contenant le caractère @ pouvait faire échouer la commande.
Si nécessaire, entrez d’abord dans le dossier où vous désirez télécharger le répertoire grâce à la commande cd, exemple :
cd public_html
Voici donc l’exemple de la commande finale, combinant ces 2 paramètres, pour télécharger tout le compte FTP (depuis la racine) :
wget -m --ftp-user="user@example.com" --ask-password ftp://ftp.username.o2switch.fr
Pour télécharger uniquement un sous-dossier, adapté la commande en ajoutant celui-ci au chemin d’accès (path), comme ci-dessous :
wget -m --ftp-user="user@example.com" --ask-password ftp://ftp.username.o2switch.fr/example.com/

Maintenant, rsync n’a plus aucun secret pour vous…

Non mais… 😊 en réalité, maîtriser RSYNC entièrement demanderait des semaines d’étude et de tests.

Par contre, maintenant, vous avez toutes les cartes en main pour réaliser des Migrations de sites Web rapides, grâce à RSYNC et SSH 😃

C’est déjà pas mal du tout, puisque maintenant, vous allez pouvoir économiser un temps fou pour presque toutes vos migrations !

Bien sûr, si vous avez besoin de plus de soutien pour maîtriser RSYNC, n’hésitez pas à rentrer en contact avec votre support EasyHoster. Nous nous ferons un plaisir de vous épauler avec RSYNC 😉

Si vous n’êtes pas encore client EasyHoster, peut-être êtes-vous à la recherche d’un Hébergeur Web qui est Bien plus qu’un Hébergeur ? Dans ce cas, bienvenue chez EasyHoster ! 🍌 N’hésitez pas à prendre contact avec notre service commercial pour discuter de vos besoins et réclamer la Migration Gratuite de votre site WordPress →

Sommaire de ce billet
Besoin d'aide ?

Le site WordPress speed.easyhoster.net ➚ permet de tester le potentiel des solutions d'Hébergement Web EasyHoster.