Skip to content

Command Palette

Search for a command to run...

Deploy Coolify on a VPS

Updated Jul 2026

Step-by-step guide to installing Coolify on your own VPS — a self-hosted Heroku/Vercel replacement with built-in Traefik HTTPS, Git deploys, and backups.

Before you start
  • A VPS with 2 vCPU / 4 GB RAM (Coolify + a couple of apps)
  • A fresh Ubuntu 22.04/24.04 server with root/sudo SSH access
  • A domain you can point at the server (for HTTPS)

What Coolify is

Coolify is an open-source, self-hostable platform-as-a-service — think Heroku, Vercel, or Netlify, but running on a box you own. You point it at a Git repository, it builds your app in a container, wires up a reverse proxy, and issues an HTTPS certificate, all from a web dashboard. Databases, cron jobs, one-click services (Postgres, Redis, MinIO, Plausible, and dozens more), and multi-server management come built in.

The appeal is simple: predictable cost and no per-seat or per-build billing. A managed PaaS charges you more as your traffic and team grow. A single VPS running Coolify costs the same whether you deploy once a month or fifty times a day. You trade a monthly platform bill for owning the server — and for a project you can point at as many apps as the box can hold.

One honest caveat before you start: Coolify moves fast. The v4 line is under active development and releases land frequently. That's good for features, but it means you should read the changelog before upgrading and keep backups current (both covered below). This guide targets the current v4 installer.

Server sizing — why 2 vCPU / 4 GB

Coolify's published minimum is 2 CPU cores, 2 GB RAM, and 30 GB of disk. That minimum runs Coolify itself: the dashboard, its internal Postgres database, a Redis instance, a realtime service, and the Traefik proxy. It leaves very little headroom for the apps you actually want to deploy.

The important detail: by default, Coolify deploys your apps onto the same server it runs on. Every app you build is another container — with its own Node/PHP/Python runtime, its own memory footprint, and a build step that spikes CPU and RAM. Node builds in particular are memory-hungry and will OOM-kill on a 2 GB box.

So 2 vCPU / 4 GB RAM is the realistic floor for Coolify plus a couple of small apps and a database. That headroom is why we point people at a Hetzner CX22 (2 vCPU / 4 GB) as the value pick, or Kamatera if you want to dial the exact RAM and add capacity on demand as your app count grows. If you plan to run more than a handful of apps, size up to 8 GB — it's cheaper than debugging failed deploys. Give the disk room too: container images and build caches accumulate fast, so 40–80 GB is comfortable.

Prepare the server

Start from a fresh Ubuntu 22.04 or 24.04 server. Coolify manages Docker and its own dependencies, so a clean OS is best. SSH in as root (or a sudo user) and update the system first:

apt update && apt upgrade -y

Create a non-root user with sudo rights to log in as day to day:

adduser deploy
usermod -aG sudo deploy

Coolify's installer needs Docker, curl, and a handful of tools — but you don't install them by hand. The installer does it for you. What you do need to handle yourself is the firewall. Coolify uses port 8000 for its dashboard, 80 and 443 for your deployed apps, and 22 for SSH. Open them before you install:

ufw allow 22
ufw allow 80
ufw allow 443
ufw allow 8000
ufw enable

Install Coolify

Coolify ships a single official installer. Run it as root:

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash

The script does a lot in one pass:

  • installs base tooling (curl, wget, git, jq, openssl),
  • installs Docker Engine (v24+) and configures the daemon,
  • creates Coolify's data directory at /data/coolify,
  • generates the SSH keys Coolify uses to manage servers,
  • pulls the Coolify containers and starts them.

Give it a couple of minutes. When it finishes, the terminal prints the URL to open. Point your browser at:

http://YOUR_SERVER_IP:8000

First-run setup

The first time you load that URL, Coolify shows a registration screen.

Create your admin account immediately. This is a genuine security step, not a formality: the registration page is open until the first account is created, so whoever registers first controls the server. Do it the moment the install finishes — before you go make coffee.

Once you're in, Coolify registers the machine it's running on as the "localhost" server automatically. That's the box you just installed on, and it's ready to deploy to out of the box. You don't need to add a remote server unless you later want Coolify to deploy to other machines it manages over SSH.

HTTPS + domain

