Ceci est une ancienne révision du document !
Table des matières
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
- Partie DHCP (permettre à ceux qui se connectent d'avoir une IP) et DNS (faire que toutes les adresses web utilisées sur ce wifi pointent sur le serveur web 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
6 - 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
7 - 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
8 - 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/