🛠 Héberger un serveur web léger sur 256 MB de RAM
Objectifs
Transformer le Model B Rev 1 en petit serveur web permanent, en tenant compte de ses deux goulots : 256 MB de RAM partagée CPU/GPU et Ethernet 10/100 derrière la puce LAN9512. Apache est exclu ; on choisit lighttpd (ou busybox httpd) avec quelques pages statiques et un endpoint de statut. Vous apprendrez à dimensionner gpu_mem, servir en systemd et mesurer le débit réel.
Matériel
- Raspberry Pi Model B Rev 1 sous image legacy 32 bits (lite, sans bureau)
- Réseau Ethernet filaire (pas de WiFi sur cette carte)
sudo apt install -y lighttpd curl- Carte SD en écriture limitée : éviter les journaux verbeux, la SD s'use.
Code complet
# 1) Liberer de la RAM pour le CPU : /boot/config.txt -> gpu_mem=16
# (pas d'usage GPU prevu), puis sudo reboot
# 2) Installer et démarrer lighttpd
sudo apt install -y lighttpd
sudo systemctl enable --now lighttpd
# 3) Page de statut dynamique (CGI shell minimal)
sudo mkdir -p /srv/www && echo 'server.document-root = "/srv/www"' | sudo tee /etc/lighttpd/conf-enabled/99-site.conf
printf '#!/bin/sh\necho "Content-Type: text/plain"\necho\nvcgencmd measure_temp\nvcgencmd measure_clock arm\nfree -m | head -2\n' | sudo tee /srv/www/status.cgi
sudo chmod +x /srv/www/status.cgi
echo 'cgi.assign = ( ".cgi" => "" )' | sudo tee -a /etc/lighttpd/conf-enabled/99-site.conf
sudo systemctl restart lighttpd
# 4) Tester depuis un autre poste
curl http://192.168.1.50/status.cgi
# 5) Debit reel (test depuis le PC, attendez-vous a ~5-9 MB/s max)
scp page-test-10Mo.bin pi@192.168.1.50:/tmp/
Vérification attendue
curl 1 renvoie la température, l'horloge ARM et la mémoire libre. free -m` montre 150-200 MB disponibles avec lighttpd seul. Le serveur reste stable en service permanent ; le débit de transfert plafonne à quelques MB/s, cohérent avec l'Ethernet 100 Mbps partagé avec l'USB.
Erreurs fréquentes
- Installer Apache ou Nginx avec PHP : sur 256 MB (dont gpu_mem par défaut 64-128 MB), l'OOM tue les workers ; réduire gpu_mem et rester sur lighttpd.
- Oublier
gpu_mem=16: sans usage vidéo, on gaspille un quart de la RAM. - CGI shell sur chaque requête : vcgencmd est lent sur ARM11, cacher les résultats (fichier régénéré par cron) si le trafic augmente.
- Logs lighttpd en boucle sur la SD : activer la rotation ou logger en mémoire.
- Exposer le serveur sur Internet sans proxy ni pare-feu : la carte n'a pas de chiffrement matériel, le HTTPS léger (lighttpd + SSL) consomme beaucoup de CPU par requête.
Autres tutoriels pour cette carte
- Allumer une LED via le GPIO avec libgpiod
- Lire un bouton poussoir et afficher l'état dans la console
- Premier script Python : faire clignoter la LED
- Variation d'intensité LED avec le PWM matériel (et son piège)
- Lire un capteur I2C (température/humidité) sur le bus 1
- Configurer l'Ethernet 10/100 et piloter le Pi en SSH
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython