Guide de mise en ligne d'un Django avec Apache mod_wsgi (sur MacOS)
Apache
python
etpip
- une application django
Concernant le Django, mon installation ressemble à ça :
mysite/
├── apps ici mes applications django
│ └── frontend
├── manage.py
├── project ici le projet django et le wsgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── urls.pyc
│ └── wsgi.py
├── requirements.txt
├── venv
Vous pouvez télécharger un zip qui contient une application django fonctionelle. Vous avez juste à dézipper où bon vous semble !
mod_wsgi
est un module Apache qui permet à Apache de communiquer avec une application en WSGI. Et Django (comme Flask) est tout à fait compatible
avec cette norme !
Plusieurs solution pour installer mod_wsgi. Je conseille les instruction ici qui couvrent les différents OS : https://pypi.python.org/pypi/mod_wsgi
Concernant les possesseurs de NAS Synology, on peut utiliser IPKG
apparemment :
Maintenant il faut :
-
Activer mod_wsgi dans Apache
-
Ecrire un VirtualHost
-
Activer mod_wsgi
On va d'abord éxécuter mod_wsgi-express module-config
pour savoir où est installé notre module :
moka@mokanetwork:~$ mod_wsgi-express module-config
LoadModule wsgi_module "/usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so"
WSGIPythonHome "/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6"
On va utiliser ces lignes.
Sur MacOS il faut éditer le fichier principal dans /etc/apache2/httpd.conf
. On va rajouter quelques lignes à la fin du gros bloc de LoadModule
# CUSTOM MODULE
LoadModule wsgi_module "/usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-darwin.so"
WSGIPythonHome "/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6"
puis on restart le serveur et vérifie que tout va bien : sudo apachectl -k restart
.
Pour la config sur une distribution LINUX, je vous invite à lire [https://pypi.python.org/pypi/mod_wsgi], partie "Connecting into Apache installation"
- Ecrire un virtual host
Okay ! Maintenant on va faire un virtualhost, je ne m'étendrai pas sur comment les virtualhost fonctionne et je donne jsute la confgi commentée.
#wsgi
<VirtualHost *:80>
ServerName lwsgi.dev
# on indique le mapping entre l'URI et le fichier wsgi
WSGIScriptAlias / /path/to/mysite.com/project/wsgi.py
# on indique le bin de python, ajoutons les dossiers de l'appli au PATH et mettons à jour
# l'encoding des caractères
WSGIDaemonProcess lwsgi.dev python-home=/path/to/mysite.com/venv python-path=/path/to/mysite.com:/path/to/mysite.com/project:/path/to/mysite.com/apps lang="en_US.UTF-8" locale="en_US.UTF-8"
WSGIProcessGroup lwsgi.dev
<Directory /path/to/mysite.com>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# Gestion des ficheirs statiques
Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico
Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/
<Directory /path/to/mysite.com/static>
Require all granted
</Directory>
<Directory /path/to/mysite.com/media>
Require all granted
</Directory>
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
/!\ Ce virtualhost suppose que vous ayez modifié le hosts ou autre pour rediriger lwsgi.dev
vers 127.0.0.1
.
VOus devriez jsute à restart apache et à vous rendre sur lwsgi.dev
ou même localhost
si vous n'avez qu'un seul virtual host.
Une page devrait indiquer :
It worked!
Congratulations on your first Django-powered page.
Ce gist sert juste à rassembler deux trois infos manquantes sur certains sites. Pour tout bien faire de A à Z je conseille la lecture de :