Shoop

Shoop

Pré-requis

Pour installer le projet, il vous faut :

  • Python >= 2.5
  • 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 1.0.x [1] [2]
    • PIL [3] pour le traitement des images.
    • Epydoc [4] pour la documentation automatique du code intégrée dans l'interface d'administration. (Optionnel)
    • Kiwi [5] le module Django qui s'occupe de gérer le Wiki de Shoop.
    • PyWiki2Xhtml [6].
    • Sveetchies [7] qui contient des utilitaires nécessaires aux outil de commande en ligne.
    • python-memcached [8] si vous comptez utiliser le cache avec memcached.
    • Bois2Cagette [9] si vous souhaitez utiliser ce parser (conseillé) au lieu de celui par défaut.

Conseils

  • La librairie devel de Python souvent nommée lib-pythonX.X-dev, vous sera souvent nécessaire si vous avez besoin de compiler vous mêmes certains modules Python requis.
  • Pour l'utilisation de PostgreSQL, Django requiert que vous ayez la librairire python Psycopg2 [10]. Vous pouvez installer Django sans, mais vous n'aurez pas le support PostgreSQL.
  • Pour MySQL, il vous faudra python-msqldb [11].

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, dans cet exemple ce sera une base PostgreSQL, puis configurez l'accès à cette BDD en éditant les paramètres suivants :

DATABASE_ENGINE = ''postgresql_psycopg2'
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 les emplacements des répertoires de templates de shoop et de kiwi pour qu'il convienne à votre installation :

TEMPLATE_DIRS = (
   '/home/django/projects/shoop/templates/',
   '/home/django/projects/kiwi_project/examplesite/templates/',
)

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

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.

Parser de la tribune

La tribune nécessite un parser dédié à la filtration des messages. Par défaut le parser utilisé est wiki2xhtml qui est déja inclus dans Shoop. Il est cependant conseillé d'utiliser un parser externe nommé Bois2Cagette.

Si c'est votre choix, après l'avoir installé, modifiez vos settings pour commenter la configuration BOARD_PARSER pour le parser wiki2xhtml puis décommentez la configuration BOARD_PARSER pour le parser bois2cagette.

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.

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 avec un vrai serveur web tel que Apache2 ou lighttpd.

Plusieurs méthodes sont possibles, deux ont été testés avec Shoop. La première solution est à base de Apache+mod_python, la seconde (conseillée) à partir de FastCgi.

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[12] 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

Dernière édition le Tuesday 05 May 2009 à 19:31