Apache HTTPD : Configurer mod_wsgi pour utiliser Python 3

Configurer Apache HTTPD pour utiliser un service web Python 3 avec le framework Flask et le module Apache HTTPD mod_wsgi et non pas mod_proxy.
  • Administration système
Configurer un webservice Python avec Apache HTTPD
Logo Python 3

Configurer un webservice Python Flask sur Apache HTTPD

J’ai créé un webservice en Python pour une application maison. J’ai donc utilisé Flask, qui est parfait pour créer très rapidement un webservice. Seulement sur le serveur de production, c’est Apache HTTPD qui tourne. J’ai donc commence par utiliser mod_proxy pour faire un pont entre Flask et HTTPD. Je ne sais pas pourquoi, je n’ai pas réussi à garder le referer dans les requêtes GET / POST, du coup la sécurité CORS m’empêchait de passer par cette méthode.

Comment configurer un webservice Python avec Apache HTTPD ?

En fait c’est plutôt simple, mod_wsgi permet de créer un démon qui va se charger de lancer notre application Python.

Installer mod_wsgi

Installer Python 2 sous CentOS 7

yum -y install mod_wsgi

Installer Python 3 sous CentOS 7

CentOS 7 : Installer Python3 et mysqlclient

Installer Python2 sous Debian / Ubuntu

apt install libapache2-mod-wsgi

Configurer mod_wsgi pour son webservice Python Flask

Créer un fichier app.wsgi à la racine du dossier de votre dossier Python.

import sys
sys.path.insert(0, '/var/www/melico-back')
from app import app as application

Voici un extrait de mon fichier app.py.

from config import Config
from flask import Flask

import daemon

app = Flask(__name__)

if __name__ == "__main__":

    # test
    if Config.DEBUG:
        app.run(debug=True)
        
    # prod
    else:
        with daemon.DaemonContext():
            app.run(threaded=True)

Configurer mod_wsgi sur Apache HTTPD 2.4 avec Python 3

Voici mon fichier de configuration pour vhost.conf.

WSGISocketPrefix run/wsgi
 
<VirtualHost 0.0.0.0:443>

   ServerName back.melico.fr

   SSLEngine on        
   SSLCertificateFile /etc/letsencrypt/live/back.melico.fr/cert.pem        
   SSLCertificateKeyFile /etc/letsencrypt/live/back.melico.fr/privkey.pem
   
   LogLevel Debug        
   ErrorLog /var/log/httpd/back.melico.fr/error.log

   WSGIDaemonProcess app user=httpd group=httpd threads=5 
   WSGIScriptAlias / /var/www/melico-back/app.wsgi
   WSGIPassAuthorization On

   <Directory /var/www/melico-back>        
      WSGIProcessGroup app        
      WSGIApplicationGroup %{GLOBAL} 
      Require all granted
   </Directory>

   <Files app.wsgi>
      Require all granted
   </Files>

   SSLCertificateChainFile /etc/letsencrypt/live/back.melico.fr/chain.pem

</VirtualHost>

On peut voir qu’Apache HTTPD se charge de créer un démon Python pour exécuter notre application.

Article publié le

Dernière modification le

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.