# Coolify host

Source: https://docs.quake.ai/resources/iac-templates/coolify-host
Markdown: https://docs.quake.ai/resources/iac-templates/coolify-host.md

---

# Coolify host

This pattern composes Compute, Network, and Block Storage into a self-hosted deploy platform you run on infrastructure you control.

## What this template does

Provisions a single instance running [Coolify](https://coolify.io), an open-source deploy platform (a self-hosted alternative to Vercel, Netlify, or Heroku). You connect a git repository and Coolify builds, deploys, and manages your apps, with Postgres and Redis add-ons it provisions for you:

- Compute instance that runs Coolify in Docker, sized above Coolify's baseline of 2 vCPU and 2 GiB RAM
- Private network, subnet, router, port, and security group; a floating IP for public access
- A block volume mounted at `/var/lib/docker`, so image layers, container volumes, and deployed-app data live on a volume you can grow rather than on the boot disk
- cloud-init runs Coolify's official installer, which bootstraps Docker Engine 24+ and generates its own secrets under `/data/coolify`

Coolify gives you a git-push build-and-deploy loop on a VM you own. The platform already runs Coolify internally for Qdrant and Umami, so this template uses tooling the platform operates day to day.

No credential ships with this template. The installer generates its own secrets on first boot, and you set the admin account the first time you open the dashboard.

## Parameters

| Parameter | Description | Default |
| --- | --- | --- |
| `key_name` | SSH keypair name (must already exist) | No default |
| `flavor_name` | Instance size (Coolify baseline is 2 vCPU / 2 GiB) | `s1a.medium` |
| `image_name` | Operating system image | `Ubuntu-24.04` |
| `app_name` | Display name prefix for resources | `coolify` |
| `volume_size` | Block volume size in GiB, mounted at `/var/lib/docker` | `50` |
| `external_network` | External network for floating IP allocation | `PublicStatic` |
| `private_cidr` | CIDR for the private subnet | `10.30.0.0/24` |
| `dashboard_allowed_cidr` | CIDR allowed to reach the dashboard on port 8000 | `10.30.0.0/24` |

## Dashboard access and security

The dashboard listens on port 8000 over plain HTTP. The security group restricts 8000 to `dashboard_allowed_cidr`, which defaults to the private network only, so the raw dashboard stays off the public internet. Reach it one of three ways:

- Set a domain in Coolify and let its built-in proxy serve the dashboard over HTTPS on 443. Point the domain's DNS A record at the floating IP. This is the recommended path for routine admin access.
- Tunnel over SSH: `ssh -L 8000:localhost:8000 user@FLOATING_IP`, then open `http://localhost:8000`.
- Set `dashboard_allowed_cidr` to `YOUR_IP/32` to reach port 8000 directly from one address.

Ports 80 and 443 stay open to the internet because they carry the apps Coolify deploys and the dashboard when you serve it over a domain.

## When to use this pattern

Run a deploy platform with a dashboard, branch previews, and managed add-ons on a VM you operate, without wiring those pieces yourself. Coolify maps a git push to a build and a deploy, the same shape a `quake.yaml` launch manifest declares, which makes it a natural target for the launch handoff packet.

For a single containerized app without the platform layer, use the [Next.js app template](/resources/iac-templates/nextjs-app) or the [Containerized app template](/resources/iac-templates/containerized-app). For a standalone datastore the deployed apps consume, see [self-managed PostgreSQL](/resources/iac-templates/self-managed-postgres) or the [Redis / Valkey cache](/resources/iac-templates/redis-cache).

## Estimated cost

<PricingCompanion
  components={[
    { kind: "template", slug: "coolify-host", required: true },
  ]}
/>

## Template source

<TemplateSource slug="coolify-host" />

<TemplateResourceMap template="coolify-host" format="opentofu" />

## Customize this pattern

- [Customize a template's image and flavor](/docs/automation/how-to/customize-template-image-flavor)
- [Add a block volume to a template](/docs/automation/how-to/add-volume-to-template)
- [Parameterize a template with a tfvars file](/docs/automation/how-to/parameterize-template-tfvars)

## See also

- [Next.js app template](/resources/iac-templates/nextjs-app)
- [Containerized app template](/resources/iac-templates/containerized-app)
