I’m proud to announce it, the new web site of “The greater Nantes economic agency” is now available here: http://www.nantes-developpement.com .
This web site use Plone with some community add-ons (available on pypi). Some of these are new, mean they have been created to fit the customer needs, others has been contributed , mean they has been modified upstream, and last has just been used:
- collective.z3cform.norobots [new]
- collective.groupdashboard [used]
- collective.gallery [new]
- collective.dewplayer [new]
- collective.portlet.actions [used]
- collective.portlet.contact [new]
- collective.portlet.feedmixer [used]
- qi.portlet.TagClouds [contributed]
- collective.plonebookmarklets [contributed]
- collective.singing & collective.dancing [contributed]
- collective.contentlicensing [contributed]
- nmd.plonelinkasvideoembed [new]
- archetypes.uploadreferencewidget [contributed]
- babel [used]
- collective.autopermission [used]
- collective.contentrules.mail [used]
- collective.harlequin [new]
- collective.monkeypatcher [used]
- collective.z3cform.grok [new]
- collective.z3cform.norobots [new]
- Products.Maps [contributed]
- Products.PloneFormGen [contributed]
- Products.TinyMCE [contributed]
- Products.TextIndexNG3 [used]
- Products.CompoundField [contributed]
- Products.ZNagios [used]
- five.grok [used]
- experimental.contentcreation [used]
- experimental.aggressiveopaquespeedup [new]
- collective.remove.kss [new]
- collective.remove.kupu [new]
- collective.remove.rules [new]
- Products.CacheSetup [used]
- Products.MemcachedManager [used]
- plone.app.ldap [used]
- iw.fss [used]
- Relstorage [used]
Custom code contains:
- the theme done as a usual plonetheme (not with xdv).
- policy (integration of all community add-ons and plone configuration)
- portlets
- content-types (collection, folderish document, video/audio interview, …)
System architecture
We have apache2 in front end. Next we have varnish as proxy cache (but not load balancer). Configuration has been taken from Products.PloneOrg subversion. It is already compatible with varnish 2.1.2
Next we have haproxy as load balancer that dispatch request over 4 zope instances. Each zope instances are configured with 2 threads (Zope default configuration is 4 threads).
For the database we use relstorage with postgresql, iw.fss to store files on the server’s file system and OpenLDAP to store users.
Monitoring & maintenace
We use nagios & cacti to monitor all services. We have split services in two categories:
- system services: apache, postgresql, memcached, ldap
- app services: varnish, haproxy, zope
This has some advantages: You can deploy the application without system services. This has been possible with buildout because it is very flexible. Supervisord and haproxy has just been taken from the über buildout.
Relstorage has a script to export the database to any database format: mysql, filestorage (data.fs) or whatever you want. So we use a script every night just after the backup to build a file storage “data.fs”, so any developper can work without having to install system services and has the last database available. It is easier to work on bugs when you have the content produce by the customer.
What I would like to improve / add / in to Plone this year
For sure after a project like this one, I would like to contribute to Plone, share my experience. Here it is.
portlets dynamic template: I would like to be able to register new templates to provide multiple choice of portlet display. As you can choose how a content is displayed with dynamic view fti feature, you should be able to choose how a portlet is displayed. I overrided collection and static portlet just to do that.
portlets order: I want to have first portlet for users&groups, next portlet for content types and next contextual portlets. To achieve this I overrided portlet mecanism because it was hardcoded.
Performances
Plone3 is slow. Right, but it is great. So how can I do a site with traffic and a newsletter of 8300 subscribers. Here are my keys:
install experimental add-ons listed below install cachesetup with varnish as proxy cache and configure both (debug is easy with wireshark & firebug) configure of zope: 2 threads, object cache and jarn.checkinterval externalise binary content: fss is the best for plone3. Use blob for plone4 collective.solr: I have tryed out solr but I was not satisfied: some plone features are broken add one instance only to deliver the newsletter. This one can not be reached by request, only the clock server Because we followed the way plone community does website, we succeeded in doing a great web site with only free (GNU & BSD) softwares. We are working on linux desktop and we produce only free software because we love this.
The buildout used to deploy this web site has been push on the collective subversion under the name of nmd. Feel free to use it, to contribute, to share ideas. It has been designed to be useable in offline mode, and built upon reusable pieces depends on what you want.
I would like to thank the community for help, efforts, bug fixes and all great add-ons that have been done. I would like to thank nantes-developpement.com for this experience and their warm welcome of Plone.