Coolify VPS Setup: Install, Secure and Size a Self-Hosted PaaS (2026)

Install Coolify on a VPS without the usual gaps: what the script changes, the first-visitor admin risk, why UFW can't close port 8000, build-ready sizing, backups and cost, plus Dokploy and CapRover.

Title card reading “Coolify on a VPS” for the HourlyVPS guide to installing, securing and sizing the self-hosted Coolify platform

A Coolify VPS is a Linux server running Coolify, an open-source (Apache 2.0) platform that gives you a Heroku-, Vercel- or Netlify-style workflow on a server you control: connect a Git repository, and Coolify builds the app, runs it in Docker containers behind a reverse proxy with automatic HTTPS, and manages databases and backups from a web dashboard. Coolify’s documented minimum is 2 CPU cores, 2 GB of RAM and 10 GB of free disk on a 64-bit Linux server such as Ubuntu 24.04 LTS, and one install command, run as root, sets everything up.

The command is the easy part. This guide covers what most setup guides skip: what the script changes on your server, why the first visitor to a fresh install can take it over, why UFW cannot close the dashboard port, and how much CPU and RAM your builds need. Every step was checked against Coolify’s documentation and the install script served on October 3, 2026, when Coolify v4.3.23 (released September 18, 2026) was the current release.

Key takeaways

  • Coolify documents a 2-core, 2 GB RAM, 10 GB disk minimum on 64-bit Linux such as Ubuntu 24.04 LTS; builds on the same server, not Coolify itself, are what usually overload a small VPS.
  • Pass ROOT_USERNAME, ROOT_USER_EMAIL and ROOT_USER_PASSWORD to the installer, because Coolify warns that whoever reaches the registration page first becomes admin with root access to the server.
  • Ports 8000, 6001 and 6002 are published by Docker, so UFW cannot close them; once the dashboard works on its HTTPS domain, bind them to 127.0.0.1 with docker-compose.custom.yml.
  • Coolify manages its own server over SSH as root with a key, so a hardened server needs PermitRootLogin prohibit-password, not no.
  • Back up three things separately and off the server: the Coolify database plus the APP_KEY in .env, each database through scheduled dumps, and app volumes; a rollback restores none of them.

What is Coolify, and what does it replace?

Coolify is a control plane. It connects to each server over SSH, runs Docker commands there, and keeps your configuration in its own PostgreSQL database. Your apps are ordinary Docker containers, so if the Coolify dashboard goes down, running apps keep serving traffic; you lose deploys, scheduled jobs and the dashboard until it comes back, as How Coolify works explains.

It deploys three kinds of resources: applications (from a Git repository, a Dockerfile, a Docker Compose file or a prebuilt image), databases, and one-click services, of which its GitHub repository lists more than 300. If you are coming from a managed platform, this mapping, based on Coolify’s migration guide, shows where each familiar piece now lives:

On a managed platformOn CoolifyWho runs it
Git integration and auto-deployA Git source (public repository, deploy key or GitHub App) plus webhooksCoolify
Framework preset or buildpackNixpacks or Railpack detection, or your own DockerfileCoolify, on your server
Dyno or serverless runtimeA Docker containerYour VPS
Production domain and certificateA domain on the resource; the proxy (Traefik by default, or Caddy) requests and renews TLSCoolify’s proxy on your VPS
Managed Postgres or Redis add-onA database container, with scheduled dumps for every engine except Redis, Dragonfly and KeyDBYou: data, storage and restores
Instant rollbackRedeploy an image still kept on the server; data is not rolled backCoolify
OS patching, firewall, disk spaceNot includedYou
Mapping based on Coolify’s “Coming from managed platforms” and security-model pages, checked October 2026.

That last row is the real trade. Coolify’s security model lists operating-system updates, SSH access, firewall rules, DNS and tested backups as your responsibility, whether you self-host Coolify or use Coolify Cloud. If the idea of a server you administer is new, start with what a VPS is and what you manage on one.

Coolify VPS requirements: CPU, RAM, disk, OS and ports

