Multiple Plone Servers

The easiest way to use this kit is when there is only one Plone installation for each server. You may, though, use it to install multiple Plone instances to a single server. Up to four Plone instances are supported per server. More may be added via minor customization of the playbook.

To install multiple Plone instances to a server, specify all settings that are unique per instance in a playbook_plones list. Settings that are not specific to a particular server may be set as usual.

At a minimum, you must set specific values for plone_instance_name and for the Plone and load-balancer ports. You'll usually also want to set virtual host settings.

Here's a minimal example:

playbook_plones:
  - plone_instance_name: primary
    plone_zeo_port: 8100
    plone_client_base_port: 8081
    loadbalancer_port: 8080
    webserver_virtualhosts:
      - hostname: "{{ inventory_hostname }}"
        aliases:
          - default
        zodb_path: /Plone
  - plone_instance_name: secondary
    plone_zeo_port: 7100
    plone_client_base_port: 7081
    loadbalancer_port: 7080
    webserver_virtualhosts:
      - hostname: www.plone.org
        zodb_path: /Plone

Dispatching requests to the matching Plone instance occurs in Varnish, and is done by hostname. So, in the example above, when Varnish sees www.plone.org in a request URL, it will send the request to port 7080, our secondary instance.

Remember, all the settings except the ones in playbook_plones are set as documented elsewhere.

Nearly all the plone_* variables, and a few others like loadbalancer_port and webserver_virtualhosts may be set in playbook_plones. Let's take a look at a more sophisticated instance list that handles two different versions of Plone:

playbook_plones:
  plone_instance_name: primary_plone
  plone_target_path: /opt/primary_plone
  plone_var_path: /var/local/primary_plone
  plone_major_version: '5.0'
  plone_version: '5.0'
  plone_initial_password: admin
  plone_zeo_port: 5100
  loadbalancer_port: 4080
  plone_client_base_port: 5081
  plone_client_count: 2
  plone_create_site: no
  webserver_virtualhosts:
    - hostname: plone.org
      zodb_path: /plone_org
      aliases:
        - www.plone.org
- plone_instance_name: secondary_plone
  plone_target_path: /opt/secondary_plone
  plone_var_path: /var/local/secondary_plone
  plone_major_version: '4.3'
  plone_version: '4.3.7'
  plone_initial_password: admin
  plone_zeo_port: 4100
  loadbalancer_port: 4080
  plone_client_base_port: 4081
  plone_client_count: 3
  plone_create_site: no
  webserver_virtualhosts:
    - hostname: plone.com
      zodb_path: /plone_com
      aliases:
        - www.plone.com
    - hostname: plone.com
      zodb_path: /plone_com
      address: 92.168.1.150
      port: 443
      protocol: https
      certificate_file: /thiscomputer/path/mycert.crt
      key_file: /thiscomputer/path/mycert.key

Moving beyond four

Ansible doesn't offer a way to iterate a role over a sequence, so the max count of four is hard-coded into the playbook. Read the playbook and it will be obvious how to change the limit by editing it.