Déployer une application Django

Un article de alwaysdata.

Python, comme les autres langages de programmation proposés par alwaysdata, tourne en FastCGI. Pour utiliser Django sur nos serveurs, il suffit simplement de suivre la section on a shared-hosting provider with Apache de la documentation officielle de Django.

Concrètement, voici une marche à suivre (parmi d'autres possibles) :

Préambule

Avant toute chose, choisissez la version de Django que vous voulez utiliser.

Les commandes pour créer un nouveau projet django :


django-admin.py startproject mysite

cd mysite/

./manage.py startapp myfirstapp

[1] Documentation Django

Première étape

Créez un répertoire public à la racine de votre projet. À l'intérieur, créez un fichier django.fcgi contenant :

#!/usr/bin/python
import os, sys

_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, _PROJECT_DIR)
sys.path.insert(0, os.path.dirname(_PROJECT_DIR))

_PROJECT_NAME = _PROJECT_DIR.split('/')[-1]
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

Donnez les droits d'exécution à ce fichier (en SSH : chmod +x django.fcgi).

Attention : Le fichier doit être au format UNIX et non DOS.

Deuxième étape

Toujours dans le répertoire public, créez un fichier .htaccess contenant :

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]

Troisième étape

Cette étape n'est nécessaire que si vous utilisez l'interface d'administration de Django.

Toujours dans public, créez un lien symbolique media qui pointe vers les fichiers media de l'admin Django :

ln -s /usr/local/alwaysdata/python/django/1.1/django/contrib/admin/media/ media

Remplacez éventuellement 1.1 par la version de Django que vous utilisez.

Quatrième étape

Préparation de la base de données (example avec mysql).

À partir de votre interface d'administration alwaysdata, créez votre base de données en allant sur Bases de données › MySQL › Ajouter une base de données.

Adaptez les lignes suivantes du fichier mysite/settings.py :

DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'myaccount_mybase'
DATABASE_USER = 'myaccount'
DATABASE_PASSWORD = 'mypassword'
DATABASE_HOST = 'mysql.alwaysdata.com'

Vous pouvez également utiliser PostgreSQL en tant que système de gestion de base de données.

Cinquième étape

Pour garantir la sécurité de vos fichiers et permettre à l'administration Django de fonctionner, cette étape est nécessaire.

À partir de votre interface d'administration alwaysdata, dans la partie Domaines, faites pointer votre sous-domaine vers le répertoire public de votre projet.

Ainsi, si votre projet est dans /home/myaccount/myproject et que vous voulez que http://myaccount.alwaysdata.net arrive directement sur votre application, vous devrez modifier le répertoire de destination du sous-domaine myaccount.alwaysdata.net vers /myproject/public (au lieu de /www/ par défaut).

C'est pourquoi vous devez également mettre vos fichiers statiques dans le répertoire public, par exemple :

/home/myaccount/myproject/public/site_media

avec, dans mysite/settings.py :

MEDIA_ROOT = '/home/myaccount/myproject/public/site_media/'
MEDIA_URL = '/site_media/'

et dans le fichier html (template) :

<img src="/site_media/images/myimage.gif" alt="my image"/>

Au final

L'arborescence de votre dossier devrait ressembler à quelque chose comme cela :

myproject/
    __init__.py
    manage.py
    public/
        django.fcgi
        .htaccess
        media/
        site_media/
    settings.py
    urls.py
    myapp/
        views.py
        models.py


À chaque modification de votre projet, vous devez redémarrer l'instance FastCGI pour que les nouvelles modifications soient prises en compte. Pour cela, il vous suffit d'aller sur l'interface d'administration, Avancé › Processus et de cliquer sur le bouton Terminer bt_delete.png. Le redémarrage est automatique.

Voir aussi

Affichages
Outils personnels
Navigation
alwaysdata
Boîte à outils