ItemCoolify’s documented requirementWhat it means in practice
CPU2 coresAdd cores if builds run on the same server
Memory2 GB RAMBuilds are the spike; see the sizing section
Disk10 GB freePlus room for Docker images, volumes and local backups
Architectureamd64 or arm64HourlyVPS plans run on Intel Xeon hosts (amd64)
Operating systemDebian, Ubuntu LTS (20.04, 22.04, 24.04), the Red Hat family, SUSE, Arch, Alpine, 64-bit Raspberry Pi OSThis guide uses Ubuntu 24.04 LTS. Debian 12 works the same way. Non-LTS Ubuntu: use the manual install
AccessSSH, and root for the automated installerA sudo user can run the script with sudo
Server stateA fresh server is recommendedDo not reuse a box that already serves websites on ports 80 and 443
Requirements from Coolify’s Start with Self-hosted page, checked October 3, 2026.

Coolify also documents that it can start on 1 core, 512 MB of RAM and 4 GB of disk, “but this is not recommended”, and that running builds and Coolify on one server can make it unresponsive if you do not watch resource usage.

Which ports does Coolify need?

PortUsed forKeep it public?
22/tcpSSH: your logins and Coolify’s own connection to this serverYes; read the UFW note before you limit it to your IP
80/tcpHTTP and Let’s Encrypt certificate challenges through the Coolify proxyYes
443/tcpHTTPS to your apps, and later to the dashboardYes
8000/tcpThe dashboard by IP, http://SERVER_IP:8000Only until the dashboard has a domain
6001/tcpReal-time dashboard updates by IPOnly until the dashboard has a domain
6002/tcpThe browser terminal by IPOnly until the dashboard has a domain
Ports for the server that runs a self-hosted Coolify instance, from Coolify’s firewall documentation (checked October 3, 2026).

Coolify builds its sslip.io test addresses from the server’s public IP, so a public IPv4 address matters. Every server comes with one dedicated IPv4 address and IPv6, included in the plan price. A remote server that Coolify only manages needs 22, 80 and 443, not the three dashboard ports.

What does the Coolify install script change on your server?

The install script, as served on October 3, 2026, does more than Coolify’s docs summarize, and several of its changes matter if the server is not brand new:

StageWhat the script doesWhy it matters
ChecksExits unless it runs as root; refuses Docker installed from the Snap StoreAs a sudo user, pipe it to sudo bash
PackagesInstalls curl, wget, git, jq and opensslNothing to do
OpenSSHInstalls and starts openssh-server if missing, reads PermitRootLogin and only prints a warning when root login is off. It never edits sshd_configA hardened server installs fine, then fails Coolify’s server validation (step 1 below)
DockerIf Docker is missing, runs Docker’s convenience script from get.docker.com, falling back to Docker’s apt repository. Stops if Docker Engine is older than version 24Docker updates now come from Docker’s repository, which Ubuntu’s unattended upgrades skip by default
Docker daemonCopies any existing /etc/docker/daemon.json to daemon.json.original-<timestamp>. Unless that file already defines an address pool, writes a new one with json-file logs capped at 10 MB × 3 files and a 10.0.0.0/8 address pool split into /24 networks, then restarts DockerDocker settings you made for earlier stacks are replaced; compare with the backup copy
/data/coolifyDownloads Coolify’s Compose files and upgrade.sh into /data/coolify/source, generates APP_KEY and the database, Redis and real-time secrets in .env, and sets owner UID 9999 and mode 700Use sudo to read anything there; .env is your recovery key
SSH keyCreates an ed25519 key in /data/coolify/ssh/keys and appends its public half to root’s ~/.ssh/authorized_keys, after deleting any line in that file containing the word “coolify”This key is how the Coolify container manages the server as root
CoolifyRuns upgrade.sh, which pulls and starts four containers: coolify, coolify-db (PostgreSQL), coolify-redis and coolify-realtimePorts 8000, 6001 and 6002 are now published on every interface
Read from install.sh and upgrade.sh as served by cdn.coollabs.io on October 3, 2026. The script does not change firewall rules, swap, users or sysctl settings.

Two consequences follow. First, start from a fresh server, as Coolify recommends: if you already followed our Docker install guide, the installer keeps that Docker Engine but replaces its daemon.json. Second, Coolify’s proxy needs ports 80 and 443 for itself, so it cannot share them with an Nginx or Caddy reverse proxy you installed earlier.

