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 gestionnaire de paquets :

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 Python machin.py,
  • app est l’objet principal du site (Flask) défini dans le fichier machin.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 (exemple 81) il faudra rajouter une 1ère ligne contenant Listen 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 port 80 (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/

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *