🛠 Héberger un serveur web léger
Objetivos
Transformar la Raspberry Pi 3 Model B en un pequeño servidor web permanente: servir un sitio estático, encapsularlo en un servicio systemd (inicio automático + reinicio en caso de fallo) y respetar la restricción de memoria de 1 GB, que impone el uso de servidores ligeros. Esta es la pieza básica de un panel doméstico, un Pi-hole-like o un espejo conectado.
Material
- Raspberry Pi 3 Model B con Raspberry Pi OS Lite, conectado por Ethernet (preferible al único Wi-Fi de 2,4 GHz del 3B)
- Fuente de alimentación estable de 2,5 A
- Una carpeta con archivos estáticos (index.html, CSS)
- Python 3 (incluido) o
nginx-lightpara una opción más robusta
Código completo
# 1) Dossier du site
mkdir -p ~/site && echo '<h1>Pi 3B opérationnel</h1>' > ~/site/index.html
# 2) Service systemd — serveur Python intégré, port 8080
sudo tee /etc/systemd/system/pisite.service <<'EOF'
[Unit]
Description=Site statique du Pi 3B
After=network-online.target
[Service]
User=pi
WorkingDirectory=/home/pi/site
ExecStart=/usr/bin/python3 -m http.server 8080 --bind 0.0.0.0
Restart=always
RestartSec=3
MemoryMax=200M
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now pisite
sudo systemctl status pisite --no-pager
# 3) Test local puis distant
curl -s http://localhost:8080/ | head -1
# depuis un autre poste : curl http://raspberrypi.local:8080/
Verificación esperada
systemctl status pisite muestra active (running). curl 2 devuelve el <h1> del sitio, y desde otro equipo de la red, http://raspberrypi.local:8080/ muestra la página en el navegador. Tras kill del proceso, systemd lo reinicia en 3 s. systemd-run/free -m muestra la huella de memoria por debajo del límite MemoryMax=200M`. Tras un reinicio completo, el servicio se levanta solo.
Errores frecuentes
- Elegir Apache completo en 1 GB: la máquina se satura; preferir
python3 -m http.server(solución temporal) onginx-light(permanente). - Servir por HTTP en el puerto 80 como root: preferir 8080 sin privilegios, o
authbind/cap_net_bind_service. Address already in use: otro servicio ocupa el puerto; verificar conss -tlnp | grep 8080.- Publicar por Wi-Fi de 2,4 GHz saturado: el 3B solo tiene una antena 802.11n de banda simple; cablear Ethernet 100 Mbit para un servicio estable.
- Olvidar
enable: el servicio se inicia ahora pero no tras un reinicio. - Exponer el servidor a Internet sin túnel ni cortafuegos: mantenerlo local o usar un proxy inverso con TLS.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython