Plus d'informations : How to Install Apache with Python Mod_wsgi on Debian 10

Vous souhaitez exécuter du Python au travers de Apache, ceci est possible avec WSGI. Le principe est le même qu’avec PERL, le but est de renvoyer au navigateur ce qu’il attend i.e. une page Web.

Installation des modules nécessaires

sudo apt-get install apache2 apache2-utils ssl-cert libapache2-mod-wsgi-py3 -y

Autoriser l’exécution des scripts wsgi

a2enmod wsgi
systemctl apache2 restart

Alias permettant l’exécution d’un script

La documentation de référence indique de mettre cet alias au niveau de la configuration du serveur ou du virtualhost (référence) et non comme je l’ai trouvé sur Internet dans la configuration du module.

J’ai activé par défaut le ssl donc, éditer /etc/apache2/sites-enabled/default-ssl.conf et ajouter la ligne suivante :

WSGIScriptAlias /wsgi    /var/www/wsgi-scripts/wsgi.py

Relancer Apache :

systemctl apache2 restart

Exemple de fichier pour démonstration : /var/www/wsgi-scripts/wsgi.py

def application(environ,start_response):
	status = '200 OK'
	html = '<html>\n' \
	'<body>\n' \
	'<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">\n' \
	'Welcome to Apache with mod_wsgi \n' \
	'</div>\n' \
	'</body>\n' \
	'</html>\n'
	response_headers = [('Content-type','text/html'),('Content-Length', str(len(html)))]
	start_response(status,response_headers)

	return [html.encode('UTF-8')]

L’ouverture du navigateur sur la page https://localhost/wsgi permettra l’exécution du script Python qui a été pointé.

Apache with mod_wsgi (directory)

Alias permettant l’exécution de scripts

Comme indiqué dans la documentation de référence, WSGIScriptAlias permet de pointer vers un répertoire sur lequel nous allons pouvoir exécuter les scripts.

Dans le fichier /etc/apache2/sites-enabled/default-ssl.conf et modifier la la ligne précédente en :

WSGIScriptAlias /wsgi    /var/www/wsgi-scripts/wsgi.py

On remarquera l’ajout dans l’URL du script à exécuter.

Apache with mod_wsgi (directory)

Mise en application dans un éditeur d’entête mail

Pour la démonstration, nous allons utiliser le source GitHub de https://github.com/cyberdefenders/email-header-analyzer. Ce programme est fonctionnel et peut être exécuté directement au travers de Flask ou avec l’outil gunicorn.

Le programme server.py est renommer en mha.py et l’ensemble des dépendances à ce programme disposé au niveau du répertoire /var/www/wsgi-scripts/.

Il reste donc à créer une interface wsgi pour appeler cet applet Python, pour se faire nous allons créer un fichier "mha.wsgi" contenant les éléments suivants :

#!/usr/bin/python3

import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/var/www/wsgi-scripts/')
from mha import app as application

Une ligne primordiale est "sys.path.insert(0, ’/var/www/wsgi-scripts/’)" qui va permettre d’aller cherche notre module mha dans le répertoire /var/www/wsgi-scripts/.

Il ne reste plus qu’à modifier le fichier de configuration de Apache en y rajoutant la ligne associée à l’exécution du wsgi.

WSGIScriptAlias /wsgi    /var/www/wsgi-scripts/mha.wsgi

Accueil > Notes Techniques > Applications Web > [Apache] Mise en place de WSGI