| title: | Deis Architecture |
|---|---|
| description: | Architecture of the Deis application platform (PaaS) |
| keywords: | deis, paas, application platform, architecture |
Deis consists of 9 modules that combine to create a distributed PaaS. Each Deis module is deployed as a :ref:`Container`.
See :ref:`Controller`.
The database module uses PostgreSQL to store durable platform state.
The discovery module uses etcd for shared configuration and service discovery across the cluster.
The cache module 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 module 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 module 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 module uses rsyslog to aggregate log data from across the platform. This data can then be queried by the :ref:`Controller`.
The runtime module uses Docker to run containers for deployed applications.
The proxy module uses Nginx to route traffic to application containers.