{"id":37,"date":"2019-12-29T18:35:24","date_gmt":"2019-12-29T17:35:24","guid":{"rendered":"http:\/\/192.168.0.10\/?p=37"},"modified":"2019-12-29T18:35:24","modified_gmt":"2019-12-29T17:35:24","slug":"un-site-web-sur-raspberry-pi-avec-nginx","status":"publish","type":"post","link":"https:\/\/blog.nibelheim.fr\/?p=37","title":{"rendered":"Un site Web sur Raspberry Pi avec Nginx"},"content":{"rendered":"\n<p>Vous avez un Raspberry Pi qui tra\u00eene dans un coin et une envie de publier des trucs?<br \/>Personnellement, j&#8217;ai longtemps eu un blog sur Overblog avant 1) d&#8217;en avoir marre d&#8217;\u00e9crire et 2) de me mettre \u00e0 la place d&#8217;un de mes infortun\u00e9s lecteurs et de devoir subir la pub impassable en plein \u00e9cran d&#8217;une trentaine de secondes.<\/p>\n\n\n<p>Je comprends bien la n\u00e9cessit\u00e9 de la pub dans le mod\u00e8le actuel, tout \u00e7a, mais moi, \u00e7a me gave, peu importe comment vous le tournez.<br \/>En fouillant un peu sur les plates-formes gratuites de blogging, j&#8217;ai \u00e9t\u00e9 de nouveau d\u00e9\u00e7u : WordPress, pour avoir votre propre domaine, demande des euros, de m\u00eame que les autres.<\/p>\n\n\n<p>Et moi, des euros, j&#8217;en ai besoin.<br \/>Et j&#8217;ai un Raspi qui est l\u00e0 et qui n&#8217;attend que moi.<\/p>\n\n\n<p>Nous allons donc voir ensemble comment \u00e7a se passe pour h\u00e9berger votre site Web comme celui sur lequel vous vous trouvez pour ne pas d\u00e9bourser un sou en h\u00e9bergement.<\/p>\n\n\n<p class=\"has-large-font-size\">Avantages et inconv\u00e9nients<\/p>\n\n\n<p>C\u00f4t\u00e9 avantages, c&#8217;est la gratuit\u00e9 et l&#8217;autosuffisance. Vous avez la mainmise totale sur votre site et en faites ce que vous voulez. Et c&#8217;est \u00e0 peu pr\u00e8s tout pour les avantages.<\/p>\n\n\n<p>C\u00f4t\u00e9 inconv\u00e9nients, \u00e7a se g\u00e2te s\u00e9v\u00e8rement. Tellement que je vais faire une liste, tiens.<br \/>&#8211; <strong>Pas de sauvegarde automatique.<\/strong> Si votre carte SD plante, si votre Pi crashe ou prend feu, c&#8217;est mort. Il existe des backups que vous pouvez faire et m\u00eame automatiser, mais attention, \u00e7a reste du &#8220;manuel&#8221;. Oubliez la persistance d&#8217;une vraie plate-forme de blogging.<br \/>&#8211; <strong>Les mains dans le cambouis<\/strong>. Tout le temps. Si vous n&#8217;aimez pas bidouiller, \u00e7a ne sera pas pour vous. En effet, m\u00eame si je vais tout faire pour vous guider du mieux que je peux, \u00e7a va forc\u00e9ment merder \u00e0 un moment donn\u00e9 et il faudra vous sortir les doigts pour corriger le probl\u00e8me.<br \/>&#8211; <strong>La d\u00e9pendance \u00e0 votre connexion \u00e0 Internet<\/strong>. Si vous avez une connexion ADSL ou autre dont l&#8217;upload plafonne \u00e0 1Mb, oubliez tout de suite l&#8217;id\u00e9e d&#8217;h\u00e9berger chez vous, \u00e7a ne servira \u00e0 rien. Non seulement vous mettrez des plombes \u00e0 \u00e9diter des pages depuis dehors, mais vos visiteurs vont pleurer du sang en attendant que les pages chargent. Pour vous comme pour les autres, une bonne connexion \u00e0 Internet sera cl\u00e9.<br \/>Allez, 5Mb\/s, \u00e7a devrait le faire en up&#8217;.<br \/>&#8211;<strong> Raspberry Pi 2 minimum<\/strong>. Plus vous aurez un Pi r\u00e9cent, moins \u00e7a sera p\u00e9nible. Le Pi 1 est trop vieux maintenant et plus support\u00e9 pour faire tourner WordPress d\u00e9cemment. Peut-\u00eatre que si vous trouvez une structure de site Web plus l\u00e9g\u00e8re, y&#8217;aura moyen (et dites-le-moi, \u00e7a m&#8217;int\u00e9resse aussi), mais pour WordPress, ne vous infligez pas \u00e7a.<\/p>\n\n\n<p class=\"has-large-font-size\">Pas refroidi? Alors s&#8217;parti!<\/p>\n\n\n<p>Bon alors, l&#8217;id\u00e9e ici sera de cr\u00e9er un site bas\u00e9 sur WordPress, \u00e0 terme.<br \/>Mais pour le moment, on va partir tranquillou sur une structure de base de site Web, car oui, on peut se faire sa page moche avec tr\u00e8s peu de moyens.<\/p>\n\n\n<p><strong>0- Savoir de quoi on parle<\/strong><br \/>Nous allons utiliser l&#8217;acc\u00e8s par terminal \u00e0 notre Pi. Alors soit vous utilisez PuTTY si vous \u00eates sous Windows comme moi, soit vous utilisez un terminal si vous avez un \u00e9cran, clavier et souris branch\u00e9 sur votre Pi, soit un terminal en SSH si vous \u00eates sous Linux (mais vous faites quoi ici si c&#8217;est le cas?!). Si vous ne savez pas vous connecter \u00e0 votre Pi sans mon aide, je vous encourage \u00e0 apprendre la prise en main ailleurs (<a href=\"https:\/\/www.raspberrypi-france.fr\/guide\/\">genre ici<\/a>).<\/p>\n\n\n<p><strong>1- Mettre \u00e0 jour<\/strong><br \/>Comme toujours avec le Pi, une fois le bestiau install\u00e9 avec Raspbian, on met \u00e0 jour les packages. Ca n&#8217;engage \u00e0 rien et \u00e7a peut faire que du bien. Normalement.<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update &amp;&amp; sudo apt -y upgrade<\/pre>\n\n\n<p>Ouais, j&#8217;ai d\u00e9couvert r\u00e9cemment qu&#8217;ils ont simplifi\u00e9 la syntaxe entourant apt. Moi, d&#8217;mon temps, c&#8217;\u00e9tait sudo apt-get update &amp;&amp; sudo apt-get -y upgrade&#8230; Y&#8217;avait du -get, mon gars! On s&#8217;en fout? C&#8217;est vrai.<\/p>\n\n\n<p><strong>2- Arr\u00eater Apache. De partout.<\/strong><br \/>Nous allons utiliser Nginx pour ce tuto (parce que c&#8217;est moi qui \u00e9cris, j&#8217;ai donc le choix), mais comme il est fort probable qu&#8217;Apache, qui est install\u00e9 par d\u00e9faut normalement, tourne d\u00e9j\u00e0 sur le Pi, nous allons l&#8217;arr\u00eater et l&#8217;emp\u00eacher de d\u00e9marrer \u00e0 chaque fois, sinon y&#8217;aura conflit (de canard) avec Nginx, qui fait la m\u00eame chose, mais en mieux, si l&#8217;on en croit vox populi.<br \/>Gr\u00e2ce \u00e0 <a href=\"https:\/\/www.cyberciti.biz\/faq\/how-do-i-stop-apache-from-starting-on-linux\/\">ce tuto<\/a>, nous allons donc proc\u00e9der aux commandes suivantes :<\/p>\n\n\n<pre class=\"wp-block-preformatted\"><code>sudo systemctl disable apache2\nsudo systemctl stop apache2\nsudo systemctl mask apache2<\/code> <\/pre>\n\n\n<p>Pour ne rien vous cacher, je suis encore en phase de benchmark entre Apache et Nginx, et m\u00eame si j&#8217;ai davantage l&#8217;habitude de Nginx, je ne d\u00e9sinstalle pas encore Apache pour le moment.<\/p>\n\n\n<p><strong>3- Installer Nginx<\/strong><br \/>C&#8217;est tr\u00e8s technique :<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install -y nginx<\/pre>\n\n\n<p>Vous vous en remettrez? \ud83d\ude09<\/p>\n\n\n<p><strong>4- Cr\u00e9er les dossiers qui vont bien<\/strong><br \/>Nous allons cr\u00e9er la racine du site Web, en clair, les dossiers qui vont contenir ses fichiers.<br \/>Habituellement, le dossier utilis\u00e9 par une \u00e9nooorme majorit\u00e9 de tutos est <em><strong>\/var\/www\/<\/strong><\/em>.<br \/>Personnellement, j&#8217;aime bien faire ma propre cuisine, mais attention! Certaines application, comme <a href=\"https:\/\/www.jeedom.com\/site\/fr\/\">Jeedom<\/a>, utilisent un <a href=\"https:\/\/raw.githubusercontent.com\/jeedom\/core\/master\/install\/install.sh\">script <\/a>bien relativement bien foutu mais qui prend tr\u00e8s mal en charge le changement de r\u00e9pertoire par d\u00e9faut (c&#8217;est l&#8217;exp\u00e9rience qui parle).<br \/>Dans un futur article, on s&#8217;en reparlera, de ce script&#8230; Oh que oui.<br \/>En attendant, choisissez l\u00e0 o\u00f9 vous voulez cr\u00e9er votre site. Nous allons utiliser dans cet exemple 2 r\u00e9pertoires :<br \/><strong><em>\/var\/www\/logs<\/em> <\/strong>: r\u00e9pertoire o\u00f9 se trouveront les logs du serveur Nginx (bien pratique pour d\u00e9bugger)<br \/><strong><em>\/var\/www\/html<\/em><\/strong> : r\u00e9pertoire o\u00f9 se trouve la &#8220;vraie&#8221; racine de votre site Web.<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo mkdir \/var\/www\/html &amp;&amp; sudo mkdir \/var\/www\/logs<\/pre>\n\n\n<p><em>\/!\\ Si vous ne souhaitez h\u00e9berger qu&#8217;un seul site sur votre Pi, pourquoi ne pas utiliser ces deux r\u00e9pertoires. Par contre, si vous voulez en h\u00e9berger plusieurs (oui, c&#8217;est largement possible), je vous encourage \u00e0 cr\u00e9er des sous-r\u00e9pertoires.<\/em><br \/>Genre : <em><strong>\/var\/www\/site1\/logs<\/strong><\/em> et <strong><em>\/var\/www\/site1\/html<\/em><\/strong>.<\/p>\n\n\n<p>Ensuite, nous allons donner l&#8217;acc\u00e8s \u00e0 &#8220;l&#8217;utilisateur Nginx&#8221; aux r\u00e9pertoires en question. En effet, par d\u00e9faut, ces r\u00e9pertoires sont propri\u00e9t\u00e9 de l&#8217;utilisateur <strong>root <\/strong>(comme on a utilis\u00e9 la commande &#8220;sudo&#8221;), mais l&#8217;utilisateur Nginx, par d\u00e9faut, c&#8217;est<strong> www-data<\/strong>. Alors hop (on va faire \u00e7a comme des bourrins sur tout l&#8217;arborescence <strong><em>www<\/em><\/strong>) :<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo chown -R www-data \/var\/www<\/pre>\n\n\n<p><strong>5- D\u00e9finir le site<\/strong><br \/>Bon alors, l\u00e0, on rentre dans le dur.<br \/>Sachez que l&#8217;\u00e9noooorme majorit\u00e9 des configurations que nous ferons dans les tutos \u00e0 venir se passeront dans deux fichiers :<br \/>&#8211; le fichier <strong>nginx.conf<\/strong> dans \/etc\/nginx<br \/>&#8211; le fichier de d\u00e9finition de chaque site Web.<br \/><br \/>Pour le moment, nous allons laisser nginx.conf tranquille, et nous attaquer au fichier de d\u00e9finition de notre premier site.<br \/>Dans un premier temps, nous allons supprimer le fichier par d\u00e9faut s&#8217;il existe (la m\u00e9moire me fait d\u00e9faut, donc j&#8217;assure le coup) pour partir sur des bases saines.<br \/>Si vous ne le faites pas, il risque d&#8217;y avoir conflit avec notre futur site&#8230; Et je vous rassure, il n&#8217;y a aucun risque \u00e0 supprimer le contenu par d\u00e9faut : je vous donne ce qu&#8217;il faut \u00e9tape par \u00e9tape, donc pas peur.<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo rm \/etc\/nginx\/sites-available\/* &amp;&amp; sudo rm \/etc\/nginx\/sites-enabled\/*<\/pre>\n\n\n<p>Ensuite, on cr\u00e9e notre descripteur de site \u00e0 nous (qui sera bien plus beau, tu penses) :<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo nano \/etc\/nginx\/sites-available\/site<\/pre>\n\n\n<p>\/!\\ Pour copier et coller, les commandes diff\u00e8rent un peu du ctrl-C ctrl-V habituel :<br \/><strong>ctrl-Inser<\/strong> copie la s\u00e9lection (marche aussi sous Windows!)<br \/><strong>shift-Inser<\/strong> colle la s\u00e9lection.<\/p>\n\n\n<p>Copiez et modifiez ensuite le contenu suivant :<\/p>\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\/logs\/access-test.log;\n     error_log \/var\/www\/logs\/error-test.log;\n}<\/pre>\n\n\n<p>Rapidement, ce que \u00e7a dit :<br \/>&#8211; Que le serveur sera sur le <strong>port 80<\/strong> (port par d\u00e9faut d&#8217;un site Web)<br \/>&#8211; Que le fichier \u00e0 charger par d\u00e9faut sera <strong>index.php<\/strong>, ou <strong>index.html<\/strong> (l&#8217;ordre est important)<br \/>&#8211; Que les fichiers se trouvent dans le r\u00e9pertoire <strong>\/var\/www\/html<\/strong>,<br \/>&#8211; Que les fichiers de log se trouvent dans le r\u00e9pertoire qu&#8217;on a d\u00e9fini. Notez par ailleurs que ces fichiers sont optionnels : si vous voulez les d\u00e9gager, faites \ud83d\ude42<\/p>\n\n\n<p>Bien!<br \/>Pour sauvegarder et quitter Nano, tapez <strong>ctrl-X<\/strong> (sortir), <strong>Y<\/strong> (enregistrer?) puis <strong>Entr\u00e9e <\/strong>(OUI!).<br \/>Ceci fait, nous avons donc un descripteur de site dans le r\u00e9pertoire <strong>sites-available<\/strong>.<br \/>Ce r\u00e9pertoire est en gros le vivier des sites <em>potentiels <\/em>que vous pouvez faire tourner sur Nginx, MAIS ces sites ne seront actifs que lorsque le descripteur sera plac\u00e9 dans <strong>sites-enabled<\/strong>.<br \/>Et comme on n&#8217;est pas des b\u00eates, on va utiliser une fonction qu&#8217;elle est chouette de Linux : le <strong>lien symbolique<\/strong>. C&#8217;est un peu comme un raccourci, mais y&#8217;a des subtilit\u00e9s qui m&#8217;\u00e9chappent (comme toujours, d&#8217;ailleurs).<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo ln -s \/etc\/nginx\/sites-available\/site \/etc\/nginx\/sites-enabled\/site<\/pre>\n\n\n<p>Pour v\u00e9rifier que le lien symbolique a \u00e9t\u00e9 cr\u00e9\u00e9, allez donc dans<em><strong> \/etc\/nginx\/sites-enabled<\/strong><\/em> et entrez <strong>ls<\/strong>. Si le fichier <strong>site <\/strong>a son nom en <strong>bleu clair<\/strong>, c&#8217;est gagn\u00e9!<\/p>\n\n\n<p>Enfin, relancez Nginx pour qu&#8217;il prenne en compte les modifications :<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo service nginx reload<\/pre>\n\n\n<p>Si vous n&#8217;avez aucun retour, vous avez aussi gagn\u00e9! Sinon, vous \u00eates bons pour d\u00e9merder le truc en lisant le contenu de l&#8217;erreur avec la commande :<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo journalctl -xe<\/pre>\n\n\n<p><strong>6- Notre premi\u00e8re page<\/strong><br \/>On va faire simple et moche, mais qui marche :<\/p>\n\n\n<pre class=\"wp-block-preformatted\">sudo echo \"&lt;html&gt;&lt;body&gt;&lt;h1&gt;BEUARGH&lt;\/h1&gt;&lt;\/body&gt;&lt;\/html&gt;\" &gt;&gt; \/var\/www\/html\/index.html<\/pre>\n\n\n<p>Et si mon tuto est pas trop pourri, en entrant l&#8217;adresse IP locale de votre Raspberry Pi dans un navigateur Internet, vous devriez avoir un BEUARGH affich\u00e9 dans votre page.<br \/>F\u00e9licitations! Vous avez votre site qui tourne !<\/p>\n\n\n<p>Le prochain coup, on installe PHP et on va pr\u00e9parer la venue de WordPress&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous avez un Raspberry Pi qui tra\u00eene dans un coin et une envie de publier des trucs?Personnellement, j&#8217;ai longtemps eu un blog sur Overblog avant 1) d&#8217;en avoir marre d&#8217;\u00e9crire et 2) de me mettre \u00e0 la place d&#8217;un de mes infortun\u00e9s lecteurs et de devoir subir la pub impassable [&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":[9,22,26],"class_list":["post-37","post","type-post","status-publish","format-standard","hentry","category-raspberry-pi","tag-apache","tag-nginx","tag-services"],"_links":{"self":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/37","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=37"}],"version-history":[{"count":0,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=\/wp\/v2\/posts\/37\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nibelheim.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}