{"id":41,"date":"2019-12-30T16:42:15","date_gmt":"2019-12-30T15:42:15","guid":{"rendered":"http:\/\/192.168.0.10\/?p=41"},"modified":"2019-12-30T16:42:15","modified_gmt":"2019-12-30T15:42:15","slug":"site-web-sur-raspberry-pi-partie-2-php-fastcgi","status":"publish","type":"post","link":"https:\/\/blog.nibelheim.fr\/?p=41","title":{"rendered":"Site web sur Raspberry Pi, partie 2 : PHP &amp; FastCGI"},"content":{"rendered":"\n<p>Bien bien bien, nous avons une base simple de PHP qui tourne, c&#8217;est la joie. Mais c&#8217;est peu, car si l&#8217;on veut WordPress ou n&#8217;importe quoi d&#8217;autre, il va falloir installer PHP et jouer avec ses r\u00e9glages.<br>Ressortez votre plus beau terminal, direction votre Pi en SSH, et en avant la musique!<\/p>\n\n\n\n<p><strong>1- Installer PHP<\/strong><br>Dans un premier temps, nous allons installer deux paquets dont je ne sais plus s&#8217;ils viennent automatiquement l&#8217;un avec l&#8217;autre : PHP et PHP FPM.<br>Nous allons utiliser le 7.3 mais vous pouvez aussi bien installer le 7.0 si \u00e7a vous chante<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt install -y php7.3 php7.3-fpm fcgiwrap<\/pre>\n\n\n\n<p>Il devrait y avoir un paquet de d\u00e9pendances qui vont avec ces deux paquets, rien de plus normal. L&#8217;option <strong>-y<\/strong> de la commande pr\u00e9c\u00e9dente stipule &#8220;oui oui, si tu veux&#8221;.<\/p>\n\n\n\n<p><strong>2- R\u00e9glages<\/strong><br>PHP, c&#8217;est le langage dont font usage beaucoup de sites Web et PHP FPM <em>(pour FastCGI Process Manager, FastCGI \u00e9tant une interface permettant \u00e0 une application tierce de dialoguer avec un serveur HTTP, donc ici, Nginx&#8230; Vous suivez?)<\/em> permet \u00e0 WordPress de papoter avec Nginx.<br>Pour que cette interfa\u00e7age se passe bien, il faut que nous nous assurions que les configurations &#8220;collent&#8221; entre Nginx et PHP, sinon, on va attendre un moment avant d&#8217;avoir quoi que ce soit.<\/p>\n\n\n\n<p>Sachez, chers lecteurs, que PHP FPM utilise, comme Nginx, un port pour s&#8217;interfacer avec&#8230; Nginx,  Heum.<br>La configuration de ce port se situe dans <strong><em>\/etc\/php\/7.3\/fpm\/pool.d\/www.conf<\/em><\/strong> . Donc, si l&#8217;on fait :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/etc\/php\/7.3\/fpm\/pool.d\/www.conf<\/pre>\n\n\n\n<p>&#8230; On ne voit rien. Pas de port, que dalle, walou. Et pour cause : soit on peut utiliser une combinaison <strong>adresse IP + port<\/strong>, soit un <strong>port <\/strong>tout seul, soit un <strong>socket<\/strong>, ce dernier \u00e9tant la &#8220;vraie&#8221; interface logicielle <em>locale (l&#8217;IP et le port passeront de toute fa\u00e7on par le socket, mais le socket est purement local, donc si Nginx et PHP FPM se trouvent sur deux machines diff\u00e9rentes, utilisez l&#8217;IP+port)<\/em>.<br>Bref, par d\u00e9faut, nous avons :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">listen = \/var\/run\/php\/php7.3-fpm.sock<\/pre>\n\n\n\n<p>Notez bien cette adresse de socket! On va en avoir besoin tout de suite.<br>Vous vous souvenez du fichier <em><strong>\/etc\/nginx\/sites-available\/site<\/strong><\/em> ?<br>Bah oui, que vous vous en souvenez, voyons. Donc :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/nginx\/sites-available\/site<\/pre>\n\n\n\n<p>Nous allons rajouter dans notre descripteur <em>(le fichier <strong>site<\/strong>, quoi)<\/em> les param\u00e8tres n\u00e9cessaires \u00e0 la gestion de PHP et FastCGI par Nginx.<br>Voici \u00e0 quoi va ressembler notre fichier <strong>site <\/strong>avec les modifs en mauve:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">server {\n    listen 80;\n    server_name test;\n    index index.php index.html;\n    root \/var\/www\/html;\n    access_log \/var\/www\/access-test.log;\n    error_log \/var\/www\/error-test.log;\n\n<strong>    <\/strong><span class=\"has-inline-color has-vivid-purple-color\"><strong>location ~ .php$ {\n        fastcgi_pass unix:\/var\/run\/php\/php7.3-fpm.sock;\n        fastcgi_split_path_info ^(.+.php)(\/.+)$;\n        <\/strong>include snippets\/fastcgi-php.conf;<strong>\n        fastcgi_param SCRIPT_FILENAME $document_root\/$fastcgi_script_name; #normalement, c'est sur une seule ligne...\n    }<\/strong><\/span>\n}<\/pre>\n\n\n\n<p>D\u00e9j\u00e0, je tiens \u00e0 pr\u00e9ciser que je ne suis pas l&#8217;auteur de ces quelques lignes, je les ai glan\u00e9es au fur et \u00e0 mesure de mes p\u00e9r\u00e9grinations sur le Net et je ne sais m\u00eame plus ce qui est indispensable de ce qui ne l&#8217;est pas.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>fcgiwrap.conf<\/strong><\/p>\n\n\n\n<p>Ce fichier permet d&#8217;inclure les param\u00e8tres au wrapper FastCGI <em>(wrapper = interpr\u00e9teur)<\/em> de mani\u00e8re \u00e0 ce qu&#8217;il y ait compr\u00e9hension entre les diff\u00e9rents partis <em>(c&#8217;est pas n\u00e9cessaire pour la base de PHP mais autant le faire maintenant)<\/em>.<br>Dans ce fichier, on trouve l&#8217;endroit o\u00f9 se trouvent les <strong>scripts CGI<\/strong> <em>(le jour o\u00f9 vous voudrez vous en servir, il faudra vous souvenir que \u00e7a se change ici)<\/em> \u00e0 la ligne <strong>root<\/strong>, ainsi que le remplacement \u00e0 faire lors de l&#8217;appel \u00e0 la variable SCRIPT_FILENAME par Nginx <strong>(qui remplacera le nom du script par le r\u00e9pertoire suivi du nom du script)<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>fastcgi_pass<\/strong><\/p>\n\n\n\n<p>Sans doute le truc le plus important (sinon, vous \u00eates bons pour une erreur 503). Ici, vous devez renseigner l&#8217;<strong>adresse IP ou le socket<\/strong> indiqu\u00e9 dans <strong><em>www.conf<\/em><\/strong> qu&#8217;on a vu tout \u00e0 l&#8217;heure.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Et puis le reste&#8230;<\/strong><\/p>\n\n\n\n<p>Bon, je la joue facile, mais le reste, c&#8217;est de l&#8217;adaptation et pour le moment, il est probable que \u00e7a ne serve pas \u00e0 grand-chose. Si \u00e7a vous amuse, vous pouvez supprimer les autres lignes et continuer, et les remettre quand vous verrez que \u00e7a coince!<\/p>\n\n\n\n<p><strong>3- Relancer Nginx<\/strong><br>Rendez-vous sur votre page Web (celle qui fonctionnait hier encore), puis relancez Nginx :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo service nginx reload<\/pre>\n\n\n\n<p>Et rafra\u00eechissez la page.<br>Si vous avez toujours votre page et pas d&#8217;erreur, c&#8217;est bien.<br>Mais c&#8217;est pas encore gagn\u00e9.<br>Partant du principe que vos pages se trouvent \u00e0 <strong><em>\/var\/www\/html<\/em><\/strong>, entrez la commande suivante :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo echo \"&lt;html&gt;&lt;?php phpinfo() ?&gt;&lt;\/html&gt;\" &gt;&gt; \/var\/www\/html\/index.php<\/pre>\n\n\n\n<p>Puis rafra\u00eechissez la page.<\/p>\n\n\n\n<p>Normalement, vous devriez vous retrouver avec un gros tableau plein d&#8217;infos. Si oui, alors bravo! PHP fonctionne proprement et votre site est bien configur\u00e9!<br>Dans le cas contraire, dites-le moi dans les commentaires, on va voir ce qu&#8217;on peut faire, et v\u00e9rifiez que les infos dans <strong>www.conf<\/strong>, <strong>nginx.conf<\/strong> et votre descripteur de site <strong>site <\/strong>concordent, \u00e7a vient souvent de l\u00e0.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bien bien bien, nous avons une base simple de PHP qui tourne, c&#8217;est la joie. Mais c&#8217;est peu, car si l&#8217;on veut WordPress ou n&#8217;importe quoi d&#8217;autre, il va falloir installer PHP et jouer avec ses r\u00e9glages.Ressortez votre plus beau terminal, direction votre Pi en SSH, et en avant la [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-41","post","type-post","status-publish","format-standard","hentry","category-raspberry-pi"],"_links":{"self":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=41"}],"version-history":[{"count":0,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/41\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}