Salut a tous, c’est parti pour la série de TP lié à la migration du site. Et donc pour bien commencer on va voir comment on peut backuper et restaurer le site pour réinstaller WordPress sur MySQL, PHP5-FPM et NGINX. En effet comme je l’annonçais dans ce premier billet j’ai changé le serveur web pour voir si l’herbe est plus verte chez nos amis russes que chez les indiens d’amérique chez NGINX que chez Apache. On verra plus tard pourquoi j’en ai profité utiliser la version FPM de PHP5 et pas le module intégré comme pour apache.
Tout ça se passe entre une Debian 7 et une 8, c’est pas très compliqué mais c’est assez long donc accrochez-vous.
Sauvegarde de l’ancien site
Avant de faire de tout ça et comme je changais de serveur, la première étape était de backuper l’ancien site. La bonne nouvelle c’est WordPress se sauvegarde très bien, j’avais scripté ça et mis le tout dans une crontab. Du coup le script de backup de wordpress est en 3 étapes :
# 1 - Nettoyer le répertoire de sauvegarde rm -f /path/to/backup/dir/backup_wordpress.tar.gz # 2 - sauvegarde des la base mysql mysqldump --opt -u <root_ou_userayantlesdroits> -p'<unGrosMot...dePasse>' '<nomDBMySQLWordPress>' > /path/to/backup/dir/db_wordpress.sql # 3 - Sauvegarde du site tar -cpzf /path/to/backup/dir/backup_wordpress.tar.gz /var/www/<votresite>
Et c’est tout ce qu’il faut, après il est possible d’ajouter d’autres options comme Gzippé le backup SQL ou regrouper vos 2 fichiers dans un seul « .tar.gz », voir pour finir uploader le tout vers un FTP(S) externe dans le cadre d’un plan de sauvegarde en bon et du forme. Mais avec notre fichier db_wordpress.sql et le zip de notre arborescence du site, on va s’en sortir.
Pour transférer le tout vers le nouveau serveur, un coup de SCP fera parfaitement l’affaire :
scp /path/to/backup/dir/{db_wordpress.sql,backup_wordpress.tar.gz} user@<IPnouveauserveur>:~
Migration de WordPress sur MySQL, PHP5-FPM et NGINX
Bon alors je pars du principe que le nouveau serveur est vierge de tout autre « trucs » que vous auriez pu installer. Donc on commence par les bases tant qu’on est serein :
#1 - assurer qu'on est à jour apt-get update apt-get upgrade apt-get dist-upgrade #2 - THE notepad vital apt-get install vim
Bon OK, y’a nano de base sur Debian aussi, mais si on commence comme ça autant mettre un Gnome à ce moment là…
MySQL
First Things First, il faut d’abord réinstaller notre serveur MySQL pour la base de donnée, et restaurer la base de wordpress dedans. Pour faire ça
apt-get install mysql
Répondez au question de l’installeur, ça va bien se passer. Il doit vous demander le mot de passe root et 2-3 questions pas trop techniques.
Ensuite on restaure notre base wordpress dans notre beau serveur MySQL tout neuf (qui sent bon la rose d’ailleurs).
mysql -u root -p #et saisissez votre mot de passe, restez pas planter là, hein...
Et puis dans la console mysql :
CREATE DATABASE <nomDBMySQLWordPress> ; exit;
Là on vient de recréer la base avec rien dedans. Il n’y a plus qu’a remettre nos données dedans, depuis votre bash :
mysql -u root -p <nomDBMySQLWordPress> < db_wordpress.sql #et il faudra saisir votre mot de passe ici aussi...
Ça va durer plus ou moins longtemps selon la taille de votre b… base, de votre base.
Il reste une dernière subtilité, récréer un utilisateur qui sera utilisé par le site et lui donner les droits sur la base. Alors les infos sur l’utilisateur qu’utilise wordpress sur MySql sont dans le fichier wp-config.php à la racine de votre site. Deux options :
- Soit vous reprenez les même informations, c’est pas sécu mais vous n’avez qu’a remettre le même couple user/motdepasse qu’avant et ça repartira comme en 40.
- Soit vous changez ces crédentials, mais il faudra modifier votre fichier wp-config.php (/var/www/wordpress/) un peu plus tard pour reporter ce changement (pas compliqué, plus sécu = « Geekeries.org approved »)
Dans les 2 cas, il faut initialiser un utilisateur dans MySQL :
> mysql -u root -p # je vous la refait pas pour le mot de passe ?
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<motdepasse>'; GRANT ALL PRIVILEGES ON wordpress.* TO '<nomDBMySQLWordPress>'@'localhost' FLUSH PRIVILEGES;
Et c’est bon pour MySQL.
Restaurer les fichiers de WordPress
Bon avant de configurer le serveur web on va restaurer notre backup des fichiers du site :
tar -xvf backup_websites.tar.gz # va restaurer touts l'arborscence dans le dossier courrant
Donc, on déplace tout ce petit monde au bon emplacement :
mv var/www/wordpress /var/www/
Et on enchaine sur PHP et NGINX.
PHP5-FPM
FPM pour FastCGI process manager, est une alternative empaquetant le PHP5 officiel mais ayant la particularité de tourner comme un service indépendant et pas comme un module du serveur web. Il intègre au passage quelques fonctionnalités cadeaux bien décrites sur le site officiel du projet.
Côté perf, je suis pas sur que mes 3 utilisateurs voit la différence mais bon… on sait jamais peut qu’un jour ce sera 30 000. Par contre en production dans une entreprise, la vous avez un vrai gain à séparer le serveur web du moteur PHP car si ça se met à « chier dans la colle » comme on dit : c’est toujours plus simple de démerdé 2 composants séparé que un gros tas qui mélange les deux.
Bref, let’s go :
apt-get install php5-fpm php5-mysql
On va dire à PHP5-FPM d’écouter non pas sur un port réseau localhost mais un (ou une?) socket Unix, c’est un poil (de cul) plus rapide. On fait ça en éditant le fichier /etc/php5/fpm/pool.d/www.conf et plus particulièrement la ligne suivante.
listen = '/var/run/php5-fpm.sock'
Noter pour finir qu’en tant que service on peut le redémarrer comme tel… et sans toucher au serveur web :
service php5-fpm restart
NGINX
Alors déjà : on dit « Engine X » (N-Gin-X), et pas hen-guinx.
- N comme, heu : (mod n) dans RSA.
- Gin, bein comme le Gin-tonic.
- Et X comme ! Non on va pas faire X en fait…
Bref NGINX s’installe comme MySQL et PHP5-FPM : bien.
apt-get install nginx service nginx stop
On le stoppe le service immédiatement car il a pas besoin d’être up le temps de la config.
Configuration de NGINX
On va commencer par dire à NGINX ou est-ce qu’il doit trouver PHP5-FPM, Pour ça créer le fichier /etc/nginx/conf.d/php5-fpm.conf et pointer un nouveau upstream vers la socket (on dit bien une chaussette, non? ) de PHP5-FPM :
upstream php5-fpm-sock { server unix:/var/run/php5-fpm.sock; }
Et c’est tout, NGINX utilisera le PHP5 fournie via cette socket.
Il nous faut ensuite configurer le site web dans NGINX, en soit c’est très simple et puis on va rajouter tout un tas d’options qui feront qu’a la fin ca ne sera plus si simple que ça… Bref, pour ça il faut créer le fichier /etc/nginx/sites-available/wordpress et le remplir comme ci dessous.
Je vous ai commenté chaque ligne pour expliquer « succinctement » a quoi elle sert :
#geekeries.org
server {
#écoute du le port 80 en IPv4 et IPv6, et
# il s'agit du site par défaut si la requête
# ne précise pas un site connu sur ce serveur.
listen 80 default_server;
listen [::]:80 default_server ;
# le dossier racine du site a servir est ici.
root /var/www/wordpress;
# les fichiers d'index possible sont les suivants
index index.php index.html index.htm
#les noms de serveurs qui correspondent au site
# si vous hébergez plusieurs site sur le même serveur,
# c'est ce champs qui permet de faire la différence.
server_name geekeries.org new.geekeries.org www.geekeries.org;
# écrire les journaux d'erreurs et d'accès dans ces 2 fichiers :
access_log /var/log/nginx/wordpress_access.log;
error_log /var/log/nginx/wordpress_error.log;
location / {
# Dans une requête cherche à servir la page demander comme un fichier
# si tu ne trouve rien comme un dossier/
# et sinon essaye en requête php.
try_files $uri $uri/ /index.php?q=$uri&$args;
}
# Dans le cas de scripts PHP : "passe le bébé dans la chaussette"
# socket qu'on a défini dans /etc/nginx/conf.d/php5-fpm.conf
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php5-fpm-sock;
}
}
Et voilà pour la configuration de base en http. Il suffit enfin d’activer le site en créant un lien symbolique vers notre site disponible dans le dossier /etc/nginx/sites-enabled/ et et retirant celui par défaut :
rm /etc/nginx/sites-enabled/default ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
Notez qu’NGINX ne propose pas de commande comme les a2ensite et a2dissite d’apache il faut dont se taper le lien symbolique à la main.
A ce moment si on (re)démarre les 3 services :
service mysql restart service php5-fpm restart service nginx start
et que vous vous connectez sur le site ça va s’afficher comme avant.
Fin
Bref, c’est tout pour le moment sur WordPress sur MySQL, PHP5-FPM et NGINX. La suite ne devrait pas tarder, j’ai déjà commencé à écrire l’article sur le cache et les optimisations de NGINX et de PHP5. J’espère que ça vous aura intéressé et que ça vous servira. Pour ma part, je suis content de NGINX pour l’instant même si j’ai l’impression qu’Apache est un peu plus adapté à des « serveurs en production » dans les milieu professionnels. Ça fait du bien d’essayer autre chose de temps en temps…