Installer un serveur web Python
La procédure qui suit doit être faite en lignes de commande, depuis un Terminal.
Depuis VNC, on peut ouvrir un Terminal en cliquant sur l’icône .
Structure du serveur Web
Installation des paquets de Raspbian
Avant de commencer, mettre à jour le
:sudo apt-get update sudo apt-get upgrade
Installer Apache
Apache est un puissant serveur HTTP, populaire et libre de droits.
sudo apt-get install apache2
Vérification : en tapant l’adresse IP du Raspberry dans un navigateur, on doit voir apparaitre la page par défaut d’Apache :
Installer WSGI
WSGI est une interface entre des serveurs HTTP et des applications Web pour le langage Python.
sudo apt-get install libapache2-mod-wsgi-py3
Configuration du serveur Python
Supposons que nous souhaitions créer une application web nommée machin, voici la structure que nous allons construire :
L’application s’appelle machin. À la racine de son dossier, /home/machin
, on doit trouver :
- un fichier
machin.wsgi
, chargé de faire l’interface entre Python et Apache, - les fichiers Python, dont le programme principal
machin.py
, - les dossiers utiles à Python Flask (voir plus tard …) .
Construire le dossier du site
mkdir /home/pi/machin
Créer le fichier WSGI
nano /home/pi/machin/machin.wsgi
Saisir le code suivant, puis enregistrer (Ctrl+X puis o, puis Entrée) :
import sys sys.path.insert(0, '/home/pi/machin') from machin import app as application
Oui, c’est bien du Python, même si l’extension ne le dit pas.
Dans
from machin import app as application
:
machin
fait référence au module Pythonmachin.py
,app
est l’objet principal du site (Flask) défini dans le fichiermachin.py
(créé plus tard …)
Configurer Apache
Créer un nouveau fichier de configuration Apache :
sudo nano /etc/apache2/sites-available/machin.conf
avec le contenu suivant :
<VirtualHost *:80> ServerName machin WSGIDaemonProcess machin user=pi group=www-data threads=5 WSGIScriptAlias / /home/pi/machin/machin.wsgi <Directory /home/pi/machin> WSGIProcessGroup machin WSGIScriptReloading On WSGIApplicationGroup %{GLOBAL} Require all granted </Directory> ErrorLog /home/pi/machin/logs/error.log </VirtualHost>
Ce fichier renseigne le serveur Apache sur :
- le port du site :
80
Remarque : pour utiliser un port différent (exemple81
) il faudra rajouter une 1ère ligne contenantListen 81
- l’alias à utiliser pour atteindre le site (
/
) suivi du chemin du fichier de configuration wsgi (/home/pi/machin/machin.wsgi
)
l’alias
/
et le choix du port80
(le port HTTP par défaut) impliquent que l’URL sera simplement l’adresse IP du Raspberry
- le dossier où se situe le site (ici
/home/pi/machin
) - le chemin du fichier journal d’erreur (error log) (ici
/home/pi/machin/logs/error.log
)
Ce fichier est très important : il permettra d’enregistrer tous les messages d’erreur et ainsi déboguer le programme.
Pour en savoir plus : https://httpd.apache.org/docs/2.4/vhosts/examples.html
Il faut maintenant penser à créer le sous-dossier logs
:
mkdir /home/pi/machin/logs
Activer la configuration wsgi
sudo /usr/sbin/a2ensite machin.conf
Désactiver la configuration par défaut
sudo /usr/sbin/a2dissite 000-default
Redémarrer Apache
sudo service apache2 reload
ou bien
sudo systemctl reload apache2
Servir une application Web Python Flask via Apache
Supposons que l’application s’appelle machin.py
et soit placée dans le dossier /home/pi/machin/
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Machin !" if __name__ == "__main__": app.run(debug = True)
Pour plus de détails sur les fonctionnalités et l’utilisation de Flask, voir l’article Python Flask.
Vérification : si tout s’est bien passé, en tapant l’adresse IP du Raspberry dans un navigateur, on doit voir apparaitre « Machin ! » sur la page web !
En cas d’erreur « Internal Server Error »
Vérifier le fichier error.log
dans le dossier logs/
Mise à jour du code
À chaque modification du code Python (quel que soit le fichier de l’application), il faut demander à WSGI de « recompiler » les scripts Python.
Une méthode simple pour cela est de modifier (ajout/suppression d’une ligne par exemple), puis d’enregistrer le fichier machin.wsgi
.
Réinitialisation complète
En cas de fausse manœuvre et qu’il devient nécessaire de recommencer à zéro, voici comment proprement réinstaller Apache :
sudo apt-get remove --purge apache2 apache2-utils sudo apt-get install apache2
source : http://raspbian-france.fr/installer-serveur-web-raspberry/