How to install Coolify on a VPS running Ubuntu 24.04

Run these four steps in order on a fresh Ubuntu 24.04 LTS server, as a sudo user who logs in with an SSH key. You need a domain whose DNS you control later, when the dashboard moves to HTTPS.

Step 1: Harden the server, but keep key-only root login

Deploy the VPS, connect to it over SSH, and work through steps 1 to 5 of our VPS security checklist: updates, a sudo user, your SSH key, password logins off, and UFW with SSH allowed. Make one deliberate change. Coolify manages its own server over SSH as root with a key, so the checklist’s PermitRootLogin no breaks Coolify’s connection to localhost. Coolify’s OpenSSH page asks for PermitRootLogin prohibit-password instead, which lets root in with a key but never with a password.

If you already created the checklist’s drop-in file, change that one line, test the configuration and reload SSH:

sudo sed -i 's/^PermitRootLogin no$/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config.d/00-hardening.conf
sudo sshd -t && sudo systemctl reload ssh
sudo sshd -T | grep -i -E '^(permitrootlogin|passwordauthentication)'

The last command should print permitrootlogin with without-password or prohibit-password (two names for the same setting) and passwordauthentication no. Root still cannot log in with a password. Coolify’s alternative, a non-root server user, is marked experimental and needs passwordless sudo for every command, so it is root-equivalent anyway.

Step 2: Run the installer with a pre-created admin account

Anyone who reaches the registration page first can become the instance admin and gain root access to your server.

Coolify Docs, Start with Self-hosted

Port 8000 is open to the internet the moment the installer finishes. Close that window by passing the admin account to the installer, a documented option that exists so “the registration page is never exposed”. Download the script first so you can read what you are about to run as root:

curl -fsSL https://cdn.coollabs.io/coolify/install.sh -o coolify-install.sh
less coolify-install.sh

Then run it with sudo. read -s keeps the password out of your shell history:

read -r -s -p 'Coolify admin password: ' CPW; echo
sudo env ROOT_USERNAME='admin' ROOT_USER_EMAIL='[email protected]' ROOT_USER_PASSWORD="$CPW" bash coolify-install.sh
unset CPW
  • ROOT_USERNAME: 3 to 255 characters; letters, digits, spaces, underscores and hyphens.
  • ROOT_USER_EMAIL: a real address on a domain with valid DNS records.
  • ROOT_USER_PASSWORD: at least 8 characters with uppercase, lowercase, a digit and a symbol. The installer writes it into /data/coolify/source/.env with sed, so use symbols such as ! or - and avoid |, &, \, $, quotes and spaces.

When it finishes, the script prints the dashboard address, http://SERVER_IP:8000, and a reminder to back up the .env file. If you prefer Coolify’s one-line form, run curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash as your sudo user (Coolify’s docs pipe it to plain bash as root), then register your admin account immediately.

Step 3: Log in through an SSH tunnel and lock the settings

http://SERVER_IP:8000 is plain HTTP, so your password would cross the internet unencrypted. Forward the three dashboard ports over SSH instead (how local port forwarding works), then open http://localhost:8000 on your own computer:

ssh -L 8000:127.0.0.1:8000 -L 6001:127.0.0.1:6001 -L 6002:127.0.0.1:6002 you@SERVER_IP

Forwarding 6001 and 6002 too lets live updates and the browser terminal, which use those ports for direct access, work through the tunnel. Once you are logged in:

  1. Open Servers > localhost and confirm the General page reads “Server is reachable and validated”. If it does not, recheck step 1.
  2. In Settings > Configuration > Advanced, set Registration to “Registration disabled”, and keep API access disabled until an integration needs it.
  3. Turn on two-factor authentication for your account and store the recovery codes.
  4. In Settings > Configuration > Updates, choose automatic updates or a manual routine (see keeping Coolify updated).

Step 4: Save the .env file off the server

Coolify encrypts stored credentials and private keys with the APP_KEY in /data/coolify/source/.env, and an instance backup does not include that file. Without it, a restored Coolify cannot read its own secrets. Print the file and store its contents in a password manager:

sudo cat /data/coolify/source/.env

If you used step 2’s variables, the file also holds the admin password, so treat all of it as a secret.

