Site web sur Raspberry Pi, partie 2 : PHP & FastCGI

Bien bien bien, nous avons une base simple de PHP qui tourne, c’est la joie. Mais c’est peu, car si l’on veut WordPress ou n’importe quoi d’autre, il va falloir installer PHP et jouer avec ses réglages.
Ressortez votre plus beau terminal, direction votre Pi en SSH, et en avant la musique!

1- Installer PHP
Dans un premier temps, nous allons installer deux paquets dont je ne sais plus s’ils viennent automatiquement l’un avec l’autre : PHP et PHP FPM.
Nous allons utiliser le 7.3 mais vous pouvez aussi bien installer le 7.0 si ça vous chante

sudo apt update && sudo apt install -y php7.3 php7.3-fpm fcgiwrap

Il devrait y avoir un paquet de dépendances qui vont avec ces deux paquets, rien de plus normal. L’option -y de la commande précédente stipule “oui oui, si tu veux”.

2- Réglages
PHP, c’est le langage dont font usage beaucoup de sites Web et PHP FPM (pour FastCGI Process Manager, FastCGI étant une interface permettant à une application tierce de dialoguer avec un serveur HTTP, donc ici, Nginx… Vous suivez?) permet à WordPress de papoter avec Nginx.
Pour que cette interfaçage se passe bien, il faut que nous nous assurions que les configurations “collent” entre Nginx et PHP, sinon, on va attendre un moment avant d’avoir quoi que ce soit.

Sachez, chers lecteurs, que PHP FPM utilise, comme Nginx, un port pour s’interfacer avec… Nginx, Heum.
La configuration de ce port se situe dans /etc/php/7.3/fpm/pool.d/www.conf . Donc, si l’on fait :

nano /etc/php/7.3/fpm/pool.d/www.conf

… On ne voit rien. Pas de port, que dalle, walou. Et pour cause : soit on peut utiliser une combinaison adresse IP + port, soit un port tout seul, soit un socket, ce dernier étant la “vraie” interface logicielle locale (l’IP et le port passeront de toute façon par le socket, mais le socket est purement local, donc si Nginx et PHP FPM se trouvent sur deux machines différentes, utilisez l’IP+port).
Bref, par défaut, nous avons :

listen = /var/run/php/php7.3-fpm.sock

Notez bien cette adresse de socket! On va en avoir besoin tout de suite.
Vous vous souvenez du fichier /etc/nginx/sites-available/site ?
Bah oui, que vous vous en souvenez, voyons. Donc :

sudo nano /etc/nginx/sites-available/site

Nous allons rajouter dans notre descripteur (le fichier site, quoi) les paramètres nécessaires à la gestion de PHP et FastCGI par Nginx.
Voici à quoi va ressembler notre fichier site avec les modifs en mauve:

server {
    listen 80;
    server_name test;
    index index.php index.html;
    root /var/www/html;
    access_log /var/www/access-test.log;
    error_log /var/www/error-test.log;

    location ~ .php$ {
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; #normalement, c'est sur une seule ligne...
    }
}

Déjà, je tiens à préciser que je ne suis pas l’auteur de ces quelques lignes, je les ai glanées au fur et à mesure de mes pérégrinations sur le Net et je ne sais même plus ce qui est indispensable de ce qui ne l’est pas.

fcgiwrap.conf

Ce fichier permet d’inclure les paramètres au wrapper FastCGI (wrapper = interpréteur) de manière à ce qu’il y ait compréhension entre les différents partis (c’est pas nécessaire pour la base de PHP mais autant le faire maintenant).
Dans ce fichier, on trouve l’endroit où se trouvent les scripts CGI (le jour où vous voudrez vous en servir, il faudra vous souvenir que ça se change ici) à la ligne root, ainsi que le remplacement à faire lors de l’appel à la variable SCRIPT_FILENAME par Nginx (qui remplacera le nom du script par le répertoire suivi du nom du script).

fastcgi_pass

Sans doute le truc le plus important (sinon, vous êtes bons pour une erreur 503). Ici, vous devez renseigner l’adresse IP ou le socket indiqué dans www.conf qu’on a vu tout à l’heure.

Et puis le reste…

Bon, je la joue facile, mais le reste, c’est de l’adaptation et pour le moment, il est probable que ça ne serve pas à grand-chose. Si ça vous amuse, vous pouvez supprimer les autres lignes et continuer, et les remettre quand vous verrez que ça coince!

3- Relancer Nginx
Rendez-vous sur votre page Web (celle qui fonctionnait hier encore), puis relancez Nginx :

sudo service nginx reload

Et rafraîchissez la page.
Si vous avez toujours votre page et pas d’erreur, c’est bien.
Mais c’est pas encore gagné.
Partant du principe que vos pages se trouvent à /var/www/html, entrez la commande suivante :

sudo echo "<html><?php phpinfo() ?></html>" >> /var/www/html/index.php

Puis rafraîchissez la page.

Normalement, vous devriez vous retrouver avec un gros tableau plein d’infos. Si oui, alors bravo! PHP fonctionne proprement et votre site est bien configuré!
Dans le cas contraire, dites-le moi dans les commentaires, on va voir ce qu’on peut faire, et vérifiez que les infos dans www.conf, nginx.conf et votre descripteur de site site concordent, ça vient souvent de là.

Leave a Reply

Your email address will not be published. Required fields are marked *