Apache HTTPD : Configurer mod_wsgi pour utiliser Python 3

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 Melico. 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.

Laisser un commentaire

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