Table des matières
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.
Sources (en anglais…) :
N’hésitez pas à me faire part de toute remarques / corrections / erreurs !
Quid de la conso de ressources du serveur ?
pourquoi pas le choix d’une version plus light type lighttpd ?
++
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.
It’s difficult to find well-informed people for this topic, but you sound like you know what you’re talking about!
Thanks
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 ?
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.
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