X-Space

Aller au contenu | Aller au menu | Aller à la recherche

Comment migrer un site web?

Hier matin, j'ai procédé à la migration d'un site web, hébergé jusqu'alors en mutualisé, vers mon serveur. A ce propos plusieurs questions se sont posées:

  • Comment importer directement le contenu du ftp?
  • Comment modifier massivement et le plus simplement possible les liens présents à la fois dans les fichiers et dans la base de donnée?
  • Voici les solutions que j'ai adoptées.


Etat des lieux

  • Contenu: un forum phpBB
  • Base de donnée: 74 Mo
  • FTP: 141 répertoires, 3558 fichiers, 440 Mo
  • Ancien Domaine: www.clan-cyber-addict.com
  • Nouveau Domaine: www.cyber-addict.fr
  • Ancien Hébergeur: Accès FTP uniquement
  • Nouveau Serveur: Accès SSH, FTP..


Etape 1: Transférer les fichiers

La solution la plus simple mais la plus fastidieuse aurait été d'utiliser mon PC pour faire transiter les fichiers. Si je n'avais pas un accès administrateur sur le serveur, cela aurait été la seule solution envisageable. Mais grace à mes privilèges, j'ai choisi de transférer directement les fichiers sur le serveur avec la commande FTP. Mais ftp n'est pas récursif et donc ne permet pas en une seule commande de tout télécharger. TitaX, que je remercie, m'a fait part de la solution LFTP qu'il utilise lui même pour effectuer des sauvegardes (voir ici ). Et le transfert s'est effectué automatiquement avec la seule commande suivante:

lftp -u utilisateur,mot_de_passe -e "mirror www/ -v; quit" ip_du_ftp_distant
3076 secondes (139.8Ko/s)


Etape 2: Transférer la base de donnée SQL

Pas de solution miracle: Export via phpMyAdmin, upload sur le ftp et injection avec la commande suivante ( une fois connecté au serveur SQL):

source nom_du_fichier.sql


Etape 3: Editer les liens dans les fichiers.

Le gros problème, ici, est de trouver les fichiers concernés, pour cela utilisons la commande find couplé à grep.

find . -exec grep "clan-cyber-addict.com" '{}' \; -print
Ceci nous renvoie la liste des fichiers ou est trouvé la chaine "clan-cyber-addict.com". Cela renvoie aussi la ligne concernée. Ensuite il nous reste plus qu'a éditer les liens concernés. Afin de bien vérifier ce que je modifiais j'ai modifié manuellement les liens. J'aurais aussi pu utiliser la commande sed. Ce qui aurait donné grossièrement:
sed -e 's/clan-cyber-addict.com/cyber-addict.fr/g' nom_du_fichier


Etape 4: Editer les liens dans la base de données SQL.

Dans ce cas la, se posent plusieurs problèmes:

  • 1° Dans quel cas modifier le lien, une modification automatique peut casser le sens?
  • Comment modifier massivement les liens avec MySQL?

1°: Dans un premier temps éditons automatiquement les choses dont nous sommes sur! phpBB utilisant du BBcode, j'ai lié des balises avec des liens.

  • %[url=http://www.clan-cyber-addict.com%
  • %[url=http://clan-cyber-addict.com%
  • %[url]http://www.clan-cyber-addict.com%
( % signifie pour SQL "n'importe quoi", sans cela la recherche ne renverrait que les champs ne contenant que le motif et uniquement lui. ) Se pose un autre problème phpBB ajoute à la ballise BBcode img un identifiant unique. ( [img:blabla26] ) Ce qui complique la chose. Toutefois, il est peu probable que un utilisateur poste le lien brute avec les http:// donc recherche de: %http://www.clan-cyber-addict.com%.

2°: Maintenant que nous avons les résultats, comment les corriger?
Via script php? Cette solution me paraissait évidente au départ mais il s'est posé le problème des quote / double quote ce qui compliquait la chose.
La solution que j'ai utilisé relève donc plus du bricolage qu'autre chose mais s'est révélé efficace:

  • Export des résultats SQL renvoyés par un SELECT. Cela renvoie l'ensemble des enregistrements sous la forme INSERT INTO .... Il ne reste plus qu'a modifier automatiquement la structure de la requête afin de réinjecter le tout à la fin. L'utilisation de UPDATE étant trop compliqué car demandant une modification complète de la syntaxe, j'ai trouvé REPLACE qui fonctionne exactement comme le INSERT. Il m'a suffit juste de remplacer tous les INSERT par des REPLACE ainsi que d'éditer les liens puis de réinjecter cela dans SQL.


Etape 5: Boire une bière.

Ca y est c'est fini. :-)

Commentaires

1. Le dimanche, avril 9 2006, 23:21 par Mekza

Et encore t'as voulus te servir de cette super commande qui est rsync :). A savoir que tu peux utiliser rsync pour tout ftp, nfs, etc et a travers tout.

2. Le lundi, avril 10 2006, 21:40 par TitaX

superbe tuto, ca va bcp servir j'en suis certain !!!

3. Le mercredi, avril 12 2006, 15:35 par Mdz

J'ai bu la bière en premier moi, j'espere que c'est pas trop grave :x

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet