Installer Plone 3 derrière Varnish avec Buildout
Ce tutorial présente la marche à suivre pour déployer le CMS Plone 3 avec Buildout (Apache -> Varnish -> Zope -> Plone), le tout dans un environnement virtuel Python (VirtualEnv).
Plone est un système de gestion de contenu (CMS : Content Managment System) professionnel Open Source capable de rivaliser sans complexe avec tous les produits commerciaux du moment. Plone repose sur le serveur d’application Zope, développé avec le langage de programmation Python. Plone est sûrement la contribution la plus aboutie de la communauté Zope.
Passons aux choses sérieuses à présent ! En considérant qu’Apache est déjà installé sur le système, le déploiement permettra d’obtenir l’architecture suivante:
Convention pour les lignes de commande ou les extraits de code ("\" représentant un retour à la ligne factice nécessaire à la mise en page de cet article) :
zope@linux: cd /home/zope python virtualenv.py PROJECT
\ --python=python2.4
Table des matières
Pré-requis systèmes
La procédure qui suit considère que vous avez déjà installé sur votre système:
- Le serveur web Apache,
- Un interpréteur Python 2.4 (disponible via la commande “python2.4”), ainsi que le paquet python-devel si vous installez Python depuis votre système de paquet. Taper la ligne de commande “python -V” pour connaître la version de Python installée par défaut sur votre système.
- Les outils nécessaires à l’installation/compilation des logiciels et le traitement d’images JPG: make, gcc, libncurses5/libncurses5-dev (utile pour la compilation de Varnish), etc…, libjpeg, … (dépend de votre distribution).
La procédure considère également que vous avez créé un utilisateur “zope” qui sera responsable du lancement des services, ainsi que le groupe “zope” correspondant.
Installation du VirtualEnv
sbo@linux: su - zope
zope@linux: export PROJECT=/home/zope/my_project
zope@linux: cd /home/zope
zope@linux: wget http://svn.colorstudy.com/virtualenv/trunk/virtualenv.py
zope@linux: python virtualenv.py --python=python2.4 --no-site-packages my_project
Le script virtual_env.py créé $PROJECT/lib/python2.4/site-packages.
Il créé également l’exécutable python correspondant: $PROJECT/bin/python.
Il installe également Setuptools, et tout appel à $PROJECT/bin/easy_install installera les paquets dans l’environnement virtuel.
easy_install est un outil
permettant d’obtenir des packages Python sur Cheese Shop
(PyPI, Python Package Index, egg repository).
zope@linux: cd $PROJECT
zope@linux: ./bin/python -V
Python 2.4.4
zope@linux: source bin/activate
(my_project)zope@linux: bin/easy_install ZopeSkel
ZopeSkel est une collection de PasteScript templates pour le développement avec Zope et Plone.
L’egg ZopeSkell est bien installé dans notre environnement (ex: $PROJECT/lib/python2.4/site-packages/ZopeSkel-2.10-py2.4.egg).
(my_project)zope@linux: bin/easy_install PasteScript
PasteScript est un outil permettant d’initialiser des applications à partir de templates prédéfinis (ex: créer un egg pour Plone 3).
L’egg PasteScript est bien installé dans notre environnement (ex: $PROJECT/lib/python2.4/site-packages/PasteScript-1.6.3-py2.4.egg)
Création de la structure du projet Plone 3
zope@linux: cd $PROJECT
zope@linux: source bin/activate
(my_project)zope@linux: bin/paster create -t plone3_buildout buildout
Enter zope2_install (Path to Zope 2 installation; leave blank to fetch one) ['']:
Enter plone_products_install (Path to directory containing Plone products; \
leave blank to fetch one) ['']:
Enter zope_user (Zope root admin user) ['admin']: admin
Enter zope_password (Zope root admin password) ['']: admin
Enter http_port (HTTP port) [8080]: 8080
Enter debug_mode (Should debug mode be "on" or "off"?) ['off']: off
Enter verbose_security (Should verbose security be "on" or "off"?) ['off']: off
Si nécessaire, modifier les droits du projet:
(my_project)zope@linux: sudo chown -R zope:zope buildout
Configurer le buildout selon ses besoins
Le fichier buildout responsable de la construction du projet se trouve dans ici : $PROJECT/buildout/buildout.cfg
Utilisez le buildout suivant, modifié pour ajouter le serveur de cache Varnish, FileSystemStorage, et quelques produits utiles (dont CacheFu pour l’amélioration de la gestion du cache Plone-Varnish) : buildout.cfg
zope@linux: cd $PROJECT
zope@linux: source bin/activate
(my_project)zope@linux:cd buildout
(my_project)zope@linux:mv buildout.cfg buildout.cfg.initial \
& wget http://www.asilax.fr/files/blog/2008/installer-plone-3-derriere-varnish-avec-buildout\
/buildout.cfg/at_download/file
(my_project)zope@linux:mv ./file buildout.cfg
Téléchargez également le fichier de configuration Varnish (varnish.vcl) modifié spécifiquement pour une utilisation avec Zope/Plone. Le buildout se chargera de le placer où il faut ($PROJECT/buildout/parts/varnish-instance/).
(my_project)zope@linux: cd $PROJECT/buildout/
(my_project)zope@linux: wget http://www.asilax.fr/files/blog/2008/\
installer-plone-3-derriere-varnish-avec-buildout/varnish.vcl/at_download/file
(my_project)zope@linux: mv ./file varnish.vcl
Décrivons un peu les modifications apportées au buildout de base :
FileSystemStorage (fss)
[buildout]
parts =
...
fss
...
[fss]
recipe = iw.recipe.fss
conf = ${instance:location}/etc/plone-filesystemstorage.conf
storages = www_monsite_com /monsite/www_monsite_com directory
PIL (Python Imaging Library) & CacheFu
eggs =
...
PILwoTk
Products.CacheSetup==1.2
Correction des droits sur les fichiers installés (nécessaire en cas d’installation en root)
[buildout]
parts =
...
chown
[chown]
# This recipe is used to set permissions -- and ownership for root mode installs
recipe = plone.recipe.command
command = chmod 600 .installed.cfg
command = chown -R ${instance:effective-user} ${buildout:directory}/parts
Configuration de l’instance Zope
[instance]
effective-user = zope
zodb-cache-size = 5000
event_log_level = ERROR
z_log_level = ERROR
debug-mode = off
verbose-security = off
Varnish
parts =
...
varnish-build
varnish-instance
varnish-config
...
[varnish-instance]
recipe = plone.recipe.varnish:instance
bind = 127.0.0.1:8079
backends = 127.0.0.1:8080
cache-size = 100M
[varnish-build]
recipe = plone.recipe.varnish:build
url = http://puzzle.dl.sourceforge.net/sourceforge/varnish/varnish-1.1.2.tar.gz
[varnish-config]
# This recipe is used to replace the default varnish configuration file
recipe = plone.recipe.command
command = mv ./buildout/parts/varnish-instance/varnish.vcl \
./buildout/parts/varnish-instance/varnish.vcl.initial
command = cp ./varnish.vcl ./buildout/parts/varnish-instance/varnish.vcl
Lancer le buildout
zope@linux: cd $PROJECT
zope@linux: source bin/activate
(my_project)zope@linux: cd buildout
(my_project)zope@linux: ../bin/python bootstrap.py
(my_project)zope@linux: ../bin/python ./bin/buildout -v -c buildout.cfg > buildout.log
Pour voir ce que fait buildout, dans un autre terminal :
zope@linux: tail -f buildout.log
Lancer les services et tester son installation
Lancer Zope (port 8080) et Varnish (port 8079)
zope@linux: cd $PROJECT
zope@linux: source bin/activate
(my_project)zope@linux: cd buildout
(my_project)zope@linux: ./bin/instance start
(my_project)zope@linux: ./bin/varnish-instance
Tester la disponibilité du serveur Zope
- En direct sur Zope pour vérifier que le serveur tourne bien (utilisez lynx si nécessaire): http://localhost:8080
- Via Varnish (utilisez lynx si nécessaire): http://localhost:8079
Créer le site Plone
Ajouter un site plone à la racine de votre zope, en le nommant par exemple “monsite”.
Configurer Apache
Rajouter ceci dans votre le fichier de configuration d’Apache :
#
# Site http://www.monsite.fr
#
<VirtualHost www.monsite.fr:80>
ServerName www.monsite.fr
ServerAlias *.monsite.fr
ServerAlias monsite.fr
RewriteEngine on
# On empêche le http://monsite.fr et les sous-domaines
RewriteCond %{HTTP_HOST} ^monsite\.fr [NC]
RewriteRule ^/(.*) http://www.monsite.fr/$1 [L,R=301]
# www.monsite.fr -> réécriture d'URL vers le site Plone
RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/\
http/www.monsite.fr:80/monsite/VirtualHostRoot/$1 [P,L]
# Log
CustomLog /var/log/apache/monsite_fr.log combined
</VirtualHost>
Liens & documentations
- python.org
- plone.org
- Varnish
- ZopeSkel
- PasteScript
- VirtualEnv
- Creating Repeatable Buildouts - article 1 & article 2