Serving apps over http://IP:8000 is fine for a first test, but you want real domains and TLS. Coolify uses Traefik as its default reverse proxy, and Traefik handles Let's Encrypt certificates automatically.

First, point DNS at the server. Create an A record for your domain (say app.example.com) pointing at the server's public IP. If you want a dedicated hostname for the Coolify dashboard itself, add one for that too (e.g. coolify.example.com).

For the dashboard, open Settings in Coolify and set the Instance Domain (FQDN) to your dashboard hostname. Once DNS resolves, Traefik requests a certificate and the dashboard moves to HTTPS on that name — no more :8000.

For each app, add your domain in the application's Domains field. When you save, Traefik kicks off an ACME HTTP-01 challenge: it serves a verification file over port 80, Let's Encrypt fetches it, and — once DNS resolves — a certificate is issued in roughly 30–90 seconds. This is exactly why ports 80 and 443 must be open. Certificates are stored in /data/coolify/proxy/acme.json and Traefik renews them automatically about 30 days before the 90-day expiry, so you never touch renewals by hand.

Deploy your first app

With the server registered and a domain ready, deploying is quick:

  1. Create a Project, then an Environment (Coolify scaffolds a default one).
  2. Add a New Resource → Application and choose your source — a public Git URL, or connect GitHub/GitLab so Coolify can deploy private repos and rebuild on push.
  3. Pick the repository and branch. Coolify auto-detects the build type (Nixpacks, a Dockerfile, or Docker Compose). Override the build pack if you need to.
  4. Set the Domain (from the step above) and any environment variables your app needs.
  5. Hit Deploy. Coolify clones the repo, builds the image, starts the container, and routes your domain to it through Traefik.

Watch the live build log in the dashboard. When it goes green, your app is live on HTTPS. Enable auto-deploy and every push to the branch redeploys.

Backups

Coolify's own database is the most important thing on the box. It holds every project, every environment variable, every secret, and every server connection you've configured. Lose it and you lose the map to your entire setup, even if the app containers survive.

Coolify has a built-in backup feature for its internal Postgres database. In Settings → Backup, configure a scheduled backup and — critically — point it at off-box storage (an S3-compatible bucket). A backup that only lives on the same server dies with the server. Everything Coolify needs to restore itself lives under /data/coolify, so that path (plus the database dump) is what you're protecting.

Two more habits worth building:

  • Back up your applications' own databases (the Postgres/MySQL services you create in Coolify) on their own schedules — the platform backup covers Coolify's config, not your app data.
  • Periodically test a restore. An untested backup is a guess.

Upgrades

Coolify can update itself. In Settings you can enable auto-updates, or take the update when the dashboard shows a new-version notification. To upgrade manually from the terminal, re-run the installer:

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash

Because Coolify iterates quickly, read the release notes before a major upgrade and make sure your backup ran first. Pin to a specific version if you want to control exactly when you move by passing it to the installer, e.g. ... | sudo bash -s 4.0.0. For most people, staying on the current stable line with a fresh backup is the right call.

Troubleshooting

Dashboard won't load on :8000. Almost always the firewall. Confirm port 8000 is open (ufw status) and, if your VPS host has a separate cloud firewall, that 8000, 80, and 443 are allowed there too — cloud firewalls sit in front of ufw.

Certificate never issues / app stuck on HTTP. The ACME challenge needs DNS pointing at the server and port 80 reachable from the internet. Check the A record has propagated (dig app.example.com) and that nothing else is bound to port 80. Traefik retries, but it can't verify a domain that doesn't resolve to your box yet.

A build fails or the server grinds to a halt. Usually memory. A Node or similar build spikes RAM and gets OOM-killed on an undersized box — the single best argument for the 4 GB (or larger) sizing above. Check container logs in the dashboard, and size up if builds routinely fail.

Verification + next steps

You're done when you can: load the Coolify dashboard over HTTPS on your own domain, deploy an app from Git and reach it on its own domain with a valid certificate, and see a scheduled backup landing in off-box storage.

From here, add more apps, wire up one-click databases, or register additional servers for Coolify to manage. The one thing that makes or breaks the experience is the box underneath it — Coolify and your apps share it. A Hetzner CX22 is the value pick at 2 vCPU / 4 GB; reach for Kamatera when you want to size RAM precisely and scale on demand. See Best VPS for self-hosting for the ranked picks.

Next steps