Pré-requis

Pour installer le projet, il vous faut :

  • Python >= 2.5
  • Sa librairie devel souvent nommée lib-pythonX.X-dev, indispensable si vous avez besoin de compiler vous mêmes certains modules python requis.
  • Un compte et une base de donnée sur un serveur de type Mysql, PostgreSQL. Sqlite est supporté par Django mais n'a jamais été testé avec Shoop.
  • Optionnellement pour la mise en production sur Apache2, mod_python ou bien FastCgi.
  • Des modules Python :
    • Django 0.96.x : Django Installation guide , Django Installation FAQ
    • PIL pour le traitement des images.
    • Epydoc pour la documentation automatique du code intégrée dans l'interface d'administration. (Optionnel)
    • setuptools pour aider à l'installation de certains modules python (les pros peuvent faire sans).
    • PyWiki2xhtml un module pour faire de la transformation en xhtml de textes au format wiki de wiki2xhtml.
    • Sveetchies qui contient des utilitaires nécessaires aux outil de commande en ligne.
    • Binding python pour memcached si vous comptez utiliser le cache avec memcached.
    • Pour l'utilisation de PostgreSQL, Django requiert que vous ayez la librairire python psycopg2. Vous pouvez installer Django sans, mais vous n'aurez pas le support PostgreSQL.
    • Pour MySQL, il vous faudra python-msqldb .

Dans ce document, le sigle $SHOOP représente le chemin vers le répertoire où vous avez installé le projet Shoop.

De même pour $DJANGO qui représente le répertoire où vous avez installé Django.

Configuration et initalisation

Après avoir installé Django, allez dans le répertoire de Shoop, et ouvrez le fichier $SHOOP/settings.py pour éditer la configuration d'installation.

Debug

La variable DEBUG lorsqu'elle est à True active le mode de débugguage ce qui fait que Django affichera les pages d'erreur avec la Stacktrace complète de Python. En mode désactivé (à False) Django servira la page $SHOOP/$TEMPLATES/404.html en cas de page non trouvée et $SHOOP/$TEMPLATES/500.html avec un mail (contenant la Stacktrace) aux admins en cas d'erreur serveur.

Base de données

Tout d'abord, créez une base de donnée avec un accès, puis configurez l'accès à cette BDD en éditant les paramètres suivants :

DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'django'
DATABASE_USER = 'django'
DATABASE_PASSWORD = 'django'
DATABASE_HOST = 'localhost'
DATABASE_PORT = ''

Envoi de mails

Remplissez correctement EMAIL_HOST, SERVER_EMAIL, DEFAULT_FROM_EMAIL. L'envoi de mails est pour l'instant réservé aux mails d'erreur automatique que Django renvoi aux Admins en mode DEBUG = False.
Changez aussi ADMINS pour qu'il contiennent une adresse email valide d'un admin prêt à recevoir les mails d'erreurs au cas où.

Templates

Dans la ligne suivante modifiez l'emplacement du répertoire de $SHOOP/templates/ pour qu'il convienne à votre installation :

TEMPLATE_DIRS = (
    "/chemin/absolu/vers/repertoire/templates/",
)

L'utilisateur qui lance Django doit avoir les droits de lire dans ce répertoire.

Url des médias statiques

Indiquez ensuite l'url pour accéder à ce répertoire. Cela peut être une url relative :

MEDIA_URL = '/site_medias/'