How do you secure the Coolify dashboard?

Ports 8000, 6001 and 6002 are published by Docker, and Docker’s NAT rules forward published ports before UFW sees the traffic, so ufw deny 8000 changes nothing (why Docker bypasses UFW). Coolify’s firewall page says the same: do not rely on plain UFW; use a provider firewall, the community tool ufw-docker, or change how Coolify publishes the ports. On a single VPS the cleanest fix is the last one: give the dashboard a domain, then bind the three ports to 127.0.0.1.

Give the dashboard its own domain

  1. Create an A record, and an AAAA record for IPv6, such as coolify.example.com pointing at the server (setting A and AAAA records).
  2. In Settings > Configuration > General, enter https://coolify.example.com in URL and save. The Coolify proxy requests a Let’s Encrypt certificate through ports 80 and 443.
  3. Open https://coolify.example.com, log in, and check that the dashboard loads over HTTPS, status changes appear without a page reload, and Terminal in the sidebar connects.

Do not reuse an application’s domain for the dashboard; Coolify warns that routing and certificates become unpredictable. Set this domain before you connect a GitHub App, because GitHub needs a public Coolify URL to deliver webhooks.

Add one more DNS record while you are there: a wildcard such as *.apps.example.com pointing at the same server. Enter https://apps.example.com in Wildcard Domain under Servers > localhost > General, and Generate Domain then gives each app its own subdomain. Without it, Coolify falls back to sslip.io addresses, which stay on plain HTTP because Let’s Encrypt rate-limits the shared sslip.io zone.

Bind ports 8000, 6001 and 6002 to localhost

Warning: Do this only after the dashboard, live updates and terminal work through the domain. If you lose the domain later, the SSH tunnel from step 3 still reaches 127.0.0.1:8000.

Coolify loads /data/coolify/source/docker-compose.custom.yml on top of its own Compose files and keeps it across updates. Create it with the localhost binding from Coolify’s firewall docs:

sudo tee /data/coolify/source/docker-compose.custom.yml > /dev/null <<'EOF'
services:
  coolify:
    ports: !override
      - "127.0.0.1:${APP_PORT:-8000}:8080"
  soketi:
    ports: !override
      - "127.0.0.1:${SOKETI_PORT:-6001}:6001"
      - "127.0.0.1:6002:6002"
EOF

Validate the merged configuration. --quiet prints nothing when the files are valid, so the secrets in .env stay off your screen:

sudo docker compose --env-file /data/coolify/source/.env \
  -f /data/coolify/source/docker-compose.yml \
  -f /data/coolify/source/docker-compose.prod.yml \
  -f /data/coolify/source/docker-compose.custom.yml \
  config --quiet

Apply it with the Compose command from Coolify’s Compose-overrides docs. It recreates Coolify’s own four containers; your apps keep running:

sudo docker compose --env-file /data/coolify/source/.env \
  -f /data/coolify/source/docker-compose.yml \
  -f /data/coolify/source/docker-compose.prod.yml \
  -f /data/coolify/source/docker-compose.custom.yml \
  up -d --pull always --remove-orphans --force-recreate

Coolify’s firewall page applies the file by re-running install.sh instead, but its update page warns that install.sh resets ownership and permissions under /data/coolify on an existing instance, which is why this guide uses the Compose command. Check the result on the server:

sudo docker ps --format 'table {{.Names}}\t{{.Ports}}'

In the coolify and coolify-realtime rows, every published port should start with 127.0.0.1, with no 0.0.0.0 or :: entries left. From your own computer, curl -m 5 http://SERVER_IP:8000 should now fail to connect, while https://coolify.example.com still loads.

What UFW still does on a Coolify server

Keep the checklist’s UFW rules: SSH allowed, everything else denied. UFW still filters SSH and anything that listens on the host itself. It does not need rules for 80 and 443, because Docker publishes those for the proxy, and it will not block a database port you publish later. To filter Docker-published ports by source address, use the DOCKER-USER chain or ufw-docker.

One trap is specific to this server. Coolify reaches its own SSH port from a container, so that connection comes from the Docker address pool the installer set (10.0.0.0/8 by default), not from your IP. If you narrow the SSH rule to your own address, allow that pool as well, or localhost stops validating:

