Migrer wordpress d’un serveur à un autre – Pense-bête 14


Si on veut changer de serveur sans se taper la réinstall de wordpress ça peut devenir casse-tête si on oublie deux trois trucs…

Voici un petit pense-bête avec pour exemple une config Nginx / WordPress / php5-cgi sur Ubuntu.

serveura.com = serveur sur lequel se trouve l’ancien WordPress à migrer
serveurb.com = nouveau serveur qui va accueillir WordPress

1. on sauve la db et on l’upload sur le nouveau serveur (on peut le faire à la fin si le blog a pas mal d’activité)
Sur le serveur A:

mysqldump -u user_toto -ppass_toto base_a_toto > /tmp/base_a_toto.sql
rsync -P -azc /tmp/base_a_toto.sql user@serveurb.com:/tmp/base_a_toto.sql

2. On copie wordpress sur le nouveau serveur
Sur le serveur A:

rsync -P -azc /home/monsite/wordpress/ user@serveurb.com:/home/monsite/

3. Setup et configuration du nouveau serveur
Sur le serveur B:
Installer les packets necessaires:

apt-get install php5-cgi php5-mysql mysql-server nginx spawn-fcgi sendmail

Il faut lancer les services nginx et spawn-cgi (pour ce dernier on peut utiliser supervisord)

Nginx:
Editer le fichier /etc/nginx/conf.d/monsite.conf . Attention à bien indiquer le chemin absolu vers votre site pour root

server {
    listen      80;
    server_name  monsite.com www.monsite.com;                   # your domain name
    root         /home/monsite/wordpress;  # absolute path to your WordPress installation
    index index.php index.html;
 
    error_log "/var/log/nginx_error.log";
    access_log  "/var/log/nginx_access.log";
 
    try_files $uri $uri/ /index.php;
 
    location ~ \.php$ {
        include        /etc/nginx/fastcgi_params;
        fastcgi_pass   127.0.0.1:53217;
        fastcgi_index index.php;
        fastcgi_buffers 8 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
 
location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
}
 
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
}
 
# Deny access to any files with a .php extension in the uploads directory
location ~* ^/wp-content/uploads/.*.php$ {
        deny all;
        access_log off;
        log_not_found off;
}
 
# Deny access to any files with a .php extension in the uploads directory for multisite
location ~* /files/(.*).php$ {
        deny all;
        access_log off;
        log_not_found off;
}
 
}

Spawn-Fcgi: C’est lui qui va lancer php5-cgi pour faire la liaison entre php et nginx. on va le lancer avec supervisor comme si c’était un service mais mieux.

Installation de Supervisor:

apt-get install python-setuptools
easy_install supervisor
echo_supervisord_conf > /etc/supervisord.conf

Editez le fichier /etc/supervisord.conf pour y rajouter spawn-fcgi, c’est mieux de lancer php5-cgi avec un user autre que root (www-data ou autre) :

[program:php5-cgi]
command=/usr/local/bin/spawn-fcgi -n -a 127.0.0.1 -p 53217 -u www-data -f /usr/bin/php5-cgi
redirect_stderr=true 
stdout_logfile=/var/log/php5-cgi.log
stdout_logfile_maxbytes=10MB

Pour lancer Spawn-fcgi:

supervisorctl restart php5-cgi

Mysql: on ajoute mysql au demarrage et on le lance

chkconfig mysql on
service mysql start

Dump de la DB: il faut créer un user et une base sur la nouvelle install, si possible le même que sur l’ancien serveur pour faciliter la transition.
Sur le serveur B:

mysql -u root -prootpass
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)
 
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> create database base_a_toto;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON base_a_toto.* TO "user_toto"@"localhost" identified by "pass_toto";
 
Query OK, 0 rows affected (16.16 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Et on importe la base de données de serveura.com:

mysql -u user_toto -ppass_toto base_a_toto < /tmp/base_a_toto.sql

4. Changer les dns
des fois on oublie :) alors changez les dns et attendez un peu, normallement ça devrait crystalliser…

Ca prend pas 5 minutes, même avec les paquets tous prêts. on peut avoir de mauvaises surprises en route. Moi par exemple erreur 500 , pour m’aperçevoir au bout de 2 heures que j’avais pas installé php5-mysql d’où ce tuto ;)

14 thoughts on “Migrer wordpress d’un serveur à un autre – Pense-bête

  • Sam

    Je me rappelais pas qu’on avait un service dans supervisord pour faire le pond avec nginx. Logique, nginx c’est que du statique.

    • Max Post author

      @Freak0

      Je savais même pas qu’il y avait une fonction d’import, j’avais dis que je ferais ça comme un porc, de plus ça marche jamais ces trucs, toujours des probs de droits, de cnx ou alors faut installer un client ftp etc…

      PS:Mon 2eme prénom c’est Brutos

  • foxmask

    @freak0 bizarrement j’aurai fait pareil pour ne pas avoir à réinstaller le site. je pense que la fibre “de l’admin” se sent plus confiant de cette façon que de faire confiance à un import/export de wordpress, sans vouloir troller du tout ;)

  • Freak0

    Bah en fait vous re-déployez une version vide du WP, avec rsync, et au lieu de dumper la base, vous utilisez le système d’import/export.

    Je l’ai déjà fait à plusieurs reprises et ça marche pas mal. Évidement, les thèmes étaient des thèmes standard, légèrement modifié.

    • Max Post author

      ouais j’ai spawn-fcgi qui saute des fois chais pas pourquoi, d’après certains sites web c’est plus du à une erreur php qu’autre chose alors ça me fait un peu chier car pas evident à debug. Si ça merde trop je testerai php-fpm. Comme disait Picasso quand j’ai pas de rouge je met du bleu…

    • Max Post author

      ouais ça serait mieux de limiter à insert, delete et chais plus quoi :)

Leave a comment

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.