Tutoriel : transférer un site entre deux serveurs
Lorsque l'on change de serveur, l'une des parties les plus contraignantes est le transfert des données. Selon le nombre de sites et leur nature, il peut y avoir plusieurs centaines de Mo à déplacer, voire plusieurs Go. Voici une méthode claire et rapide pour transférer tous les sites.
SSH, l'arme fatale pour le transfert
Certains de vous pourraient me dire qu'il suffit de transférer les fichiers via FTP et d'importer la BDD depuis phpMyAdmin. Oui c'est faisable mais prenons le cas d'une boutique Prestashop avec plusieurs centaines de fiches produits. Avec 3/4 images par fiches, on peut estimer sans problème à 600 ou 700 Mo de fichiers à déplacer.
Pour gagner du temps, on va se connecter en SSH sur le serveur où se trouvent les fichiers du site, la base de données et les e-mails. Si vous avez suivi mon tutoriel sur l'installation d'un serveur Debian, il est nécessaire de faire une modification avant de commencer le transfert. En effet, il faut absolument avoir les droits en root pour copier les fichiers sur le nouveau serveur.
Ouvrez le fichier de configuration SSH :
$ nano /etc/ssh/sshd_config
Modifiez les champs suivants :
Port 22 # Interdire l'acces en root PermitRootLogin yes # Nom de l'utilisateur #AllowUsers NOM_UTILISATEUR
Redémarrez le service :
$ service ssh restart
Ouvrez le fichier de configuration du firewall :
$ nano /etc/init.d/firewall
Et modifiez la valeur du port SSH comme ceci :
# SSH iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
Il faut redémarrer le firewall pour la prise en compte :
$ /etc/init.d/firewall stop $ /etc/init.d/firewall start
Nous sommes prêts à transférer les données avec deux fenêtres ouvertes dans votre logiciel SSH : une pour l'ancien serveur, une pour le nouveau.
Transfert des fichiers du site
Nous commençons par transférer les fichiers du site. Je pars du principe que le domaine est installé et que le dossier de destination est créé sur le nouveau serveur. On exécute la commande suivante dans l'onglet de l'ancien serveur. Il est important d'indiquer les valeurs -r (récursif sur tous le dossier) et -p (conservation de la date) :
$ scp -r -p /home/dossier/www/ root@IP_NOUVEAU_SERVEUR:/home/dossier/www/
Le mot de passe root vous est demandé. Il faut indiquer celui du nouveau serveur et valider avec la touche entrée pour que le transfert commence. Normalement, il ne faut que quelques minutes pour que la tâche s'exécute. Cela aurait pu prendre plusieurs heures en FTP selon la vitesse de connexion de votre box.
Pour vérifier que les fichiers sont bien transférés, placez sur l'onglet du nouveau serveur et tapez la commande suivante :
$ ls -la /home/dossier/www/
Vous devriez obtenir la liste des fichiers et des dossiers à la racine du site avec la date d'origine de création (ou dépôt sur le FTP).
Il faut maintenant modifier les droits des fichiers puisqu'ils ont été copiés avec les droits root :
$ chown -R NOM_UTILISATEUR:NOM_GROUPE /home/dossier/www/
Tapez de nouveau la commande suivante pour vous assurer que les droits ont correctement été modifiés :
$ ls -la /home/dossier/www/
Transfert de la base de données
Dans certains cas, exporter et importer une base de données peut être une vraie galère. Là aussi, nous allons la transférer via SSH pour gagner du temps.
Dans un premier temps, il faut repérer l'emplacement des bases sur les deux serveurs via la commande suivante :
$ find / -name "NOM_BASE"
Maintenant que l'on connait le chemin de MySQL sur les deux serveurs, on peut transférer notre base. Là aussi, vous devez avoir créé l'utilisateur dans phpMyadmin :
$ scp -r -p /CHEMIN_MYSQL/NOM_BASE/ root@IP_NOUVEAU_SERVEUR:/CHEMIN_MYSQL/NOM_BASE/
On donne les bons droits aux fichiers MySQL sur le nouveau serveur :
$ chown -R mysql:mysql /CHEMIN_MYSQL/NOM_BASE/
Connectez-vous à phpMyAdmin pour vérifier que toutes vos tables ont été correctement copiées.
Transfert des e-mails
La dernière partie concerne les e-mails qui sont stockés sur le serveur. Si le compte est en imap, cela peut aisément se compter en Go. A moins d'avoir des heures à perdre (voir des jours), SSH va être très utile. Encore une fois, vous devez créer les adresses e-mails sur le nouveau serveur pour pouvoir les déplacer.
$ find / -name "DOMAINE.COM"
Personnellement je préfère transférer les e-mails, adresse par adresse. Je n'ai pas testé de basculer tous les e-mails d'un coup donc je vous laisse tenter l'expérience. :-)
Tapez la commande suivante :
$ scp -r -p /CHEMIN_EMAILS/DOMAINE.COM/DOSSIER/. root@IP_NOUVEAU_SERVEUR:/CHEMIN_EMAILS/DOMAINE.COM/DOSSIER/
Comme pour les sites et les bases de données, il faut modifier les droits des dossiers et fichiers des e-mails sur le nouveau serveur :
$ chown -R vmail:vmail /CHEMIN_EMAILS/DOMAINE.COM/DOSSIER/
Voilà, vous avez terminé le transfert de votre premier site en quelques minutes seulement. Il ne reste plus qu'à remettre les bonnes informations dans le fichier de configuration SSH et modifier le port dans le firewall comme expliqué au début de ce tutoriel.
Bon courage. ;)
7 réflexions sur ce billet
J'ai toujours eu pour habitude de transférer tout par FTP et de gérer la base avec phpMyadmin, je ne connaissais pas du tout cette technique. Je perds un temps fou au final ! Je testerai la prochaine fois pour gagner du temps :)
Merci beaucoup Hervé
Le 11/03/2015 à 13h16
Salut Fred
Je te comprends, je suis aussi passé par là. :-)
Merci pour ce tuto ! j'en ai passé du temps et des prises de têtes pour bien faire les transferts de serveur. Le SSH c'est top c'est clair, énorme gain de temps !
Par contre je me permets de préciser et de rappeler qu'en SSH la moindre erreur de syntaxe peut-être fatal ! Attention aux débutants, on ne s'improvise pas Sys admin ! Un chown mal placé par exemple :)
Je l'ai déjà fait sur tout un serveur au lien d'un dossier, ça fait mal quand on a plusieurs sites déjà en prod ! :)
Le 11/03/2015 à 14h38
Salut Luc
Merci pour ton commentaire. C'est clair qu'il faut se relire avant de valider une commande.
J'irais même plus loin que toi encore. J'ai pris un serveur chez Online à 5,99 € par mois juste pour faire des tests et m'amuser avant de mettre un service en place sur mes serveurs de production.
Cela permet de roder chaque procédure afin de prendre le moins de risques possible.
Pas plus tard qu'avant-hier, j'ai installé DKIM sur mon serveur de test avant de le déployer, 24h plus tard, sur les serveurs de production afin de m'assurer que rien ne plantait avec Postfix ou Dovecot.
Salut,
Sinon une méthode encore plus simple si Direct Admin est installé sur le serveur, tu créés un fichier de sauvegarde complet (site, images, mail) tu le transfères de serveur à serveur, et le restaures avec Direct Admin, ça prends quelques minutes :-)
Reste à changer les DNS et faire les contrôles d'usage.
Le 13/03/2015 à 00h23
@Jeromeweb : je n'ai jamais testé rsync. J'y jetterais un œil à l'occasion.
@Franck : c'est terminé pour moi les panels. Je préfère utiliser au maximum le SSH. ;)
La création de site Internet sur mesure est le coeur de métier de l'agence web Infini'click.
D'autres prestations sont également proposées, découvrez-les !
- Tutoriel : installer un serveur Debian (wheezy)
- Tutoriel : Installer un certificat SSL
- Piwik : monitorez tous vos sites discrètement
- Tutoriel Paypal : Intégration et configuration du paiement en ligne
- Tutoriel PayPlug : intégration au panier d'achat
- Référencement des images : l'état de l'art
- Des onglets en CSS avec JQuery
- Gildas le 04/03/2022 à 18:00
Nop j'ai que le require('fpdf.php) ; Mais pas... - Hervé le 04/03/2022 à 17:58
Gildas Tu n'appelles pas de fichier externe via un... - Gildas le 04/03/2022 à 17:50
merci de ton retour rapide, effectivement dans ma... - Hervé le 04/03/2022 à 17:45
Bonjour Gildas Effectivement, 8 ans ça fait un bail.... - Gildas le 04/03/2022 à 17:37
Bonjour Hervé, Bon j'arrive 8 ans après la... - Olivier le 16/01/2022 à 23:09
C'est clair que les actions réalisées ne correspondent...