sudo ufw allow proto tcp from 10.0.0.0/8 to any port 22

Keep Coolify updated: the advisory record

Coolify stores SSH private keys and runs commands as root on every server it manages. As of October 3, 2026, its GitHub repository lists 70 published security advisories, 21 of them rated critical, published between January 2025 and July 2026. The affected versions they list are all 4.0.0 or older (the current release is 4.3.23), and 18 of the 21 critical ones describe an attacker who already has a dashboard account. Two habits follow:

  • Stay current. In Settings > Configuration > Updates, either enable automatic updates on a schedule, or read the release notes and select Upgrade Now on a fixed day each week. Coolify’s update guide asks for an instance backup first, and deployments running during an update fail.
  • Treat every dashboard account as root on your servers. Keep registration disabled, give team members the lowest role they need, require 2FA, and give each integration its own API token with an expiry date.

Deploy your first app from Git

With the server validated, a first deployment takes a project, a source and a build pack. Coolify’s example repository, https://github.com/coollabsio/coolify-examples.git, works for a dry run.

  1. Select New Project and name it, then open the project and select Create New Resource.
  2. Choose the source: Public Repository for an HTTPS clone URL, or a deploy key or GitHub App for private code (table below).
  3. Choose the Build Pack: Nixpacks or Railpack (beta) to detect the framework, Static for files that are already built, Dockerfile, or Docker Compose.
  4. Set Ports Exposes to the port your app listens on, such as 3000. Inside the container the app must listen on 0.0.0.0, not localhost, or the proxy returns 502 Bad Gateway.
  5. In Domains, enter the full URL with https://, for example https://app.example.com:3000. The :3000 selects the container port; visitors still arrive on 443. For a first test, keep the generated sslip.io address.
  6. Add environment variables. Build Variable and Runtime Variable are both on for a new variable; turn Build Variable off for secrets the app reads only at runtime.
  7. Select Deploy and watch the build log.
SourceUse it whenAutomatic deploys
Public repositoryThe code is public and clones over HTTPSAdd a manual webhook, then enable Auto Deploy
Deploy keyOne private repository needs read-only SSH accessManual webhook
GitHub AppPrivate repositories, scoped access and pull-request preview deploymentsWebhooks are set up by the app
Git source options from Coolify’s documentation, checked October 2026.

Rollbacks redeploy an image Coolify kept on the server. They do not roll back a database or uploaded files. Prefer a ready-made app? Coolify’s one-click services include n8n; our n8n self-hosting guide lists the environment variables it needs behind a reverse proxy.

Add a database

From Create New Resource, choose PostgreSQL, MySQL, MariaDB, MongoDB, Redis, Dragonfly, KeyDB or ClickHouse. Coolify generates credentials and a named volume, and the database gets no public endpoint by default. Copy its Internal URL into your app’s environment variables; containers on the same Coolify network reach it by container name.

Warning: Make it publicly available starts a TCP proxy on a host port, and that port is published by Docker, so UFW does not block it. For occasional admin work, open the database’s Terminal in the dashboard instead. If an outside client must connect, Coolify’s docs ask you to restrict the port with a firewall and use SSL where the engine supports it.

Common Coolify problems and documented fixes

SymptomLikely causeFix
Installer stops with “Please run this script as root or with sudo”The script was piped to bash as a normal userRun it with sudo, as in step 2
Installer says Coolify does not support Docker installed via snapDocker came from the Snap Storesudo snap remove docker, then run the installer again
localhost is not reachable or validatedPermitRootLogin no, or Coolify’s key is missing from /root/.ssh/authorized_keysSet prohibit-password (step 1); Coolify’s OpenSSH page covers the manual key setup
Browser shows a certificate warning on your domainDNS does not point at the server yet, port 80 or 443 is blocked, the domain was entered with http://, or a generated sslip.io address was switched to https://Fix the A/AAAA record, enter your own domain with https://, redeploy
502 Bad Gateway on the domainWrong Ports Exposes value, or the app listens on 127.0.0.1 inside the containerMatch the port; make the app listen on 0.0.0.0
The server becomes unresponsive during a deployThe build uses up RAM or CPUBuild in CI or on a build server, add swap, or resize (see sizing)
Deploys fail with “no space left on device”Images and build cache filled the diskRun Docker Cleanup on the server page; keep volume deletion off
Dashboard unreachable after an update or reboot, with ufw-dockerA rule points at the coolify container’s old IP addressReplace it with a rule for the destination port
Fixes from Coolify’s troubleshooting, OpenSSH, domain and firewall pages and its install script, checked October 3, 2026.

