Outils pour utilisateurs

Outils du site


micro-serveur-web

Un microserveur basse consommation pour héberger un site web

0 - But

L'idée est de démontrer qu'il est possible d'héberger un site web à bas coût et basse consommation énergétique (directe), éventuellement hors grille énergétique (solaire ou batterie) et hors réseau Internet (accès wifi)

Est-il pour autant ecolowtech ?

1 - Matériel

  • Un ordinateur sous Linux
  • Un Raspberry Pi Zero W
  • Une carte mémoire microSD d'au moins 8Go pour le système d'exploitation
  • Un câble microUSB pour alimenter le Raspberry Pi
  • Une batterie USB OU Un panneau solaire capable de délivrer au moins 100mA en 5V

2 - Installer et configurer le système d'exploitation

  • Télécharger Raspberry Pi OS Lite. Ici on a choisi la version Lite (Headless), car nous voulons réduire la consommation et n'avons pas besoin d'une interface de bureau
  • Écrire l'image téléchargée sur la carte microSD (via l'utilitaire GNOME Disques, Etcher, ou une autre méthode)
  • Sur la carte mémoire, aller dans le répertoire /boot/
  • Créer un fichier /boot/ssh vide pour activer le SSH sur le Raspberry (désactivé par défaut)
touch /boot/ssh
  • Créer un utilisateur et son mot de passe AVANT LE PREMIER DÉMARRAGE DU PI :
USER='pi'
PASSWORD='raspberry'
SALT='lalabomedia'
NAME=$(eval openssl passwd -6 -salt '$SALT' -stdin <<< '$PASSWORD')
echo $USER':'$NAME | sudo tee /boot/userconf.txt
  • Connecter le Raspberry à votre réseau :
    • Soit en filaire
    • Soit en wifi : sur la carte mémoire, créer un fichier /boot/wpa_supplicant.conf qui contiendra :
echo 'country=FR
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
	ssid="Nom du wifi"
	psk="Mot de passe du wifi"
	key_mgmt=WPA-PSK
}' | sudo tee /boot/wpa_supplicant.conf
  • Éjecter proprement la carte SD
  • L'insérer dans le Raspberry
  • Allumer le Raspberry

3 - Trouver son Raspberry

Il s'agit de retrouver l'IP de son Raspberry sur le réseau auquel on l'a connecté. Pour cela, soit :

  • Se connecter à l'interface du routeur si on y a accès, et retrouver son appareil dans les options

OU

  • Regarder l'IP de l'ordinateur avec lequel on se connecte, par exemple 192.168.0.13, et ne conserver que les 3 premiers octets (192.168.0)
  • Lancer un terminal et exécuter la commande suivante, avec les 3 premiers octets et en terminant par 0 (via sudo, sinon on ne verra pas le nom des machines)
sudo nmap -sn 192.168.0.0/24

Si nmap n'est pas installé, tapez la commande suivante :

sudo apt install nmap

Vous devriez avoir un appareil intitulé “Raspberry Pi Foundation”, retenez son IP. Parfois le nom n'apparait pas. Cherchez alors un autre appareil probablement intitulé “Unknown”

4 - Se connecter à son Raspberry

Nous allons nous connecter en SSH au Raspberry, avec dans un terminal la commande suivante :

ssh pi@IP_QUE_VOUS_AVEZ_TROUVE
  • Le terminal vous demandera si vous faites confiance à cette machine. Tapez “yes” puis Entrée
  • Le terminal vous demandera le mot de passe. On a réglé plus haut ce mot de passe à “raspberry”

Vous êtes désormais connecté au Raspberry !

5 - Générer un wifi depuis le Raspberry Pi

  • Partie point d'accès wifi (créer un réseau wifi) :
WIFINAME='CourtCircuit'
sudo apt install hostapd
echo 'interface=wlan0
driver=nl80211
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=0
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ssid='$WIFINAME | sudo tee -a /etc/hostapd/hostapd.conf
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl restart hostapd
  • Partie IP fixe du serveur
echo 'interface wlan0
static ip_address=192.168.0.254/24' | sudo tee -a /etc/dhcpcd.conf

