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