| title: | Components |
|---|---|
| description: | Components of the Deis application platform (PaaS) |
Deis consists of a number of components that combine to create a distributed PaaS. Each Deis component is deployed as a container or set of containers.
The controller component is an HTTP API server. Among other functions, the
controller contains :ref:`the scheduler <choosing_a_scheduler>`, which decides
where to run app containers.
The deis command-line client interacts with this component.
The database component is a PostgreSQL server used to store durable platform state. Backups and WAL logs are pushed to :ref:`Store`.
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`
- Triggers a new :ref:`Release` through the :ref:`Controller`
Note
The builder component does not incorporate :ref:`Config` directly into the images it produces. A :ref:`Release` is a pairing of an application image with application configuration maintained separately in the Deis :ref:`Database`.
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 stored by :ref:`Store`.
The logspout component is a customized version of progrium's logspout that runs on all CoreOS hosts in the cluster and collects logs from running containers. It sends the logs to the :ref:`logger` component.
The logger component is a syslog server that collects logs from :ref:`logspout` components spread across the platform. This data can then be queried by the :ref:`Controller`.
The publisher component is a microservice written in Go that publishes containers to etcd so they can be exposed by the platform :ref:`router`.
The router component uses Nginx to route traffic to application containers.
The store component uses Ceph to store data for Deis components which need to store state, including :ref:`Registry`, :ref:`Database` and :ref:`Logger`.