Les notes de Clément

Spécialiste de rien // Partageur de tout

Raspberry Pi : installation d’un serveur web

Dans ce billet, je vais décrire comment j’ai installé un serveur web sur mon Raspberry Pi, mais surtout comment j’ai configuré mon installation sachant que mon fournisseur d’accès est SFR.

Dans la première moitié, je décris l’installation du serveur et la configuration minimale pour tester. Et dans la seconde partie, je décris comment s’en sortir sans adresse IP fixe (comme c’est le cas chez SFR).

MODIFICATION : j’ai finalement réussi à utilisé un service de DNS dynamique, qui me permet de ne pas forcément utiliser mon script compliqué : voir ce billet

Installation du serveur et configuration minimale

Installation du serveur

On va installer un serveur web, communément appelé LAMP, pour Linux / Apache / MySQL / PHP. Avec ça vous aurez de quoi faire tourner un petit site web, avec base de données et pages dynamiques. Il suffit d’installer les paquets suivants :

	sudo apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql

La racine de votre site se situe alors dans le dossier /var/www/ et si vous allez sur la page localhost:80, vous devriez voir la page par défaut d’Apache qui dit « It Works! ».

Trouver son adresse IP externe

Il y a plusieurs façon de faire : vous pouvez vous rendre sur l’interface de votre box 192.168.1.1 et l’adresse IP est alors visible en haut à droite. Vous pouvez également utiliser un site web tel que ipogre.com (nous l’utiliserons d’ailleurs dans la seconde partie).

Mais si vous donner cette adresse IP à quelqu’un pour qu’il puisse voir le site web hebergé sur votre Raspberry, cela ne marchera pas car il « atterrira » sur la box ! On va donc voir comment la paramétrer dans la suite.

Paramètrer sa box

Par défaut, lorsqu’un nouvel équipement se connecte à la box (wifi ou ethernet), elle lui attribue une adresse IP locale aléatoire du type 192.168.1.XX. Pour que le Raspberry soit toujours à la même adresse (ce sera mieux pour le retrouver), on va demander à la box de lui attribuer une IP locale fixe. Il faut aller sur l’interface de la box (localhost:80), dans l’onglet DHCP de la section Réseau. Regarder l’aide de SFR à ce sujet qui est très bien faire : Héberger son site web à la maison avec sa box.

Maintenant, il faut rediriger le port 80 (celui du serveur web) vers votre Raspberry. C’est aussi expliqué sur la page d’aide de SFR, et il suffit d’ajouter une règle NAT. D’ailleurs, vous pouvez en profiter pour ajouter d’autres règles. En redirigeant également le port 22, vous pourrez vous connecter en ssh à votre Raspberry depuis n’importe où !

Test

Vous pouvez maintenant donner votre adresse IP externe à votre fameux ami qui meurt d’envie de voir le site web que vous hébergez sur votre Raspberry. Disons que cette adresse est A.B.C.D, s’il se rend à l’adresse A.B.C.D sur son navigateur, il atterrira sur votre site ! Si vous testez de chez vous, vous arriverez sur l’interface de la box, ce qui est moins intéressant, utilisez l’adresse IP locale de votre raspberry.

 

Script pour ne pas utiliser DynDNS

Chez SFR, l’adresse IP de votre box change régulièrement, et il est possible de souscrire à un service de DNS dynamique pour que l’adresse mon-rpi.dyndns.fr redirige toujours vers votre box. Seulement je n’ai pas réussi ! Il faut normalement aller dans l’onglet DynDNS de la section Réseau de l’interface de la box, mais le dervide dyndns.fr n’est pas présent, et donc j’ai préféré m’en passer pour l’instant.

Pour ne pas être bloqué, on m’a soufflé l’idée suivante : faire un script qui vérifie si l’adresse IP a changée, si oui le script doit m’envoyer un mail avec la nouvelle adresse IP. Puis il suffit de faire s’exécuter ce script automatiquement à intervalles réguliers.

Le script

On va mettre le script dans le répertoire /usr/local/bin/ipcheck.sh :

#!/bin/bash
IPFILE=/etc/ipaddress

CURRENT_IP=$(curl ipogre.com)

MAIL_TO=votre_adresse@domaine.fr

if [ -f $IPFILE ]; then
	KNOWN_IP=$(cat $IPFILE)
	else
	KNOWN_IP=
fi

if [ "$CURRENT_IP" != "$KNOWN_IP" ]; then
	echo $CURRENT_IP > $IPFILE

	MAIL_SUBJECT="L'adresse IP du RPI a changé !"
	MAIL_BODY="C'est maintenant $CURRENT_IP"

	echo $MAIL_BODY | mail -s "$MAIL_SUBJECT" $MAIL_TO
	logger -t ipcheck -- Nouvelle adresse IP : $CURRENT_IP
