J'ai réussi à le faire fonctionner après avoir installé flask (dans venv) et configuré le WSGISocketPrefix. Je déploie sur centos6.8 avec python3.6 dans venv.
Le dossier du projet auquel il est fait référence ici est l'endroit où le code réel de django est stocké. Le dossier public du projet auquel il est fait référence ici est accessible par Apache et contient des simlinks vers des ressources pertinentes ainsi que les fichiers .htaccess et .wsgi nécessaires à l'exécution.
Le préfixe de socket peut varier en fonction du système d'exploitation et de la configuration d'Apache. Les permissions peuvent varier en fonction de la version d'Apache, si vous avez des problèmes, vous pouvez les modifier :
Order allow,deny
Allow from all
à
Require all granted
voici ma configuration mod_wsgi (httpd.conf)
LoadModule wsgi_module **path to venv**/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIPythonHome **path to venv**
WSGIDaemonProcess flask user=**user name** group=**user group**
WSGIProcessGroup flask
WSGISocketPrefix /var/run/wsgi
<Directory **path-to-project-dir**>
Options ExecCGI MultiViews Indexes
MultiViewsMatch Handlers
AddHandler wsgi-script .py
AddHandler wsgi-script .wsgi
DirectoryIndex index.html index.php index.py app.wsgi
Order allow,deny
Allow from all
</Directory>
voici l'hôte virtuel (httpd.conf)
<VirtualHost *:80>
DocumentRoot **project public folder**
ServerName **www.project.com**
ServerAlias **project.com**
WSGIScriptAlias / **project public folder**/site.wsgi
Alias /media/ **project public folder**/media/
<Directory **project public folder**/media>
Order allow,deny
Allow from all
</Directory>
Alias /static/ **project public folder**/static/
<Directory **project public folder**/static>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Voici le fichier site.wsgi
import os
import sys
import site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('**path to venv**/lib/python3.6/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('**path to project folder containing manage.py**')
sys.path.append('**path to project folder containing settings.py**')
os.environ['DJANGO_SETTINGS_MODULE'] = '**project name**.settings'
# Activate your virtual env
#activate_venv.py is an empty python file which will activate
#the virtual environment when executed. Create it manually
activate_env=os.path.expanduser("**path to venv**/bin/activate_venv.py")
exec(open(activate_env).read(), dict(__file__=activate_env))
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
J'ai dû déplacer les deux lignes suivantes du fichier wsgi.py vers " init .py" dans le même dossier pour résoudre l'erreur "Applications not ready"
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Voici un aperçu des paquets présents dans l'environnement virtuel
Click==7.0
Django==2.2.1
django-debug-toolbar==1.11
django-redis==4.10.0
django-tastypie==0.14.2
Flask==1.0.2
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
mod-wsgi==4.6.5
mysqlclient==1.4.2.post1
Pillow==6.0.0
pip==19.1.1
python-dateutil==2.8.0
python-mimeparse==1.6.0
pytz==2019.1
redis==3.2.1
setuptools==41.0.1
simplejson==3.16.0
six==1.12.0
sqlparse==0.3.0
Werkzeug==0.15.4