How do you back up Coolify on a VPS?

Coolify keeps three kinds of data apart, and each needs its own backup. A rollback restores none of them.

WhatCoolify featureStored by default inRestore notes
Coolify itself: projects, settings, credentialsSettings > Backup: a daily instance backup once configured, with an optional S3 copyLocal storage on the Coolify serverNeeds the matching APP_KEY from .env
PostgreSQL, MySQL, MariaDB, MongoDB, ClickHouseBackups on each database: scheduled engine dumps such as pg_dump, with an optional S3 copy/data/coolify/backups on the database’s serverCoolify’s docs: restore into a disposable database before you trust a backup
Redis, Dragonfly, KeyDBNo scheduled backups in CoolifyTheir Docker volumeUse the engine’s own persistence and backup tools
App files in volumes or directory mountsBackups on the application: scheduled .tar.gz archives, with an optional S3 copyThe deployment serverNo restore button; optionally stop containers during the archive for consistency
From Coolify’s instance-backup, database-backup and storage-backup pages, checked October 3, 2026.

Every local copy sits on the same VPS it is meant to protect. Turn on the S3 copy for each schedule, pointed at an S3-compatible bucket outside the server, and keep the APP_KEY in your password manager. For files Coolify does not archive, a file-level tool such as restic, sent to the same kind of bucket, covers the rest; our VPS backup guide with restic sets it up.

Tip: Test a restore without touching production: deploy a second server by the hour, restore last night’s dump into it, then delete it. Two hours on an hourly Quartz Q4 costs $0.06. Before you ever retire the main server, run through the checklist before you delete a VPS.

How much CPU and RAM does Coolify need for builds?

Coolify’s documented 2 GB minimum covers Coolify itself. Builds are what push a small server over: by default Coolify builds each image on the server that runs your apps, and its troubleshooting page is blunt about it:

The docker image build process can overload your server.

Coolify Docs, Server Crash During Build

Its rivals agree: Dokploy sets its 2 GB RAM and 30 GB disk minimum to absorb “the resources consumed by Docker during builds”, and CapRover warns that 512 MB “might not be enough” for builds. Size for the build, not for Coolify at rest:

Your Coolify workloadStarting planMonthly capReasoning
Apps deployed from prebuilt images (built in CI), static sites, one databaseQuartz Q4: 2 vCPU, 4 GB, 80 GB NVMe$15.00/month capMeets the 2-core minimum with 2 GB to spare. Coolify’s docs show an example server with the same 2 vCPU and 4 GB that runs 16 static sites, 25 Rust services, bots and workers, PostgreSQL and two Valkey databases at 2.6 GB average RAM, 60 to 70% CPU and 32 GB of disk, because its apps are built elsewhere and heavily optimized.
Building from Git on the same server: a few Node, Python or PHP apps plus databasesQuartz Q8: 4 vCPU, 8 GB, 160 GB NVMe$25.00/month capEach build runs next to everything already running. Twice Q4’s RAM leaves room for one build at a time, and 160 GB holds images and build cache between cleanups.
Frequent or heavy builds: large TypeScript monorepos, Rust, many deploys a dayChrono C8: 2 dedicated vCPU, 8 GB, 100 GB NVMe$35.00/month capA build keeps every core busy for minutes. Dedicated vCPUs give steadier build times under that sustained load; Q8 gives you more vCPUs, but shared.
Builds that still slow down running appsCoolify server plus a separate build serverTwo plansWith Coolify’s build-server feature, another machine builds the image and pushes it to a registry; the app server only pulls. A build server cannot run resources.
Sizing reasoning from Coolify’s documented minimums and example server, not from benchmarks. Monthly cap: the most the server costs in a billing period. Check real usage with docker stats and resize when needed.