else
	logger -t ipcheck -- Même adresse IP.
fi

Donc l’adresse IP va être stockée dans le fichier /etc/ipaddress et on utilise le site ipogre.com pour récupérer l’adresse externe. Puis on compare l’ancienne adresse avec la courante, et si ce n’est pas la même, on envoie le mail. Voyons maintenant ce qu’il faut installer et configurer pour que tout marche bien.

Installation curl

Je ne sais plus s’il est installé de base dans Raspbian, dans le doute :

	sudo apt-get install curl

Envoi de mail

La partie qui risque de poser problème concerne l’envoi de mail. Car la commande mail ne fait qu’appeler le MTA installé localement. J’ai opté pour ssmtp qui est très simple à installer et configurer :

sudo apt-get install ssmtp

Je l’ai configurer pour utilisé mon compte Gmail pour les envois. Il faut alors éditer le fichier /etc/ssmtp/ssmtp.conf pour modifier les lignes suivantes :

mailhub=smtp.gmail.com:587
UseTLS=Yes
UseSTARTTLS=Yes
AuthUser=votre_login_gmail
AuthPass=votre_mot_de_passe_gmail

Attention, votre mot de passe Gmail n’est pas crypté, il faut donc s’assurer que le fichier ne sera pas lisible par n’importe qui ! :

sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chown root:mail /etc/ssmtp/ssmtp.conf

Cron du script

On va « croner » ce script pour qu’il s’exécute automatiquement toutes les heures. Comme il n’y a que l’utilisateur root (cf. le chown à l’étape précédente), il faut ajouter la tâche en sudo :

	sudo crontab -e

Et ajouter la ligne suivante :

0 * * * * /usr/local/bin/ipcheck.sh >/dev/null 2>&1

Voilà ! Maintenant, toutes les heures, votre RPi vérifiera que son adresse IP externe n’a pas changée. Si elle a en effet changée, il vous enverra un e-mail pour vous donner la nouvelle adresse. Vous pourrez également voir le log dans le fichier /var/log/user.log, en utilisant la commande tail par exemple.

Conclusion

Bien sûr, le gros problème avec cette solution (sans DNS dynamique), est qu’il vous faudra prévenir vos amis à chaque changement d’adresse IP ! Ce n’est bien sûr pas une solution viable pour un vrai site (mais fait uniquement pour partager avec des amis), et il faudra alors songer à acheter un vrai nom de domaine, associé à une solution de DNS dynamique.

N’hésitez pas à me faire part de toute remarques / corrections / erreurs !

6 commentaires.

  1. Pl a dit :

    Quid de la conso de ressources du serveur ?
    pourquoi pas le choix d’une version plus light type lighttpd ?

    ++

    • Clément a dit :

      Tu as tout à fait raison de soulever ce problème Pl. Je ne discute pas ici des différentes alternatives en matière de serveur web, et mon billet ne présente qu’un modeste exemple de serveur web, en aucun cas optimisé pour une faible consommation d’énergie.

      Je ne connais pas bien lighttpd mais cela semble être une option très intéressante dans ce cas en effet. J’ai choisi Apache car je le connaissais déjà un peu, et que l’on trouve facilement de l’aide sur internet quand on coince. J’avais hésité avec Nginx car c’est celui que nous utilisons au travail, et il est assez léger également.

  2. www.prweb.com a dit :

    It’s difficult to find well-informed people for this topic, but you sound like you know what you’re talking about!
    Thanks

  3. clemberto a dit :

    Salut Clément !
    Merci pour ce tuto. La partie sur ssmtp est sympa et utile.
    Par contre de mon côté la commande pour envoyer un mail est ‘sendmail’ et pas ‘mail’ comme indiqué l. 20 du script /usr/local/bin/ipcheck.sh . La syntaxe en est différente…
    Je n’ai pas de paquet ‘mail’ sur ma distrib rapsbian 3.6.11+ Quelle distrib as-tu utilisé d’ailleurs ?
    Quel résultats tu as obtenus ?

  4. Olivier a dit :

    Cool ssmtp. Me semble plus simple que Sendmail.
    Pour l’@IP dynamique j’utilise no-ip. Cela fait globalement la même chose que ton script avec l’avantage du DNS dynamique. Assez simple mettre en place et gratuit.

  5. lewis a dit :

    Salut merci pour votre tuto!
    J’ai rencontrer un pb avec ma box sfr qui ne reconnait pas no-ip dans la liste déroulante du champ service (onglet dyndns).
    Conclusion : je ne peux pas associer mon nom de domaine enregistré sur no-ip a ma box
    Merci pour votre réponse

Laisser un commentaire

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

*