🛠 Héberger un serveur web léger
Objectifs
Transformer le Raspberry Pi 3 Model B en petit serveur web permanent : servir un site statique, l'encapsuler dans un service systemd (démarrage automatique + redémarrage en cas de crash), et respecter la contrainte mémoire de 1 Go qui impose des serveurs légers. C'est la brique de base d'un dashbord domestique, d'un Pi-hole-like ou d'un mirroir connecté.
Matériel
- Raspberry Pi 3 Model B sous Raspberry Pi OS Lite, connecté en Ethernet (préférable au Wi-Fi 2,4 GHz unique du 3B)
- Alimentation stable 2,5 A
- Un dossier de fichiers statiques (index.html, CSS)
- Python 3 (inclus) ou
nginx-lightpour une option plus costaud
Code complet
# 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/
Vérification attendue
systemctl status pisite affiche active (running). curl 2 renvoie le <h1> du site, et depuis un autre poste du réseau http://raspberrypi.local:8080/ affiche la page dans le navigateur. Après kill du processus, systemd le relance en 3 s. systemd-run/free -m montre l'empreinte mémoire sous la limite MemoryMax=200M`. Après redémarrage complet, le service remonte tout seul.
Erreurs fréquentes
- Choisir Apache complet sur 1 Go : la machine sature ; préférer
python3 -m http.server(dépannage) ounginx-light(permanent). - Servir en HTTP sur port 80 en root : préférer 8080 sans privilège, ou
authbind/cap_net_bind_service. Address already in use: un autre service occupe le port ; vérifier avecss -tlnp | grep 8080.- Publier en Wi-Fi 2,4 GHz encombré : le 3B n'a qu'une antenne 802.11n simple bande ; câbler l'Ethernet 100 Mbit pour un service stable.
- Oublier
enable: le service démarre maintenant mais pas après reboot. - Exposer le serveur sur Internet sans tunnel ni pare-feu : rester en local ou passer par un reverse-proxy avec TLS.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython