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 ;)
Je me rappelais pas qu’on avait un service dans supervisord pour faire le pond avec nginx. Logique, nginx c’est que du statique.
Et les fonctions d’import/export sur WordPress ne vous plaisaient pas ?
@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 ;)
C’est plus long: post + comment + plugins + themes + customisation du code = gros calvaire.
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é.
Le premier rsync, ne devrait-il pas être :
rsync -P -azc /tmp/dbase_a_toto.sql user@serveurb.com:/tmp/base_a_toto.sql
@cricri
ouais corrigé merci ;)
@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
et sinon vous le trouvez pas plus rapide S&M ? moi je trouve que ça va plus vite.
Oui, c’est plus rapide, pas de doute.
PS:
J’ai encore eu une 502 il y a 5 minutes sur l’article sur path.py
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…
Génial!
Ca : “GRANT ALL PRIVILEGES ON…” c’est sale ;p
ouais ça serait mieux de limiter à insert, delete et chais plus quoi :)