Déployer une application Django sur CentOS

Published: 06 février 2014

DMCA.com Protection Status

Introduction

Figure 1
Figure 1

Une fois terminé le développement en local de votre site avec Django, se pose la question de savoir comment déployer celui-ci. Dans cet article nous allons parcourir les principaux éléments et difficultés pouvant apparaitre lors du déploiement de Django sur CentOS avec apache et mod_wsgi.

Nous supposerons ici que python et apache sont déjà installés sur le serveur. De plus, le déploiement d'un site développé avec Django nécessite de modifier certains fichiers comme "httpd.conf" (fichier de configuration d'apache). Vous devez donc posséder un VPS (serveur dédié virtuel) ou un serveur dédié pour réaliser le déploiement.

Remarque: avec un VPS ou un serveur dédié, on doit vous fournir une adresse IP et un mot de passe pour vous connecter au serveur. La première chose que vous pouvez alors faire et de vérifier en tapant directement l'adresse IP dans votre navigateur internet (Internet Explorer, Safari, etc). Vous devez alors normalement obtenir une page ressemblant à la figure 1.

Préparer le déploiement

Avant d'envoyer votre site sur le serveur il est préférable de préparer un peu le terrain et d'installer un certains nombres de packages sur le serveur. Nous allons donc dans ce chapitre parcourir quelques étapes préliminaires:

Etape 1: Connectez-vous au serveur avec la commande ssh:

 ssh adresse_ip -l root

et entrez votre mot de passe.

Remarque: une fois connecté au serveur, si vous n'êtes pas familier avec CentOS (qui est une distribution GNU/Linux principalement destinée aux serveurs), prenez le temps de parcourir les différents répertoires.

Etape 2: Installez Django avec la commande suivante

 yum install Django

Remarque: si la commande "yum install django" ne fonctionne pas, vous pouvez également directement télécharger la dernière version de Django:

wget https://www.djangoproject.com/download/1.4.3/tarball/

puis suivre les instructions d'installation.

Etape 3: Installez mod_wsgi (site officiel)

 yum install mod_wsgi

Remarque: plusieurs erreurs peuvent apparaitre lors de l'installation
de mod_wsgi. Le plus souvent c'est parce que le module python-devel
n'est pas installé. Veuillez alors entrer les deux commandes suivantes:

yum install gcc
yum install python-devel

Etape 4: Redémarrez apache avec la commande:

 /etc/init.d/httpd restart

et vérifiez qu'apache télécharge bien le module mod_wsgi avec la commande:

 /etc/init.d/httpd -M

mod-wsgi doit normalement apparaitre dans la liste.

Remarque:

Etape 5: Installez le(s) module(s) supplémentaires nécessaire à votre site (dépend de vos besoins)

 pip install markdown
 pip install django-mptt
 ...

Remarque:

Déployer votre application Django

Vous pouvez à présent passer au déploiement de votre application Django.

Etape 1: Envoyez votre site sur le serveur:

 scp -r monprojet root@ip_adresse:

Remarque: il est alors préférable de déplacer votre project dans le répertoire "/var/www/html/":

mv -r monprojet /var/www/html/

Au final, vous devez avoir quelque chose ressemblant à:

/var/www/html/monprojet/monprojet/
                        monapplication01/
                        monapplication02/
                        ...
                        manage.py

Etape 2: créez un nouveau répertoire nommé par exemple "public" sous " /var/www/html/monprojet/"

 mkdir public

sous le répertoire public, créez aussi un répertoire nommé "static" et "media"

 mkdir static
 mkdir media

sous le répertoire public, déplacez également le fichier urls.py depuis monprojet

 mv /var/www/html/monprojet/monprojet/urls.py /var/www/html/monprojet/public/.

Remarque: Dans le répertoire "public" on va placer tous les fichiers publics du site.

Etape 3: Changez les lignes suivantes dans le fichier setting.py:

 MEDIA_ROOT = "/var/www/html/monprojet/public/media/"   
 STATIC_ROOT = "/var/www/html/monprojet/public/static/"

 ROOT_URLCONF = 'public.urls'

 'NAME': '/var/www/html/monprojet/monprojet/db/mabasededonnees.db',

Remarque: pour l'instant, laissez Debug = true dans le fichier settings.py afin d'avoir des informations sur les erreurs éventuelles.

Etape 4: Collectez tous les fichiers statiques de votre site en tapant la commande suivante depuis le répertoire "/var/www/html/monprojet/":

 python manage.py collectstatic

Remarque:

Etape 5: Créer les fichier suivant dans ce répertoire

 __init__.py
 django_wsgi.conf
 monprojet.wsgi

Remaque

Etape 6: Editez le fichier django_wsgi.conf

 Alias /static/ /var/www/html/monprojet/public/static/
 Alias /media/ "/var/www/html/monprojet/public/media/"

 WSGIScriptAlias / "/var/www/html/monprojet/public/monprojet.wsgi"
 WSGIPythonPath /var/www/html/emergence/:/var/www/html/monprojet/monprojet:/var/www/html/monprojet/monprojet/db:/var/www/html/monprojet/public/media:/var/www/html/monprojet/apache:/usr/bin/python

 <Directory "/var/www/html/monprojet/public">
 Allow from all
 </Directory>

Remarque:

Etape 7: Editez le fichier monprojet.wsgi

 import os, sys
 #Calculate the path based on the location of the WSGI script
 apache_configuration = os.path.dirname(__file__)
 project = os.path.dirname(apache_configuration)
 workspace = os.path.dirname(project)
 sys.path.append(workspace)

 os.environ['DJANGO_SETTINGS_MODULE'] = 'monprojet.settings'
 import django.core.handlers.wsgi
 application = django.core.handlers.wsgi.WSGIHandler()

Remarque:

Etape 8: Ajoutez cette ligne dans le fichier httpd.conf (fichier de configuration d'apache qui est situé sous le répertoire "/etc/httpd/conf")

 Include "/var/www/html/monprojet/public/django_wsgi.conf"

et relancez apache:
/etc/init.d/httpd restart

Finalement, vérifiez que tout fonctionne bien avec votre site en lançant votre navigateur internet puis en tapant directement l'adresse ip de votre serveur.

Si vous avez trouvé aucunes erreurs, vous avez terminé le déploiement de votre application avec Django. N'oubliez pas de mettre "Debug = False" dans le fichier settings.py.

Références

Liens Description
Lien (externe) 1 How do I copy a folder keeping owners and permissions intact? (Beginner Question)
Image

of