Two more ways keep builds off a small server, both from Coolify’s docs: build the image in GitHub Actions, push it to a registry such as GitHub Container Registry, and deploy it as a Docker Image resource; or use the build server above. If you would rather run those CI builds on your own server than on GitHub-hosted runners, an ephemeral self-hosted runner on an hourly VPS bills only for the hours it exists.

On a tight plan, a swap file gives a memory-hungry build somewhere to spill instead of being stopped by the kernel’s out-of-memory killer. It is slower than RAM and no substitute for it (adding swap on Ubuntu 24.04). Disk fills quietly too: Coolify’s Docker Cleanup docs suggest starting with a daily run at midnight and an 80% usage threshold, with Delete Unused Volumes left off, because an unused volume can still hold database data.

Builds download base images and packages whenever the cache misses. Istanbul plans include the monthly traffic allowance listed for each plan, prorated for a server that exists for part of a billing period. For where to put the server, see how to choose a VPS location.

What does Coolify on a VPS cost per month?

Self-hosted Coolify has no license fee, and Coolify’s self-hosted vs Cloud comparison says it includes every current and upcoming feature. You pay for the server. Coolify Cloud, where the Coolify team runs the dashboard for you, starts at $5 per month for up to two connected servers, plus $3 per month for each additional server, and you still pay for those servers (Coolify’s pricing note, checked October 3, 2026).

Cost: An always-on Coolify server on Quartz Q4 is billed by the hour at $0.03/hour, and its charges stop at $15.00 in each billing period. You never pay more than the monthly price for a server in a billing period (one month from your order date), which is what makes it a monthly VPS with no contract and no prepaid term.

Want to try Coolify before committing? Four hours on an hourly VPS cost $0.12: install it, deploy one repository and decide. If Coolify stays, keep the same server; there is nothing to switch, because the hourly charges stop at the cap. If it goes, delete the server rather than stopping it. A stopped server is still billed, because its vCPU, memory, disk and IP addresses stay reserved for you; only deleting the server stops billing.

Each new server is ordered with a small initial credit that prepays its hours; how hourly billing works covers it with examples. The hourly vs monthly comparison explains the cap, and the VPS cost calculator prices any other duration.

Quartz Q4 as a Coolify server: a 4-hour trial, a day, a week and an always-on month
DurationHours on the meterCost $0.03/hour · cap $15.00/monthNote
4 hours4$0.12
1 day24$0.72
7 days168$5.04
30 days720$15.00Capped at the monthly price
Charges stop at $15.00 after 500 hours (about 20.8 days) in a billing period; the rest of that period is free.

Coolify vs Heroku: a small-app example

Heroku‘s pricing page (checked October 3, 2026) lists Basic dynos at $7 per month each with 0.5 GB of RAM, and its smallest Postgres plan, Essential-0, at $5 per month with 1 GB of storage. An app with a web process, a worker and a database comes to $19 per month (our arithmetic) for 1 GB of app RAM. On Coolify, the same three containers share a Quartz Q4’s 4 GB for at most $15.00 per billing period.

Heroku is the better fit when nobody on the team wants to patch servers, watch disks or rehearse restores: OS patching and certificate management come with its price. Coolify fits when you run several apps on one server, need more memory per app, or want the data on a server you control. All plan prices are on the pricing page.

Coolify vs Dokploy vs CapRover

All three turn a VPS into a self-hosted PaaS built on Docker; they differ in proxy, orchestration and how much server they ask for.

CoolifyDokployCapRover
LicenseApache 2.0Apache 2.0, except code in a /proprietary directoryApache 2.0
Documented minimum2 CPU cores, 2 GB RAM, 10 GB disk2 GB RAM, 30 GB diskNo fixed minimum; warns that 512 MB “might not be enough” for builds
Installcurl -fsSL https://cdn.coollabs.io/coolify/install.sh | bashcurl -sSL https://dokploy.com/install.sh | shOne docker run of caprover/caprover
Dashboard before a domainPort 8000 (plus 6001 and 6002)Port 3000Port 3000, default password captain42
Reverse proxyTraefik (default) or CaddyTraefiknginx
OrchestrationDocker on each server; Swarm support deprecated and due for removal in v5Docker SwarmDocker Swarm
Latest releasev4.3.23, September 18, 2026v0.30.8, September 29, 2026v1.15.4, August 30, 2026
GitHub starsAbout 62,500About 37,600About 15,200
Sources: Coolify docs and GitHub; Dokploy installation docs and LICENSE.MD; CapRover getting-started docs and GitHub (checked October 3, 2026).
  • Coolify fits when you want 300+ one-click templates, a choice of Traefik or Caddy, and plain Docker without Swarm. Budget for its 2-core minimum and its advisory history.
  • Dokploy fits teams that want Docker Swarm from the first install, since its installer initializes Swarm.
  • CapRover fits the smallest servers and nginx users. It starts with a published default password, so change that before anything else.

