Réinstaller WordPress sur MySQL, PHP5-FPM et NGINX

Wordpress sur MySQL, PHP5-FPM et NGINX

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

Wordpress sur MySQL, PHP5-FPM et NGINX
L’architecture mise en place dans ce TP

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à…

Pauvre bête...
Pauvre bête…

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 :

  1. 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.
  2. 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

Wordpress sur MySQL, PHP5-FPM et NGINX
C’est quoi le délire avec les animaux sur les technos web ?

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

"<yoastmark

Alors déjà : on dit « Engine X » (N-Gin-X), et pas hen-guinx.

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…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *