Skip to content

Instantly share code, notes, and snippets.

@haterecoil
Last active May 12, 2017 11:12
Show Gist options
  • Save haterecoil/d1128ce9deb19d8e2201b96b55b09eac to your computer and use it in GitHub Desktop.
Save haterecoil/d1128ce9deb19d8e2201b96b55b09eac to your computer and use it in GitHub Desktop.
Mise en production d'un Django avec Apache et mod_wsgi

Guide de mise en ligne d'un Django avec Apache mod_wsgi (sur MacOS)

Prérequis

  • Apache
  • python et pip
  • 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 !

Installation de mod_wsgi

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

Configurer mod_wsgi

Maintenant il faut :

  1. Activer mod_wsgi dans Apache

  2. Ecrire un VirtualHost

  3. 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"

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

Tester

/!\ 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.

Les ressources

Ce gist sert juste à rassembler deux trois infos manquantes sur certains sites. Pour tout bien faire de A à Z je conseille la lecture de :

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment