Rédigé par P3ter - - 18 commentaires
Grâce au peu d'énergie qu'il consomme, le Raspberry Pi et parfait pour jouer le rôle de serveur chez soi. J'ai donc fait un fork du script de Nicolas Hennion (blog.nicolargo.com) qui permet d'installer et de configurer automatiquement un serveur web sous Debian et j'ai adapté ce script pour les Raspberry Pi tournant sous Raspbian.
Composants du serveur
Le choix de NGINX est évident par rapport à celui d'Apache, car ce dernier est beaucoup plus gourmand, alors que les performances du Raspberry Pi sont assez limité. NGINX étant très léger en ressource, constitue un serveur web parfait pour notre mini-serveur ARM.
Le deuxième composant essentiel : PHP, obligatoire pour créer un site dynamique (par opposition à un site statique entièrement en HTML). Pour faire communiquer PHP et NGINX, on utilisera PHP-FPM. Une alternative possible est d'utiliser PHP FastCGI, mais celui ci est plus difficile à configurer. Dernière élément important : un moteur de site de web. Les plus connus étant Wordpress, Joomla, Drupal, Spip, mais pour notre Raspberry Pi je vous conseil plutôt une solution sans base de données comme Dotclear ou PluXml. J'en reparlerai plus bas dans l'article.
Installation et configuration : Le script
Le script installe NGINX depuis les sources. Il est possible d'installer la version de développement ou bien la version stable en modifiant le script. Par défaut c'est la version de développement qui est installé.
Installation de la version développement :
#NGINX_VERSION="1.2.7" # The stable version
Installation de la version stable :
NGINX_VERSION="1.2.7" # The stable version
Pour info, j'ai toujours utilisé la version de développement et je n'ai jamais rencontré de problème.
Voici en détail les étapes du scripts :
- Mise à jour des dépôts
- Installation des pré-requis (build-essential et librairies)
- Téléchargement de NGINX
- Décompression des sources
- Configuration pour la compilation
- Compilation
- Installation
- Configuration de NGINX
- Démarrage des services
Remarque : j'utilise la commande "sudo" par commodité et pour utiliser le /home avec le .bashrc de mon utilisateur.
Passons à des choses plus concrètes et lançons le script :
Des fichiers de logs sont créés dans /tmp.
Important : Avec ce script, NGINX est configuré pour être lancé avec l'utilisateur "www-data". Ce qui implique que les dossiers contenant vos pages web doivent donner des droits suffisants à "www-data". Dans le virtualhost "default", le dossier racine est /var/www, il faut donc passer les commandes suivantes :
Pour éditer les fichiers, il faut ajouter votre utilisateur au groupe www-data, sinon il n'aura pas les droits suffisants.
Pour tester votre serveur web, créez un fichier index.html, contenant le texte de votre choix, à la racine de votre site (/var/www/). Lancer un navigateur est tapez l'adresse IP ou le nom DNS s'il y en a un. Le texte du fichier index.html devrait apparaître.
Lorsque je fais des développements sur mes sites web, je me connecte à distance au serveur en sftp. Les fichiers sont téléchargés en local et renvoyer en enregistrant depuis l'éditeur. A ce moment là l'utilisateur et les droits sur le fichiers ne sont plus corrects pour NGINX. Je dois donc, relancer les deux commandes ci-dessus. Pour que ce soit plus simple, j'ai créé deux alias dans mon .bashrc sur le serveur.
Mise à jour de NGINX avec le script
La mise à jour de NGINX est très simple il suffit de changer le numéro de version dans le script et de le relancer de la même manière que pour l'installation (voir ci-dessus). J'essai de maintenir le script à jour avec les dernières versions de NGINX.
PluXml : un CMS léger et sans base de données
Un CMS, pour faire simple et rapide, c'est un moteur de site web qui va vous permettre de créer, via un backoffice, des pages, des articles, il vous permettra de gérer des utilisateurs, des catégories, etc. Comme je le disait en introduction, les CMS sont multiples et s'adressent à des projets différents. Pour notre Raspberry Pi, il faut une solution simple, légère et surtout sans base de données. Un MySQL est tout de même trop gourmand pour notre serveur et c'est d'autant plus dommage que nous avons installé NGINX qui se veut lui même très léger.
En tant que CM du projet PluXml, je ne peux que vous le conseiller pour auto-héberger vote site web sur un Raspberry Pi. Ce CMS fonctionne sans base de donnée, et se veut très léger. On télécharge un nouveaux virtualhost et on installe PluXml dans /var/www/pluxml/.
Pour accéder au site web on lance un navigateur on tape dans la barre d'adresse l'IP du Raspberry Pi. Attention aux conflits de virtualhost. Si deux virtualhost utilisent le même numéro de port ou le même "ServerName", Nginx les ignorera. Il faut donc, par exemple, modifier le numéro de port ("80" par defaut) de l'un des deux virtualhost, puis de redémarrer Nginx. Enfin, pour vous connecter au site par le port 88 (par exemple), tapez dans la barre d'adresse : "@ip:88" (en remplaçant "@ip" par l'adresse IP du Raspberry Pi).
Pour plus d'information (documentation, forum, etc), je vous renvoi au site officiel : pluxml.org
Rendre accessible à Internet, son site auto-hébergé
La première chose à faire, c'est de placer son Raspberry Pi dans la DMZ de sa box Internet. Ainsi, tous le trafic arrivant d'Internet sur votre box est ouvert et redirigé vers l'adresse IP de votre Raspberry Pi.
On ne bénéficie pas tous d'une adresse IP public statique et interroger sa DMZ avec une adresse IP public dynamique, il n'y a rien de plus fastidieux. L'astuce c'est de configurer sur sa box un compte DynDNS. Celui-ci va permettre d'associer un DNS (du type p3ter.dyndns.org) à l'adresse IP de la box, et chaque fois que cette IP changera, l'association avec le DNS sera mis à jour. Commencez donc par créer un compte (gratuit) sur dyndns.org, puis configurer un "host" (DNS + IP actuelle de la box), avant de reporter votre identifiant et mot de passe dans la configuration de votre box.
Enfin, si vous avez acheté un DNS pour votre site web, il suffit dans la configuration de votre compte chez votre registrar (exemple : OVH) de faire une redirection vers votre nom DynDNS.La mise à jour des
serveurs DNS publics peut prendre quelques heures avant d'enregistrer vos IP et nom DNS.
Sécurité
Rapidement, quelques points de sécurité à mettre obligatoirement en place si on ne veut pas compromettre son serveur web.
Configurer SSH
Une petite chose simple à faire c'est de désactiver la possibilité de se connecter en SSH avec l'utilisateur root
Firewall
Pour notre firewall, le plus simple reste un script avec des commandes iptables (moteur Netfilter). La aussi, je vous propose mon fork d'un script de Nicolargo.
Attention : la commande "sudo /etc/init.d/firewall start" bloque tous les accès au serveur. Pour tout autoriser il faut lancer la commande "sudo /etc/init.d/firewall clear"
Un autre outil de sécurité qui faut installer : fail2ban. Installez simplement le paquet, la configuration par défaut suffit pour une protection minimale. Le rôle de fail2ban est de bloquer (par défaut) les adresses IP qui tentent des connexions SSH en brute force sur votre serveur. Attention, car avec la configuration par défaut, si vous vous trompé trois fois de mot de passe SSH (en connexion depuis Internet), vous serez banni par fail2ban pendant 1 heure.
Pour plus d'informations sur fail2ban, je vous conseil cet article de Nicolargo.
Si vous avez des questions, des remarques, des problèmes ou autre, n'hésitez pas à intervenir en commentaire ou sur Github.
Photo : David Jones (Creative Commons)
#1 - Philippe a dit :