Un site Web sur Raspberry Pi avec Nginx

Vous avez un Raspberry Pi qui traîne dans un coin et une envie de publier des trucs?
Personnellement, j’ai longtemps eu un blog sur Overblog avant 1) d’en avoir marre d’écrire et 2) de me mettre à la place d’un de mes infortunés lecteurs et de devoir subir la pub impassable en plein écran d’une trentaine de secondes.

Je comprends bien la nécessité de la pub dans le modèle actuel, tout ça, mais moi, ça me gave, peu importe comment vous le tournez.
En fouillant un peu sur les plates-formes gratuites de blogging, j’ai été de nouveau déçu : WordPress, pour avoir votre propre domaine, demande des euros, de même que les autres.

Et moi, des euros, j’en ai besoin.
Et j’ai un Raspi qui est là et qui n’attend que moi.

Nous allons donc voir ensemble comment ça se passe pour héberger votre site Web comme celui sur lequel vous vous trouvez pour ne pas débourser un sou en hébergement.

Avantages et inconvénients

Côté avantages, c’est la gratuité et l’autosuffisance. Vous avez la mainmise totale sur votre site et en faites ce que vous voulez. Et c’est à peu près tout pour les avantages.

Côté inconvénients, ça se gâte sévèrement. Tellement que je vais faire une liste, tiens.
Pas de sauvegarde automatique. Si votre carte SD plante, si votre Pi crashe ou prend feu, c’est mort. Il existe des backups que vous pouvez faire et même automatiser, mais attention, ça reste du “manuel”. Oubliez la persistance d’une vraie plate-forme de blogging.
Les mains dans le cambouis. Tout le temps. Si vous n’aimez pas bidouiller, ça ne sera pas pour vous. En effet, même si je vais tout faire pour vous guider du mieux que je peux, ça va forcément merder à un moment donné et il faudra vous sortir les doigts pour corriger le problème.
La dépendance à votre connexion à Internet. Si vous avez une connexion ADSL ou autre dont l’upload plafonne à 1Mb, oubliez tout de suite l’idée d’héberger chez vous, ça ne servira à rien. Non seulement vous mettrez des plombes à éditer 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 à Internet sera clé.
Allez, 5Mb/s, ça devrait le faire en up’.
Raspberry Pi 2 minimum. Plus vous aurez un Pi récent, moins ça sera pénible. Le Pi 1 est trop vieux maintenant et plus supporté pour faire tourner WordPress décemment. Peut-être que si vous trouvez une structure de site Web plus légère, y’aura moyen (et dites-le-moi, ça m’intéresse aussi), mais pour WordPress, ne vous infligez pas ça.

Pas refroidi? Alors s’parti!

Bon alors, l’idée ici sera de créer un site basé sur WordPress, à terme.
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ès peu de moyens.

0- Savoir de quoi on parle
Nous allons utiliser l’accès par terminal à notre Pi. Alors soit vous utilisez PuTTY si vous êtes sous Windows comme moi, soit vous utilisez un terminal si vous avez un écran, clavier et souris branché sur votre Pi, soit un terminal en SSH si vous êtes sous Linux (mais vous faites quoi ici si c’est le cas?!). Si vous ne savez pas vous connecter à votre Pi sans mon aide, je vous encourage à apprendre la prise en main ailleurs (genre ici).

1- Mettre à jour
Comme toujours avec le Pi, une fois le bestiau installé avec Raspbian, on met à jour les packages. Ca n’engage à rien et ça peut faire que du bien. Normalement.

sudo apt update && sudo apt -y upgrade

Ouais, j’ai découvert récemment qu’ils ont simplifié la syntaxe entourant apt. Moi, d’mon temps, c’était sudo apt-get update && sudo apt-get -y upgrade… Y’avait du -get, mon gars! On s’en fout? C’est vrai.

2- Arrêter Apache. De partout.
Nous allons utiliser Nginx pour ce tuto (parce que c’est moi qui écris, j’ai donc le choix), mais comme il est fort probable qu’Apache, qui est installé par défaut normalement, tourne déjà sur le Pi, nous allons l’arrêter et l’empêcher de démarrer à chaque fois, sinon y’aura conflit (de canard) avec Nginx, qui fait la même chose, mais en mieux, si l’on en croit vox populi.
Grâce à ce tuto, nous allons donc procéder aux commandes suivantes :

sudo systemctl disable apache2
sudo systemctl stop apache2
sudo systemctl mask apache2 

Pour ne rien vous cacher, je suis encore en phase de benchmark entre Apache et Nginx, et même si j’ai davantage l’habitude de Nginx, je ne désinstalle pas encore Apache pour le moment.

3- Installer Nginx
C’est très technique :

sudo apt install -y nginx

Vous vous en remettrez? 😉

