Installation

Si besoin d’une autre version de python, télécharger la source puis

apt install tk-dev
cd /opt/python3.6
./configure --enable-optimizations
make
make altinstall

Utiliser make altinstall plutot que make install permettra de garder l’install python du system par défaut (python executera le python3.7 du system par defaut) et la commande python3.6 sera disponible

ensuite installez virtualenv

apt install virtualenv

placez vous dans votre répertoire de travail et tapez la commande suivante pour créer un environnement virtuel pour votre version de python3.6

virtualenv .venv3.6 --python=python3.6

Lancez la virtualisation

source .venv3.6/bin/activate

La commande suivante devrait renvoyer la version 3.6

python --version

Vous pouvez maintenant installer tous les modules python que vous souhaitez avec pip. Il seront installé dans votre environnement virtuel

Pour quitter l’environnement virtuel, tapez la commande

deactivate

Commande pip

pip
pip list # liste les modules installés avec leur version
pip freeze # liste les modules installés dans un format spécifique pour créer un fichier requirements.txt
pip install -r requirements.txt # installe tous les modules écrit dans le fichier requirements.txt généré avec pip freeze
pip install nom_du_module
pip install nom_du_module==2.3.4 # install une version spécifique d'un module
pip install nom_du_module --upgrade # met à jour le module

Dans le fichier requirements.txt, on peut remplacer les == par des >= afin d’installer les dernières version des modules listés

Installation mod_wsgi

voir cette doc https://pypi.org/project/mod-wsgi/

Mais je n’y suis pas arrivé.

Finalement j’ai opté pour bjoern

(venv3.6) xxx:  pip install bjoern

Avec un petit script pour le lancer pour django par exemple

$ cat run_server_bjoern.py 
import os, sys
from django.core.wsgi import get_wsgi_application
import bjoern
 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "monapp.settings")
sys.path.append('/var/www/monapp.com')
application = get_wsgi_application()
 
bjoern.run(application,'127.0.0.1',8000)

Config Apache en mod reverse proxy

<VirtualHost *:80>
  Define HOSTNAME monapp.com

  ServerName ${HOSTNAME}
  DocumentRoot /var/www/${HOSTNAME}

  <Location />
      Require all granted
  </Location>

  ProxyPass / http://127.0.0.1:8000/
  ProxyPassReverse / http://127.0.0.1:8000/
 

  ErrorLog /var/log/apache2/${HOSTNAME}_error.log

  LogLevel warn

  CustomLog /var/log/apache2/${HOSTNAME}_access.log combined

</VirtualHost>

Pour garder le process actif lorsqu’il plante, j’utilise supervisor

apt install supervisor

Avec la conf

# cat /etc/supervisor/conf.d/monapp.conf 
[program:monapp_prod-worker]
process_name=%(program_name)s_%(process_num)02d
command=/var/www/monapp.com/venv3.6/bin/python /var/www/monapp.com/run_server_bjoern.py
autostart=true
autorestart=true
user=monuser
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/apache2/monapp_worker.log

Puis

# supervisorctl 
supervisor> reread
monapp_prod-worker: available 
supervisor> add monapp_prod-worker
monapp_prod-worker: added process group
supervisor> status
monapp_prod-worker:monapp_prod-worker_00   STARTING
supervisor> status
monapp_prod-worker:monapp_prod-worker_00   RUNNING   pid 63019, uptime 0:00:10