Not sure yet? Each installs with one command (CapRover needs Docker installed first), so deploy one test server per platform by the hour, run your own repository on each, and keep the one you like. If you would rather compare the servers themselves, the Hourly VPS Fine-Print Index lists billing rules for 20 providers.

Deploy this setup

Run Coolify and your apps 24/7

Quartz Q4 · 2 shared vCPU · 4 GB RAM · 80 GB NVMe · Istanbul

  • Per hour$0.03/hour
  • Per day (24 h)$0.72/day
  • Monthly cap$15.00/monthFor this job
Deploy Quartz Q4

Starts with a $5 initial credit, which goes into the server’s balance and pays for its hours.

Billed by the hour, never more than $15.00 per billing period. Delete the server and billing stops.

FAQ

Is Coolify free to use on a VPS?

Yes. Self-hosted Coolify is open source under the Apache 2.0 license, with no license fee and all features included; you pay only for the server. Coolify Cloud, where the Coolify team runs the dashboard for you, is a subscription that starts at $5 per month according to Coolify's docs (October 2026).

What is the minimum VPS for Coolify?

Coolify documents 2 CPU cores, 2 GB of RAM and 10 GB of free disk on an amd64 or arm64 server. It can start on 1 core and 512 MB of RAM, but Coolify does not recommend that, and building apps on the same server needs more headroom than the minimum.

Is Coolify safe to expose to the internet?

Coolify holds SSH keys with root access to your servers, and its GitHub repository lists 70 published security advisories, 21 rated critical, all affecting version 4.0.0 or older. Keep it updated, disable registration, require 2FA, serve the dashboard over HTTPS and bind ports 8000, 6001 and 6002 to localhost.

Can I install Coolify on a server that already runs websites?

Coolify recommends a fresh server. Its proxy needs ports 80 and 443, and the installer can rewrite /etc/docker/daemon.json (keeping a backup copy), so an existing web server or Docker setup will conflict; use a new VPS or Coolify's manual installation method.

Do I need a domain name for Coolify?

Not to start: Coolify generates sslip.io test addresses from the server's IP, which work over plain HTTP only. You need your own domain for production HTTPS, for GitHub App webhooks, and to close the dashboard's direct-IP ports safely.

Does Coolify need root access?

The automated installer must run as root, and sudo works. By default Coolify manages each server over SSH as root with a key; a non-root user is possible but experimental, and it still needs passwordless sudo.

How do I update Coolify?

In Settings > Configuration > Updates, select Upgrade Now or turn on automatic updates with a schedule, after taking an instance backup. From a terminal, Coolify's docs run its upgrade script with an explicit version, such as curl -fsSL https://cdn.coollabs.io/coolify/upgrade.sh | sudo bash -s 4.3.23, and warn against re-running install.sh on an existing instance.

Sources

  1. Start with Self-hosted (requirements and installation)Coolify Docs · coolify.io · checked
  2. Coolify install script (install.sh)coollabs.io · cdn.coollabs.io · checked
  3. FirewallCoolify Docs · coolify.io · checked
  4. Configure OpenSSHCoolify Docs · coolify.io · checked
  5. Update CoolifyCoolify Docs · coolify.io · checked
  6. Back up Coolify (instance backup)Coolify Docs · coolify.io · checked
  7. Self-hosted vs Coolify CloudCoolify Docs · coolify.io · checked
  8. Security advisories for coollabsio/coolifyGitHub · github.com · checked
  9. Dokploy installationDokploy Docs · docs.dokploy.com · checked
  10. Heroku pricingHeroku · heroku.com · checked
All posts