Jens Klein: Forging a New Installer

published Oct 26, 2021

Talk by Jens Klein at the online Plone Conference 2021.

The old installer needs updating.

In the past we had the UnifiedInstaller. This tried to do all in one: install Python from scratch at first (not anymore), buildout based, support as many OS as possible. It has become too complex and won't be used for plone 6.

In the future we want to use the standard tooling. There is tooling for backend Python and frontend Node. Python and Node themselves are widely available. Use pip and npm to install backend and frontend. Use containers / Docker.

So: no installer. But we have tooling.

  • Use pip install Plone
  • Use pip to install add-ons.
  • Use standard Zope scripts to create the instance.
  • npm run yo init @plone/volto to bootstrap your Volto frontend.

You may now say: "Stop! This is a lot to install on my machine!." So we use containers:

docker run plone-[webserver|frontend|backend|database]

Run it in Docker of Kubernetes. Inside it, we run:

  • webserver: nginx (or Traefik, Caddy)
  • frontend: Volto
  • backend: Plone application server
  • database: ZEO+blobstorage, or PostGreSQL (recommended) or MySQL/Oracle

It is easy to start with. You can do local development with containers. It integrates well with CI/CD processes. The container image is a frozen version of the whole application. So you have isolated environments and repeatable deployments.

Workflow example:

  • Two repos or directories with backend and frontend customizations
  • Dockerfile
  • Setup Gitlab CI/CD workflow to build containers and store in registry.
  • Auto deploy to testing/staging/live.

You could use Ansible and similar tools (I won't).

Disclaimer: this is work in progress. Official images:

This needs help.

  • Try the new setup.
  • Ask questions at
  • Is it inconvenient? Tell us how to improve.
  • Have you found a problem? Create an issue.
  • Have you fixed a problem? Create a pull request.