nanoplone

how low can we go?

View My GitHub Profile

Plone for small devices

To let Plone run reasonably well (or at all, in some cases) on low spec devices like the Raspberry Pi, various ARM-based USB-sticks and the like, you need to take some extra measures. In these pages I'll try to document those.

Why bother in the first place?

Well, because we can, of course. And because it is fun. And occasionally, even useful. I've given a talk called plone in your pocket at the Ploneconference 2012 in Arnhem about this.

Assumptions

I'll assume you will run a Debian flavor on the device. It should work for other Linux varieties as well. I'm not documenting how to get your device to boot into Linux, as that can be found elsewhere (for the Raspberry it is very easy, for my current favorite devices Picuntu is the way to go)

Operating system tweaks

The most important factor in getting Plone to run better is to tweak the filesystem. Write speeds on a Raspberry are abysmal. So you want to minimize those. As soon as the filesystem is created, do the following tweaks:

Also, go through the various logging functions on the OS. Debian, being that faithful and rock-solid OS, will by default log everything, sometimes in various places. You can probably do without full enterprise-grade logging on your USB-stick. Go through /etc/syslog.conf and see what you can live without, or just set to "critical only".

The Plone stack

On the Plone side of things, surprisingly little has to be tweaked. Make sure you're using Plone 4.3, or if you're playing with Plone 4.2 upgrade Datetime to 3.0.x in your buildout. This saves a lot of memory

I just use the Universal Installer. Use a standalone instance if your device has a single core. If it is a dual- or even quadcore device, you can choose: have 2 ZEO clients, in which case you'll also need a simple loadbalancing to take place (Varnish or Nginx both can handle that). Or you leave the other core for the OS. Experiment, and tell me your results on your device!

Also, you will want to disable as many languages as you can get away with for your purposes. Only enable the ones you need in your buildout.

Finally, disable the Zope access logging (if you're not interested in it, if you plan to put Nginx in front of it, and/or if you intend to use another access logging system like Piwik or GoogleAnalytics anyway) Also set the Z2 log to "critical".

I've been known to fiddle with the object caches a bit, but that is also depending on the content you're planning to put on your nanoplone.

On the lower end of the hardware scale, you shouldn't install both Nginx and Varnish. Varnish alone will do just fine as a webserver and proxy, but it will also eat some memory. No problem on the newer devices with 1Gb or more memory, not a good plan if you're at 512mb or under. Then, use Nginx, and hope for the best ;-)

feedback

updates, corrections, and the like more than welcome. That goes best by creating an issue at github, or even better clone and do a pull request!

If you're not a github person, you can email me: paul@cleanclothes.org