Ou bien complète avec son domaine (utile qu'en cas particulier ou en production comme avec Apache) :

MEDIA_URL = 'http://mondomaine/site_medias/'

Notez bien que Django n'est pas censé servir de fichiers statiques et que si vous en avez besoin vous devez passer par ce répertoire.
En mode DEBUG activé, c'est le serveur de devellopement de Django qui serre les fichiers médias. Cependant en production, Apache devra les servir dans un site virtuel différent (ex: http://medias.monsite.com/) ou un alias vers le répertoire médias, qui devront être dédouané d'un processing par mod_python, pensez à mettre la vraie url complète des médias dans MEDIA_URL si c'est le cas.

Initialisation des applications et du super utilisateur

Après avoir sauvegardé votre fichier settings une première fois, depuis le répertoire du projet lancez l'outil d'administration en ligne de Django avec la commande de synchronisatio de la BDD :

python ./manage.py syncdb

Si il retourne une erreur, vous avez surement un problème de connexion au serveur de BDD, vérifier avec votre client BDD préféré que tout les paramètres donnés soient corrects et réessayez.

Si tout se passe bien, le shell vous demandera le nécessaire pour créer le compte super utilisateur. Il est impératif de créer ce compte.

Appliquer les patchs sur Django

Si vous avez déja suivit cette étape au cours d'une précédente installation de Shoop, il est inutile de poursuivre, passez à l'étape suivante.

Il y a un patch qui modifie très légèrement le noyau de Django de façon transparente.

Ce fichier se trouve à l'emplacement $SHOOP/utils/django_oldforms_init.diff.

Patch s'utilise de la manière patch TARGET SOURCEPATCH

Par exemple depuis le répertoire de shoop faites :

patch /usr/lib/python2.5/site-packages/django/oldforms/__init__.py ./django_oldforms_init.diff

Le chemin TARGET diffère surement quelque peu selon votre distribution.

Url du site

L'url du site est stocké en BDD pour plusieurs facilités. Accèdez à la BDD par le moyen de votre choix et allez dans la table sites et modifiez l'entrée numéro 1 qui a du être créé pendant le syncdb pour y mettre votre nom de domaine (ou l'ip avec le :port) ainsi que le titre du site.

Premier démarrage

Lancez le serveur de test

Faites la commande :

python manage.py runserver 0.0.0.0:8000

Cela fait répondre le serveur sur votre ip et le port 8000, vous pouvez changer ces paramètres.

Le site est accessible à l'url :

http://ip_du_serveur:8000/

Administration

Django intègre une interface d'administration. En étant authentifié avec un utilisateur ayant la permission d'y accéder (staff_admin) ou bien le super utilisateur, vous pouvez y accéder à l'adresse :

http://ip_du_serveur:8000/admin/

Cette interface est pleinement sécurisé pour peu que vous n'y donniez pas accès à n'importe qui avec des permissions gênantes.

Vous y trouverez les écrans d'administrations de toute les applications.

Vous pouvez créer des groupes de modérations et leur associer des permissions, ce qui vous permettra ensuite de gérer efficacement votre équipe de modération.

Attention cet espace est reservé à l'administration. Il est conseillé de ne donner le droit d'accès is_staff à cette interface qu'à des personnes averties. En effet certains ajouts d'objets ont besoin de relations qui ne sont pas incluses dans les modèles eux mêmes mais dans le manipulateur des formulaires du site qui n'ont aucun rapport avec ceux de l'interface d'administration de Django. Cette dernière est auto-générée et gérée directement par Django gràce aux modèles de données.

Conseils d'utilisations

Pour une mise en production, il est fortement déconseillé d'utiliser directement le serveur embarqué dans Django, mais plutôt Apache2+mod_python. Django+mod_python et désactivez le directory listing.
Plusieurs méthodes sont possibles, deux ont été testés avec Shoop. La première solution est à base de Apache+mod_python, la seconde à partir de FastCgi plus un autre serveur web.

Apache + mod_python

Un exemple d'installation pour un serveur Apache2.0 avec le module mod_python installé et activé.

Vhost complet

Vous pouvez simplement tout mettre dans un seul Vhost. La partie dynamique gérée par Django ainsi que les médias gérés directement par Apache comme de simples fichiers statiques.

<VirtualHost X.X.X.X>
    ServerAdmin webmaster@sveetch.net
    ServerName dax.sveetch.net
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    PythonPath "['/home/shoop/'] + sys.path" 
    SetEnv DJANGO_SETTINGS_MODULE shoop.settings
    PythonDebug Off
    PythonAutoReload Off
    # Url du fichier robot (optionnel)
    # Alias /robot.txt "/home/shoop/robot.txt" 
    # <Location "/robot.txt">
    #     SetHandler None
    # </Location>
    # Médias sur le meme domaine (en mode DEBUG désactivé)
    Alias /site_medias "/home/shoop/site_medias" 
    <Location "/site_medias">
            SetHandler None
    </Location>
    CustomLog /home/shoop/logs/shoop.fr-access_log combined
    ErrorLog /home/shoop/logs/shoop.fr-error_log
</VirtualHost>

Il est possible que pour une raison vous n'ayez pas installé Django dans le site-package de Python, pour indiquer à Apache ou se trouve votre installation de Django il suffit de modifier la ligne du PythonPath comme ceci :

PythonPath "['/path/to/Django-0.96', '/home/shoop/'] + sys.path" 

Vhost Apache pour Django et Lighttpd pour les médias

Il est conseillé d'utiliser cette solution supplémentaire qui permet de séparer la gestion des médias de la partie Django dynamique. Notez qu'il est tout aussi possible de faire un vhost supplémentaire dans Apache pour gérer ces médias, cela dit lighttpd est beaucoup mieux dimensionné pour s'en occuper.
Configurez le wwwroot (ou bien un vhost) de lighttpd pour servir le répertoire $SHOOP/site_medias/, attention lighttpd doit bien sûr tourner sur un autre port que ceux utilisés par Apache.
Ensuite deux options soit vous utilisez directement le domaine globale ou l'ip de votre serveur avec son port et vous n'avez rien à faire, soit vous souhaitez utiliser un nom de domaine sans port dans l'adresse (tel que medias.foo.com) et il vous faudra faire une redirection dans un vhost apache vers lighttpd avec un rewriting d'url.

<VirtualHost *:80>
    ServerAdmin webmaster@mygroovypod.com
    DocumentRoot /home/shoop/site_medias
    SuexecUserGroup shoop users
    ServerName medias.sveetch.net
    CustomLog /home/shoop/logs/medias.shoop.fr-access_log combined
    SetHandler None
    RewriteEngine On
    RewriteRule ^/(.*) http://sveetch.net:81/$1 [P]
</VirtualHost>

FastCgi

Avec FastCgi, vous n'êtes pas limité au choix de Apache, lighttpd et nginx sont aussi un choix possible. Dans cette situation le serveur web ne fait que transmettre la requête à un démon FastCgi s'occupant de gérer votre application.

Dans tout les cas, vous devrez installer module Python flup avant tout.

Je ne traiterais que la méthode que j'ai testé donc avec Apache. Apache requiert que le module mod_fastcgi soit installé et activé. Ensuite il faut lancer le démon FastCgi avec par exemple la commande suivante depuis le répertoire parent de votre installation de Shoop :

django-admin.py runfcgi --settings=shoop.prod_settings host=127.0.0.1 port=3303 pidfile=/home/django/shoop.pid

On y indique le fichier de settings à utiliser, l'adresse hôte et le port pour atteindre le serveur FastCgi par le serveur web (donc une adresse ip interne est parfaite) et le pidfile qui permettra de retrouver le processus à killer pour stopper le serveur.

Ensuite on installe un vhost sur Apache tel que :

# Spécifie l'adresse interne ou retrouver l'application
FastCGIExternalServer /home/django/projects/shoop/shoop.fcgi -host 127.0.0.1:3303
# Le vhost en lui meme
<VirtualHost *:8000>
    # Nécessaire pour que apache puisse accéder au shoop.fcgi et site_medias
    <directory /home/django/projects/shoop/>
            Order deny,allow
            Allow from all
    </directory>
    # Pareil mais pour les medias de l'admin qui sont ailleurs
    <directory /home/django/Django-0.96/django/contrib/admin/media/>
            Order deny,allow
            Allow from all
    </directory>
    DocumentRoot /home/django/projects/shoop
    # Logs
    CustomLog /home/django/logs/shoop-access_log combined
    ErrorLog /home/django/logs/shoop-error_log
    # Rewrite pour les parties statiques
    Alias /favicon.ico /home/django/projects/shoop/site_medias/favicon.ico
    Alias /crossdomain.xml /home/django/projects/shoop/crossdomain.xml
    Alias /shoop_medias /home/django/projects/shoop/site_medias
    Alias /admin_medias /home/django/Django-0.96/django/contrib/admin/media
    RewriteEngine On
    RewriteRule ^/(favicon.ico.*)$ /$1 [QSA,L,PT]
    RewriteRule ^/(crossdomain.xml.*)$ /$1 [QSA,L,PT]
    RewriteRule ^/(shoop_medias.*)$ /$1 [QSA,L,PT]
    RewriteRule ^/(admin_medias.*)$ /$1 [QSA,L,PT]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/(.*)$ /shoop.fcgi/$1 [QSA,L]
</VirtualHost>

Voila, évidemment il est fortement conseillé de lire impérativement le document How to use Django with FastCGI, SCGI or AJP pour plus de détails.

Contact : sveetch AT gmail DOT com

Also available in: HTML TXT