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
Notes
[1] Django Installation Quick Guide
[4] Automatic API Documentation Generation for Python
[7] Sveetchies
[8] Binding python pour memcached
[9] Bois2Cagette : un parser de messages de tribune fait en Ruby
Dernière édition le Tuesday 05 May 2009 à 19:31