🛠 Héberger un serveur web léger sur 256 MB de RAM
Objetivos
Transformar el Model B Rev 1 en un pequeño servidor web permanente, teniendo en cuenta sus dos cuellos de botella: 256 MB de RAM compartida entre CPU/GPU y Ethernet 10/100 detrás del chip LAN9512. Apache está excluido; se elige lighttpd (o busybox httpd) con algunas páginas estáticas y un endpoint de estado. Aprenderás a dimensionar gpu_mem, servir mediante systemd y medir el rendimiento real.
Hardware
- Raspberry Pi Model B Rev 1 con imagen legacy de 32 bits (lite, sin escritorio)
- Red Ethernet por cable (no hay WiFi en esta placa)
sudo apt install -y lighttpd curl- Tarjeta SD con escrituras limitadas: evita los registros verbosos, la SD se desgasta.
Código completo
# 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 demarrer 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/
Verificación esperada
curl 1 devuelve la temperatura, la frecuencia del reloj ARM y la memoria libre. free -m` muestra 150-200 MB disponibles solo con lighttpd. El servidor permanece estable en servicio permanente; el rendimiento de transferencia se limita a unos pocos MB/s, coherente con el Ethernet 100 Mbps compartido con el USB.
Errores frecuentes
- Instalar Apache o Nginx con PHP: sobre 256 MB (de los cuales gpu_mem por defecto son 64-128 MB), el OOM mata los workers; reduce gpu_mem y quédate con lighttpd.
- Olvidar
gpu_mem=16: sin uso de vídeo, se desperdicia un cuarto de la RAM. - CGI shell en cada petición: vcgencmd es lento en ARM11, oculta los resultados (archivo regenerado por cron) si aumenta el tráfico.
- Logs de lighttpd en bucle sobre la SD: activa la rotación o registra en memoria.
- Exponer el servidor a Internet sin proxy ni cortafuegos: la placa no tiene cifrado por hardware, el HTTPS ligero (lighttpd + SSL) consume mucha CPU por petición.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython