/ Raspberry

Hébergement "maison"

Je vais présenter mon auto-hébergement que j'ai mis en place chez moi depuis désormais 6 mois, après plus d'un an de tests successifs sur plusieurs systèmes divers et variés.

J'ai commencé par le biais du Raspberry Pi 2 B dont j'avais fait l'acquisition en 2015, (j'en ai trois désormais). Ce premier Raspberry je l'ai fait chauffé et dieu que je l'ai éprouvé en le réinitialisant moultes fois :)

Il a d'abord été question de serveur Owncloud puis de Serveur FTP/SMB, voir même de Yunohost puis finalement je suis parti sur une structure que je possède depuis un an, avec un Raspberry Pi 3 dont j'ai fait l'acquisition par la suite. J'en suis très satisfait, il est positionné sous ma télé, branché directement en ethernet à ma box et je n'ai pas connu le moindre bug. Il tourne sous Raspbian évidemment mais sans interface graphique, juste en ligne de commande. Je prends la main dessus en SSH sur mon réseau local à l'ip 192.168.X.X:22

J'ai installé l'organisation suivante dessus :

Screenshot-2017-07-09-at-17.11.52-1

Grâce à mon Raspberry positionné derrière la Box avec ip statique, je commence par créer un serveur web apache sur le port 80 comme ceci :

labriqueinternet-schema-1

Installation d’Apache

te-le-chargement-1-1

Avant d’installer le serveur, assurons nous d’avoir une machine bien à jour. Pour ce faire nous devons posséder les droits administrateur, soit en étant connecté en root, soit via la commande sudo.

sudo aptitude update 
sudo aptitude upgrade

Une fois la Raspberry Pi à jour, nous allons installer le serveur Apache.

sudo aptitude install apache2

Au passage, nous allons en profiter pour donner des droits au dossier d’apache qui vous permettra de facilement administrer les sites. Pour cela, lancez les commandes suivantes :

sudo chown -R pi:www-data /var/www/html/ 
sudo chmod -R 770 /var/www/html/

Vérifier qu’Apache fonctionne

Une fois l’installation terminée, nous pouvons tester qu’Apache fonctionne correctementen nous rendant sur l’adresse de la Raspberry.
Pour cela, il faut tenter d’accéder à la Raspberry depuis le port 80 (ce port n’étant pas encore ouvert depuis l’extérieur, il faudra le faire depuis la Raspberry elle-même).
Utilisez le SSH pour vous connecter à votre Raspberry ou saisissez l'ip de votre Raspberry Pi dans un navigateur sur une machine connectée au réseau.
Là vous devriez avoir une page comme celle-ci :

apache-it-works-1

Apache utilise le répertoire « /var/www/html » comme racine pour votre site. Cela signifie que quand vous appelez votre Raspberry sur le port 80 (http), Apache cherche le fichier dans « /var/www/html ».

Par exemple, si vous appelez l’adresse « http://127.0.0.1/example », Apache cherchera le fichier « example » dans le répertoire « /var/www/html ».
Pour ajouter de nouveaux fichiers, sites, etc., vous devrez donc les ajouter dans ce répertoire.

Installation de PHP sur la Raspberry

Ici, quand nous parlons d’installer PHP, cela signifie que nous allons installer l’interpréteur, afin d’utiliser le langage.

Installer PHP

On va encore une fois faire appel à l’administrateur pour installer PHP avec la ligne de commande.

*sudo aptitude install php *

J'ai ensuite fait le choix de développer ma page perso' pour mon réseau local, vous la trouverez ici. C'est un template-bootstrap intitulé Admin LTE dont je me suis inspiré pour l'adapter à mes besoins. C'est assez simple, du CSS/HTML, un poil de PHP et le tour est joué.

Ensuite, une fois mon site perso' disponible à l'adresse http://192.168.1.X:80, j'ai choisi de faire le nécessaire pour pouvoir accéder à ce site depuis l'extérieur, ce qui revient à dire de l'auto-hébergement sur Rpi :)

Cela fonctionne du tonnerre, voici comment je m'y suis pris :

Maintenant que je possède un serveur web sous Raspbian opérationnel en local. C’est-à-dire que je ne peux pas y accéder depuis un autre réseau que celui ou se trouve mon Raspberry Pi.
Le réseau où se trouve mon Rpi, c’est celui du modem (la box), Bouygues en l'occurence chez moi, à laquelle j'accède par le biais de l'ip de ma passerelle à savoir 192.168.1.254.

Si vous voulez diffuser des données à travers les réseaux du monde entier, et en premier lieu internet, cela implique que votre serveur soit accessible depuis n’importe quelréseau, depuis n’importe quelle machine, et non pas uniquement depuis les ordinateurs branchés sur le même réseau que votre Raspberry.

Le serveur doit être accessible depuis l’extérieur.

Les fournisseurs d’accès, nous fournissent donc une box, qui va nous permettre d’accéder à internet en branchant vos équipements sur cette dernière, soit par câble, soit par wifi. Et seule cette box possède une adresse IP sur le réseau internet (les autres équipements en possédant une sur le réseau interne). Cela signifie donc que si vous tentez d’accéder à votre ordinateur via votre adresse IP visible, et ce depuis un réseau externe, vous allez en fait tenter d’accéder à votre box. Hors, comme cette dernière ne possède pas de serveur web en écoute (en fait, elle en possède un, mais qui n’écoute que sur le réseau interne), vous aurez alors une erreur du type serveur inaccessible.

