| title: | Architecture |
|---|---|
| description: | Architecture of the Deis application platform (PaaS) |
Deis consists of 7 components that combine to create a distributed PaaS. Each Deis component is deployed as a :ref:`Container`.
The :ref:`controller <Controller>` component is a RESTful API server written with Django and Celery. Command-line clients interact with this component.
The database component is a PostgreSQL server used to store durable platform state.
The cache component uses Redis to:
- Store work queue data for Celery
- Cache sessions and synchronize locks for Django
- Store recent log data for the :ref:`Controller`
The builder component uses a Git server to process :ref:`Application` builds. The builder:
- Receives incoming
git pushrequests over SSH- Authenticates the user via SSH key fingerprint
- Authorizes the user's access to write to the Git repository
- Builds a new Docker image from the updated git repository
- Adds the latest :ref:`Config` to the resulting Docker image
- Pushes the new Docker image to the platform's :ref:`Registry`
- Creates a new :ref:`Release` on the :ref:`Controller`
Once a new :ref:`Release` is generated, a new set of containers is deployed across the platform automatically.
The registry component hosts Docker images on behalf of the platform. Image data is typically stored on a storage service like Amazon S3 or OpenStack Storage.
The log server component uses rsyslog to aggregate log data from across the platform. This data can then be queried by the :ref:`Controller`.
The router component uses Nginx to route traffic to application containers.
