Installer Plone 3 derrière Varnish avec Buildout
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
Sommaire
3. Création de la structure du projet Plone 3
4. Configurer le buildout selon ses besoins
6. Lancer les services et tester son installation
1. 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.
2. 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)
3. 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
4. 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écification 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:
4.1. 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
4.2. PIL (Python Imaging Library) & CacheFu
eggs = ... PILwoTk Products.CacheSetup==1.2
4.3. 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
4.4. 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
4.5. 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
5. 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
6. Lancer les services et tester son installation
6.1. 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
6.2. 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
7. Créer le site Plone
Ajouter un site plone à la racine de votre zope, en le nommant par exemple "monsite".
8. 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>
9. Liens & documentations
- www.python.org
- www.plone.org
- Varnish
- ZopeSkel
- PasteScript
- VirtualEnv
- Qui utilise Plone ?
- Creating Repeatable Buildouts - article 1 - article 2
- Build Python in Buildout