Tutoriel : transférer un site entre deux serveurs

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. ;)

Catégorie Tutoriels - Écrit par le 10/03/2015 - Article lu 1 251 fois - 7 commentaires

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é

Écrit par 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 ! :)

Écrit par Hervé
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.

Tu peux faire avec du rsync aussi, c'est un peu plus évolué que scp (mais pas forcément utile pour des besoins basiques). Je m'en suis beaucoup servi pour faire de la réplication de serveurs il y a quelques années.

Écrit par Franck du site http://www.seo.fr/
Le 12/03/2015 à 00h01

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.

Écrit par Hervé
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. ;)

Les commentaires de ce billet sont fermés

Haut de page