4- Créer les dossiers qui vont bien
Nous allons créer la racine du site Web, en clair, les dossiers qui vont contenir ses fichiers.
Habituellement, le dossier utilisé par une énooorme majorité de tutos est /var/www/.
Personnellement, j’aime bien faire ma propre cuisine, mais attention! Certaines application, comme Jeedom, utilisent un script bien relativement bien foutu mais qui prend très mal en charge le changement de répertoire par défaut (c’est l’expérience qui parle).
Dans un futur article, on s’en reparlera, de ce script… Oh que oui.
En attendant, choisissez là où vous voulez créer votre site. Nous allons utiliser dans cet exemple 2 répertoires :
/var/www/logs : répertoire où se trouveront les logs du serveur Nginx (bien pratique pour débugger)
/var/www/html : répertoire où se trouve la “vraie” racine de votre site Web.

sudo mkdir /var/www/html && sudo mkdir /var/www/logs

/!\ Si vous ne souhaitez héberger qu’un seul site sur votre Pi, pourquoi ne pas utiliser ces deux répertoires. Par contre, si vous voulez en héberger plusieurs (oui, c’est largement possible), je vous encourage à créer des sous-répertoires.
Genre : /var/www/site1/logs et /var/www/site1/html.

Ensuite, nous allons donner l’accès à “l’utilisateur Nginx” aux répertoires en question. En effet, par défaut, ces répertoires sont propriété de l’utilisateur root (comme on a utilisé la commande “sudo”), mais l’utilisateur Nginx, par défaut, c’est www-data. Alors hop (on va faire ça comme des bourrins sur tout l’arborescence www) :

sudo chown -R www-data /var/www

5- Définir le site
Bon alors, là, on rentre dans le dur.
Sachez que l’énoooorme majorité des configurations que nous ferons dans les tutos à venir se passeront dans deux fichiers :
– le fichier nginx.conf dans /etc/nginx
– le fichier de définition de chaque site Web.

Pour le moment, nous allons laisser nginx.conf tranquille, et nous attaquer au fichier de définition de notre premier site.
Dans un premier temps, nous allons supprimer le fichier par défaut s’il existe (la mémoire me fait défaut, donc j’assure le coup) pour partir sur des bases saines.
Si vous ne le faites pas, il risque d’y avoir conflit avec notre futur site… Et je vous rassure, il n’y a aucun risque à supprimer le contenu par défaut : je vous donne ce qu’il faut étape par étape, donc pas peur.

sudo rm /etc/nginx/sites-available/* && sudo rm /etc/nginx/sites-enabled/*

Ensuite, on crée notre descripteur de site à nous (qui sera bien plus beau, tu penses) :

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

/!\ Pour copier et coller, les commandes diffèrent un peu du ctrl-C ctrl-V habituel :
ctrl-Inser copie la sélection (marche aussi sous Windows!)
shift-Inser colle la sélection.

Copiez et modifiez ensuite le contenu suivant :

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

Rapidement, ce que ça dit :
– Que le serveur sera sur le port 80 (port par défaut d’un site Web)
– Que le fichier à charger par défaut sera index.php, ou index.html (l’ordre est important)
– Que les fichiers se trouvent dans le répertoire /var/www/html,
– Que les fichiers de log se trouvent dans le répertoire qu’on a défini. Notez par ailleurs que ces fichiers sont optionnels : si vous voulez les dégager, faites 🙂

Bien!
Pour sauvegarder et quitter Nano, tapez ctrl-X (sortir), Y (enregistrer?) puis Entrée (OUI!).
Ceci fait, nous avons donc un descripteur de site dans le répertoire sites-available.
Ce répertoire est en gros le vivier des sites potentiels que vous pouvez faire tourner sur Nginx, MAIS ces sites ne seront actifs que lorsque le descripteur sera placé dans sites-enabled.
Et comme on n’est pas des bêtes, on va utiliser une fonction qu’elle est chouette de Linux : le lien symbolique. C’est un peu comme un raccourci, mais y’a des subtilités qui m’échappent (comme toujours, d’ailleurs).

sudo ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/site

Pour vérifier que le lien symbolique a été créé, allez donc dans /etc/nginx/sites-enabled et entrez ls. Si le fichier site a son nom en bleu clair, c’est gagné!

Enfin, relancez Nginx pour qu’il prenne en compte les modifications :

sudo service nginx reload

Si vous n’avez aucun retour, vous avez aussi gagné! Sinon, vous êtes bons pour démerder le truc en lisant le contenu de l’erreur avec la commande :

sudo journalctl -xe

6- Notre première page
On va faire simple et moche, mais qui marche :

sudo echo "<html><body><h1>BEUARGH</h1></body></html>" >> /var/www/html/index.html

Et si mon tuto est pas trop pourri, en entrant l’adresse IP locale de votre Raspberry Pi dans un navigateur Internet, vous devriez avoir un BEUARGH affiché dans votre page.
Félicitations! Vous avez votre site qui tourne !

Le prochain coup, on installe PHP et on va préparer la venue de WordPress…

Leave a Reply

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