Pour cela, il va falloir accéder à l’interface de configuration de votre box. L’accès se fait différemment selon votre Fournisseur d’Accès Internet. Il faut donc que vous cherchiez (par exemple sur le site de votre fournisseur d’accès, ou plus simplement via votre moteur de recherche préféré) comment accéder à l’interface d’administration de votre box (j'ai indiqué comment j'ai fait pour ma part plus haut avec une Bbox voici à quoi cela ressemble) :

Screenshot-2017-07-09-at-16.49.09

Une fois sur l’interface d’administration, et après vous être authentifié, vous allez pouvoir ouvrir les ports de votre box et rediriger les requêtes vers le serveur Apache.
Cette configuration se fait dans une partie qui peut avoir plusieurs noms, « configuration NAT », « Gestion des redirections de ports », « port forwading », etc.
Une fois que vous êtes dans la catégorie de configuration adaptée, le reste de la procédure est sensiblement équivalente pour l’ensemble des FAI. Vous allez mettre en place deux redirections différentes :

Type de requête Port externe de la requête Port interne de la redirection Protocole employé Équipement cible
HTTP 80 80 TCP raspberry*
HTTPS 443 443

Voici un exemple de règle TCP fixé sur ma box pour mon serveur d'hébergement local :

Screenshot-2017-07-09-at-16.38.18

En mettant en place ces redirections, vous allez en fait rediriger les requêtes web, c’est-à-dire celles utilisant les protocoles HTTP (port 80) et HTTPS (port 443), vers votre système Raspbian, qui fait tourner le serveur Apache.
Lors de la réception d’une requête par votre box, elle la redirigera donc sur votre Raspberry, ou elle sera analysée par Apache, qui retournera au client qui a effectué la requête les ressources adaptées.

Voilà, votre serveur web est désormais accessible depuis l’extérieur. Vous pouvez donc vous arrêter là. Cependant, vous ne pouvez y accéder que par votre adresse IP, ce qui n’est pas vraiment pratique. Il serait tout de même beaucoup plus agréable d’accéder à votre serveur via une adresse URL. Et ça tombe bien, il existe une technique pour ça, c’est le DynDNS.

DynDNS est un service qui permet à un utilisateur qui possède une IP dynamique de pouvoir malgré cela utiliser une adresse URL. Il permet donc de donner un DNS (qui associe une IP à une adresse URL), à une adresse dynamique (DynamiqueDNS). Ainsi, j'ai fait le choix de me rendre sur le site suivant : http://noip.com.

Screenshot-2017-07-09-at-16.50.35

Là dessus j'ai crée un compte gratuit qui me permet de bénéficier et de choisir un nom de domaine pour mon site. L'offre Free account ne permet malheureusement pas de trouver une url dite "classique" avec pour terminaison .fr ou .com ou encore .io. Vous aurez plutôt le choix entre .xzf ou .ddns.net, c'est ce que j'ai choisi me concernant. Une fois le compte crée et l'url choisie, vous recevrez un mail d'activation, procédure habituelle du web.

Il ne vous reste plus qu’à configurer votre box pour qu’elle soit reliée à ce compte.

Pour cela, il va de nouveau falloir accéder à l’interface de votre box, puis à une section qui sera probablement définie comme « DynDNS ».

Une fois ceci fait, choisissez l’utilisation de No-IP, puis renseignez comme nom d’hôte l’adresse « Hostname » que vous aviez définie sur noip.com, ainsi que les identifiants du compte noip.com.

Votre box est maintenant liée au service DynDNS de noip.com. Le déploiement de l’adresse peut prendre un peu de temps.

Voilà, vous avez désormais un serveur web accessible depuis l’extérieur. Il ne vous reste plus qu’à transférer les fichiers de votre site web dans le dossier « /var/www »,  et votre système Raspbian sera accessible depuis n'importe quel point de connexion.

J'ai donc ensuite patienté quelques minutes et en saisissant l'url de mon raspberry en port 80 sur un navigateur web, je suis arrivé sur ma magnifique page d'accueil perso' :

Screenshot-2017-07-09-at-17.11.52--1-

Et voilà, c'est réussi et c'est vraiment plaisant à utiliser, d'autant plus que le raspberry peut servir à autre chose qu'à un simple serveur web. Par exemple on peut y faire tourner plusieurs applications web et faire comme j'ai choisi de faire, c'est à dire utiliser le bandeau de gauche pour ajouter des icônes précisant vers quel service accéder en cliquant dessus :

Screenshot-2017-07-09-at-17.20.56

Cela nous ouvre une page PHP configurée par vos soins et vous ouvre l'application web en question, ici Gogs mais j'aurai pu faire l'exemple avec mon Owncloud local, mon outil de supervision du Rpi ou encore un éditeur de texte.

Cette démonstration s'achève ici, amusez-vous bien !