How Coolify works
Coolify separates platform control from workload runtime. The Coolify instance stores configuration and coordinates actions, while Docker on each connected server runs your applications, databases, and services.
That separation determines where deployments run, how traffic reaches resources, what each backup contains, and what happens during an outage.
You can run the Coolify server yourself or use Coolify Cloud. With self-hosted Coolify, you maintain the Coolify server. With Coolify Cloud, the Coolify team maintains it. In both setups, your applications, databases, and services run on servers you provide.
The control path and traffic path
Coolify sends deployment and management commands through the control path. Your users reach running HTTP resources through the application traffic path.
A self-hosted Coolify server can also run deployed resources. In that setup, the Coolify server and resource containers share a machine but still run as separate containers.
Parts of a Coolify setup
A Coolify setup has four main parts.
Coolify does not require a persistent deployment agent on a connected server. It uses SSH for deployments and server actions. The optional coolify-sentinel container adds monitoring data, but it does not replace SSH.
Inside a self-hosted Coolify instance
A standard self-hosted installation runs four base containers.
| Container | Role |
|---|---|
coolify | Serves the Coolify dashboard and API, processes queued jobs with Laravel Horizon, and runs scheduled jobs. |
coolify-db | Runs PostgreSQL for Coolify configuration and state. |
coolify-redis | Supports queued work and caching. |
coolify-realtime | Runs Soketi for Coolify dashboard updates and a WebSocket server for browser terminal sessions. |
The coolify-proxy and coolify-sentinel containers belong to the server runtime rather than this base control-plane stack. Coolify starts a reverse proxy on each server where it is enabled, while Sentinel remains optional.
From configuration to running containers
The details vary by resource type, but most operations follow the same control path.
Applications built from Git have more build stages than databases, one-click services, or prebuilt images. Read the Build and deployment model for those resource-specific paths.
How requests reach a resource
When an HTTP resource has a domain and uses the reverse proxy, a request follows this sequence:
- DNS or an upstream network layer directs the domain to the connected server.
- The reverse proxy on that server receives the request on port
80or443and handles TLS when configured. - The reverse proxy matches the hostname and path, then forwards the request to the resource container over an attached Docker network.
- The container handles the request and returns the response.
The Coolify server does not relay these requests. If Coolify and the resource run on the same machine, the reverse proxy still sends each request directly to the resource container.
If you disable the Coolify-managed reverse proxy for a server, you must provide the external routing and TLS path yourself. Non-HTTP resources can communicate over Docker networks or through explicitly published ports instead of this reverse proxy path.
Read Networking in Coolify for Docker networks, reverse proxy options, domains, and your firewall responsibilities.
Where configuration and data live
Coolify configuration and workload data do not all live in one place.
| Layer | Location | What it contains |
|---|---|---|
| Coolify configuration | Coolify instance | Projects, environments, server and resource settings, credentials, and platform state used by the control plane. |
| Deployment and runtime files | Connected server or build server | Generated deployment files, build artifacts, Docker images, containers, and networks used for that server's work. |
| Resource data | Connected server or external storage | Docker volumes, bind mounts, and external storage used by applications, databases, and services. |
| Reverse proxy state | Connected server with the reverse proxy enabled | The reverse proxy configuration and certificate data used to route traffic on that server. |
An instance backup contains a copy of the Coolify database used by the control plane. Application files, database data, volumes, and external storage on connected servers are not part of an instance backup.
When the Coolify instance is unavailable
Already-running resources use Docker and the existing reverse proxy configuration. They do not need the Coolify server to handle each request.
Losing SSH access has a similar boundary: Coolify cannot operate that server, but the SSH failure does not stop existing containers by itself. If the connected server, Docker daemon, reverse proxy, or upstream network fails, resources on that path can become unavailable even while the Coolify instance remains healthy.
Standard Docker resources reduce platform lock-in because you can inspect and operate them directly. The Coolify instance still holds the configuration and automation that make them manageable as Coolify resources. Keep separate backups of the Coolify database and workload data.
Continue learning
Use the detailed Core pages to follow each part of the model.
Docker and containers
Learn how images, containers, networks, and volumes form the runtime layer.
Build and deployment model
Follow how Coolify builds images and replaces application containers.
Networking in Coolify
Understand reverse proxy routing, domains, Docker networks, and exposed ports.
Choose the control plane
Compare who operates the Coolify instance before choosing a setup.
Security and backups
Review security responsibilities and create backups for the Coolify database and workload data.
