Fundamentally, Aegir5 maps a web GUI to CLI commands. It is made up of several components:

  1. There is a front-end built on Drupal 8. This is the default Admin UI and authoritative Object Model for the sytem.
  2. There is a back-end based on a RabbitMQ/Celery task queue to dispatch, provision, and execute tasks.
  3. There are any number of Minion servers, on which Applications and Services can be provisioned.
  4. The Drupal REST API enables any number of alternate frontends to manipulate the Object Model and trigger Operations.

The front-end UI allows users to construct the Object Model, creating Platforms and Sites to represent the applications and instances they need to provision, host, and manage. Users can interact with Platforms and Sites by running Operations, composed of Tasks, which pass configuration variables into a distributed task queue, built on Celery.

The back-end Celery queue worker (dispatcherd) receives these tasks, and runs provisioner commands, based on the variables passed into the task from the front-end. Currently the only backend provisioner is Ansible, but the system is designed to support pluggable provisioners such as Terraform, Kubernetes, or plain shell scripts.

The back-end provisioners SSH into the Minion servers to manipulate the Applications and Services running there. The minions may have a single application stack or support multiple types of applications on a single server (or container pod).

Architecture diagram

This diagram created with yEd Live, source GraphML file can be imported there, or edited in the yEd Desktop app.

N.B. This architecture reflect the original design proposal. While much of what has been built has stayed fairly close to this design, the above diagram reflects actual implementations more accurately.

Original proposed architecture