6 - Réorienter n'importe quelle URL vers le Raspberry Pi

  • Le DHCP-range indique les adresses IP que le wifi peut distribuer à ceux qui se connectent
  • Les lignes de type “address” spécifient une règle de DNS (résolution de nom de domaine). Ici on indique que quelque soit l'URL utilisée, on renvoie sur l'IP fixe du Raspberry Pi.
sudo apt install dnsmasq
echo 'interface=wlan0
dhcp-range=192.168.0.1,192.168.0.253,255.255.255.0,24h
cache-size=0
address=/#/192.168.0.254' | sudo tee -a /etc/dnsmasq.conf
sudo systemctl unmask dnsmasq
sudo systemctl enable dnsmasq
sudo systemctl restart dnsmasq

7 - Installer un serveur web HTTP léger

sudo apt install lighttpd
sudo mv /var/www/html/index.lighttpd.html /var/www/html/index.html

A vous de copier le contenu de votre site web dans /var/www/html

8 - Optimiser la consommation du Raspberry Pi

On obtient une consommation totale de 50mA à 5V, soit 0,25W

  • Extinction du port HDMI(-20mA?) :
sudo sed -i 's/vc4-kms-v3d/vc4-fkms-v3d driver/' /boot/config.txt
echo '@reboot /usr/bin/tvservice -o' | sudo tee -a /etc/crontab
  • Extinction de la LED(-5mA?) :
echo 'dtparam=act_led_trigger=none
dtparam=act_led_activelow=on' | sudo tee -a /boot/config.txt

9 - Et voualà !

Il suffit de se connecter au wifi généré, et d'aller sur n'importe quelle URL qui redirigera sur le site hébergé par le Raspberry Pi.

1000 - One shot script - Avant branchement

Aller sur la carte SD dans /boot/

#!/bin/bash
# SSH activation BEFORE FIRST BOOT !!!!!!!!!
touch ssh
# SSH credentials
USER='pi'
PASSWORD='raspberry'
SALT='lalabomedia'
NAME=$(eval openssl passwd -6 -salt '$SALT' -stdin <<< '$PASSWORD')
echo $USER':'$NAME | sudo tee userconf.txt
# Wifi connection
WIFISSID='MonWifi'
WIFIPASSWORD='MonMotDePasseWifi'
echo 'country=FR # Your 2-digit country code
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev # Include this line for Stretch
network={
    ssid="'$WIFISSID'"
    psk="'$WIFIPASSWORD'"
    key_mgmt=WPA-PSK
}' | sudo tee wpa_supplicant.conf

2000 - One shot script - Une fois connecté en SSH

#!/bin/bash
WIFINAME='CourtCircuit'
sudo apt install hostapd dnsmasq lighttpd
echo 'interface=wlan0
driver=nl80211
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=0
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ssid='$WIFINAME | sudo tee -a /etc/hostapd/hostapd.conf
echo 'interface wlan0
static ip_address=192.168.0.254/24' | sudo tee -a /etc/dhcpcd.conf
echo 'interface=wlan0
dhcp-range=192.168.0.1,192.168.0.253,255.255.255.0,24h
# pas de cache
cache-size=0 
# on indique via dnsmasq que toutes les requêtes vont vers l'ip locale
address=/#/192.168.0.254' | sudo tee -a /etc/dnsmasq.conf
sudo mv /var/www/html/index.lighttpd.html /var/www/html/index.html
sudo systemctl unmask hostapd dnsmasq
sudo systemctl enable hostapd dnsmasq
sudo systemctl restart hostapd dnsmasq
sudo sed -i 's/vc4-kms-v3d/vc4-fkms-v3d driver/' /boot/config.txt
echo '@reboot /usr/bin/tvservice -o' | sudo tee -a /etc/crontab
echo 'dtparam=act_led_trigger=none
dtparam=act_led_activelow=on' | sudo tee -a /boot/config.txt
# Put content in /var/www/html/
micro-serveur-web.txt · Dernière modification : 2022/07/05 10:34 de manumerique