Web Server Python et Flask
Cet article détaille comment monter un server web local sur un raspberry pi en moins de 5mn, avec Python et Flask. Ce serveur ne sera pas ouvert à l’extérieur, donc on va aller au plus simple niveau architecture: pas de reverse proxy, pas de serveur de réplication WYSIWIG et pas de serveur de base de données: tout va tenir sur un seul Raspberry pi. L’objectif est de pouvoir consulter depuis son smartphone ou un ordinateur connecté au même réseau local les services de ce serveur web.
Hardware
Un simple raspberry pi avec une connectivité wifi ou réseau est nécessaire. Dans mon cas je suis parti avec un Raspberry pi4 8Go dans un boîtier Argon One où le système est installé sur un SSD M.2 nvme de 128Go. Cette configuration me permet de bénéficier d’une solution fanless. Une sd card de 32Go est largement suffisante mais l’installation et le démarrage du système est beaucoup plus rapide avec un ssd M.2 nvme. J’ai utilisé l’OS LITE 64bit Raspberry pi OS car je n’ai pas besoin d’interface graphique.
Software
Structure
La structure du code minimale pour notre server web est la suivante:
- Le programme principal demo.py à la racine.
- Les dépendances à installer si vous passez par un environnement virtuel: requirements.txt.
- Un dossier /static dans lequel figure le dossier /css avec les styles de nos pages.
- Un dossier /templates dans lequel figurent les pages html du site.
Installation
Tout le code démo est à récupérer sur mon Github, dans le dossier /demo
Déposez tous les fichiers du répertoire /demo en respectant bien la structure décrite ci-dessus.
Si vous n’utilisez pas d’environnement virtuel (venv), il faut installer la bibliothèque Flask.
pip install Flask
Sinon, il suffit d’installer les dépendances du requirements.txt:
pip install -r requirements.txt
Usage
pour démarrer le serveur WEB, rien de plus simple, il suffit d’exécuter le programme demo.py
python demo.py
Le site WEB est alors accessible en local sous l’adresse http://127.0.0.1:5000
Un bashtop montre que cette configuration n’occupe que 1Go de RAM et 12% de CPU (sachant que bashtop perturbe bien la mesure)
