Tutorial

How to Install Coolify on a VPS

By Amith Kumar25 July 202613 min read
Self-hostingCoolify
How to Install Coolify on a VPS
Verified 25 Jul 2026 · Ubuntu 24.04 LTS · Docker 29.1.3, nginx 1.24.0, Coolify 4.1.2, PostgreSQL 15, Redis 7

What you will have

By the end of this guide you will install Coolify on a VPS from nothing: a bare Ubuntu 24.04 slice becomes your own platform-as-a-service, the same push-to-deploy experience people rent from Heroku, Render or Netlify, except it runs on a box you own and nothing leaves it. Coolify is an open-source PaaS you self-host. It talks to Docker on your slice, wraps a friendly dashboard around it, and lets you deploy apps, databases and services with a few clicks instead of a stack of shell scripts.

That is the reason to bother. A managed platform bills per seat and per app, holds the environment variables your apps run on, and decides where your data sits. Running Coolify yourself puts all of that back in your hands: no per-seat pricing, no per-app metering, and the credentials and data stay on Indian hardware if that matters for you under the DPDP rules.

Here is the destination. The screenshot below is the real dashboard from the instance we stood up for this guide, with a project and the server Coolify manages, and further down you will see a first app deployed through it and answering over HTTPS. The shots here were all taken on that running box, so the versions and the screens are what you will land on.

sudo docker ps | grep -E 'coolify|hello'
The finished result: Coolify 4.1.2 with its Postgres, Redis and realtime containers all healthy plus a hello-world app deployed through it, and the dashboard answering HTTP/2 302 over real HTTPS, on the lab slice
The real Coolify 4.1.2 dashboard at coolify.boxlab.space after signing in as the admin, showing the Demo project and the localhost server it manages, the control panel you run your own PaaS from

Five containers: Coolify itself, its database, its cache, its realtime server, and the one app we deployed through it. That is the whole platform, running on a single slice, answering to nobody but you.

What this guide covers
  • Sizing a slice that meets Coolify's real minimum, honestly stated.
  • The official one-command install, and what it actually sets up (the app, Postgres, Redis, Soketi and a proxy).
  • Registering the first admin the moment the install finishes, and the localhost server Coolify manages.
  • Deploying a first app through Coolify and watching it come up and serve.
  • Securing the dashboard and keeping Coolify and Docker updated.

Before you begin

You build this yourself from the command line, and a few things need to be in place first. One of them is a hard requirement, so read the sizing line closely.

What you need first
  • A slice running Ubuntu 24.04 LTS that you reach over SSH as a sudo user. Coolify's published minimum is 2 GB of RAM, 2 CPUs and 30 GB of disk, and that floor is real, not a suggestion. The whole Coolify stack plus the apps you deploy has to fit inside it. A 1 GB slice will thrash, so do not attempt it there.
  • A fresh box with nothing else important on it. Coolify wants to own Docker on the machine, so give it a slice of its own rather than one already running other services.
  • A domain or subdomain whose DNS you can edit. Coolify uses it for the dashboard and to hand each deployed app a real address of its own.
  • Your slice's public IPv4 address, so you can point DNS at it and reach the dashboard for the first login.

A quick look at the box before you start tells you whether it is the right size. Read the numbers back rather than assuming.

lsb_release -d && nproc && free -h && df -h /
Checking the slice meets Coolify's real minimum: Ubuntu 24.04 LTS, 2 vCPUs, 2 GB RAM and disk headroom, on a fresh box with nothing else running so Coolify can own Docker

On our lab slice this reports Ubuntu 24.04 LTS, 2 vCPUs and 2 GB of RAM, with plenty of free disk. That is honestly the low end for Coolify, and this guide flags where memory gets tight. If you plan to run more than one or two small apps, give it 4 GB and you will have a far smoother time.

Install Coolify on a VPS with one command

The reason this section is short is that Coolify does the heavy lifting for you. To install Coolify on a VPS you run a single script, and it sets up everything: it installs Docker if the box does not have it, pulls the Coolify images, and starts the whole stack. Run it as root or with sudo on your fresh slice.

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
The official one-command install running for real: it sets up Docker, pulls the Coolify images and starts the stack, then reports Coolify 4.1.2 ready and the dashboard address on port 8000

Piping a script from the internet straight into a shell is worth a moment's thought, and the honest advice is to read what you are about to run. Open https://cdn.coollabs.io/coolify/install.sh in a browser first if you want to see it; it is Coolify's official installer, published by the project. When it runs it prints its progress and finishes by telling you the dashboard is ready and where to reach it.

The installer configures Docker, downloads Coolify's own Compose files into /data/coolify, generates the secrets it needs, and brings the containers up. On our box it settled on Coolify 4.1.2. When it is done it points you at the dashboard on port 8000 of your server's IP.

Checkpoint The installer should end with a "ready to use" line and an address like http://your-server-ip:8000. If it stops earlier, the usual cause is too little memory or disk; check free -h and df -h / before rerunning.

Take a look at what it stood up. Coolify is not one container but a small stack working together, and it helps to know what each part is for.

sudo docker ps --format '{{.Names}} {{.Image}} {{.Status}}'
What the installer stood up: the Coolify app, its Postgres 15 database, a Redis 7 cache and the Soketi realtime server, all healthy, plus the Traefik proxy it manages to front deployed apps

You will see four Coolify containers. The coolify app is the dashboard and the brains, a Laravel application. coolify-db is its PostgreSQL database, where your projects, servers and settings live. coolify-redis handles its queues and cache. coolify-realtime is a small Soketi server that pushes live updates into the dashboard so deploy logs and status change in front of you.

Coolify also manages a Traefik proxy that sits in front of the apps you deploy and routes traffic to them. That is the shape of a real PaaS: a few moving parts, but all of them on your box and all of them yours.

First login and onboarding

Now open the dashboard in a browser at your server's address on port 8000. The very first thing to understand about Coolify is that the first person to reach a brand-new instance becomes the admin, and until that first account exists, the sign-up form is open. So do this immediately after the install finishes, not later.

Create the admin account with your email and a long, random password. The moment you do, Coolify closes open registration on its own, so nobody else can walk in and enrol. You can confirm that from the shell: the register page no longer serves a form and redirects away instead.

curl -s -o /dev/null -w '%{http_code}\n' https://coolify.example.com/register
First login done right: register the admin within seconds of the install finishing, after which open sign-up closes automatically (the register page now redirects away), and Coolify registers this machine as its localhost server

A redirect here means open sign-up is off, which is exactly what you want on an instance that faces any network. With the admin created, Coolify walks you through a short onboarding.

The important step is the server. Coolify registers the machine it is running on as a server called localhost, the box it will deploy your apps onto, and sets up the proxy on it. For a single-slice setup that is all you need. You can add more servers later and deploy to them from the same dashboard, which is where Coolify starts to feel like your own cloud.

Do not skip this Register your admin account within seconds of the install completing, and use a strong random password. Between the install finishing and the first account being created, the sign-up form is open to anyone who can reach port 8000, so close that window fast and keep the port off the public internet.

Deploy your first app

This is the payoff, so let us deploy something real. In the dashboard, create a project, then add a resource to it. Coolify can build from a Git repository, from a Dockerfile, or straight from a prebuilt Docker image.

That last option is the quickest way to see the whole flow work end to end without waiting on a build. Choose New Resource, then Docker Image, and give it a small public image such as nginxdemos/hello, a tiny web server that renders a page showing which container answered.

Point it at your project's environment, set the port it listens on, and deploy. Coolify pulls the image, starts the container on the localhost server, and streams the deployment log into the dashboard as it goes. When it settles, the application page shows a green Running status, and you can confirm the same thing from the shell: the container is up, and it answers.

sudo docker ps | grep hello
curl -s -o /dev/null -w 'app -> HTTP %{http_code}\n' http://127.0.0.1:8090/
The payoff from the shell: after deploying a Docker-image app through Coolify, the container is up and the app answers HTTP 200 on the box, proof the deploy really serves
The deployed app itself, live in a browser over real HTTPS at hello.boxlab.space, serving the nginx hello page with its container name, the end result of deploying a first app through Coolify
The deployed hello-world application in the real Coolify UI at coolify.boxlab.space, its status a green Running, the nginxdemos/hello image and the Redeploy, Restart and Stop controls, proof the app is live inside Coolify

A 200 there is your proof: a real app, deployed through your own PaaS, serving from the box you own. Give the app a domain in its settings and Coolify's proxy will route a real address to it with an automatic certificate, exactly as a managed platform would, except the platform is yours. Swap nginxdemos/hello for your own image, or point Coolify at a Git repository, and the same deploy button ships your actual project.

Checkpoint The application's page in Coolify should read Running in green, and a request to the app should return 200. If the deploy fails, open the Deployments tab and read the log; a wrong port or an image that needs environment variables is the usual cause, and the log names it.

Secure the dashboard and lock it down

Coolify is powerful precisely because it can start and stop containers and hold your apps' secrets, which is the same reason its dashboard must not sit open on the public internet. A few habits keep it safe.

First, keep Coolify's own port off the open web. The dashboard belongs behind your domain over HTTPS, not exposed as a raw port to the world. Put it behind the proxy with a real certificate, and let your firewall allow only what needs to be public.

sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 443/tcp
sudo ufw --force enable
Hardening: nginx terminates TLS on loopback, Coolify's own port 8000 is kept off the open internet behind the firewall, and open registration is already disabled, so the dashboard is not wide open

That leaves SSH and HTTPS reachable and closes everything else, including port 8000, from the outside. Confirm the certificate path is genuine end to end while you are here; the dashboard should answer over a real, publicly trusted certificate.

echo | openssl s_client -connect coolify.example.com:443 \
     -servername coolify.example.com 2>/dev/null | openssl x509 -noout -issuer
The dashboard over real HTTPS: curl returns HTTP/2 302 through nginx and openssl confirms the served certificate is a genuine Let's Encrypt certificate, so the padlock is real

An issuer of Let's Encrypt (or your own CA) means the padlock in the browser is real, not self-signed. Beyond the network, the basics still apply: a strong random admin password, open registration off (Coolify did that for you after the first user), and, on an instance more than one person uses, keeping the dashboard reachable only over a VPN or an allow-listed set of addresses. Coolify holds the keys to every app it runs, so treat access to it as seriously as access to the server itself.

Keep it running and updated

The nice thing about a self-hosted PaaS is that once it is up, keeping it healthy is light work. Coolify updates itself: there is an Update button in Settings, and it can also be driven from the shell with the project's upgrade script, which pulls the new images and recreates the containers without touching your projects.

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

Because Docker keeps the app containers and their volumes separate from Coolify itself, an update to Coolify does not disturb the apps you have deployed. Read the release notes before a major jump, the same as you would for any platform you depend on.

Backups are the habit that matters most, and for Coolify there are two things to capture: its PostgreSQL database, which holds every project, server, application and secret, and the /data/coolify directory, which holds the environment file and the SSH keys Coolify uses to reach its servers. Lose the database and you lose the map of everything; lose the keys and Coolify cannot talk to its own servers. Back both up together and copy them off the slice.

sudo docker exec coolify-db pg_dump -U coolify coolify | gzip > coolify-db.sql.gz
sudo tar czf coolify-data.tar.gz /data/coolify/source/.env /data/coolify/ssh
Keeping it running: Coolify updates itself from the UI or a one-line upgrade script, and a backup captures the two things that matter, the Postgres database and /data/coolify with its env file and SSH keys

Copy both off the slice afterwards, since a backup sitting on the same machine it protects is no backup at all.

Keep an eye on resources as you add apps, too. Every app you deploy is another container sharing the slice's memory and CPU with Coolify's own stack, so watch free -h and docker stats, and add RAM before the box starts swapping hard rather than after.

This is the honest limit of a small slice: Coolify's stack alone wants its 2 GB, and each app you add asks for more. On a 4 GB or larger box you will run a handful of small services comfortably; on the 2 GB floor, keep it to one or two and watch the numbers.

That is a complete, self-hosted Coolify install: the one-command setup, the admin account created and open sign-up closed, a first app deployed and serving, the dashboard behind real HTTPS and a firewall, and a backup you can actually restore from. You now have your own deploy-anything platform on hardware that answers only to you.

Frequently asked questions

How much RAM do I really need to install Coolify on a VPS? Coolify officially asks for 2 GB of RAM, 2 CPUs and 30 GB of disk, and that floor is genuine, not a soft suggestion. The stack itself, meaning the app, its Postgres database, Redis and the realtime server, uses a good part of 2 GB before you deploy anything, and every app you add shares what is left. A 1 GB slice will thrash and is not worth attempting. For anything real, plan for 4 GB and you will have room to breathe.
Do I need to install Docker before running the Coolify installer? No. The official install script checks for Docker and installs it for you if the box does not already have it, along with the Compose plugin. That is one reason the install is a single command. It is also why Coolify wants a fresh slice of its own: it expects to manage Docker on the machine, so a box already running other Docker workloads can lead to surprises. Start from a clean Ubuntu 24.04 slice and let the installer set Docker up the way Coolify expects.
Is it safe to leave the Coolify dashboard open on the internet? No, treat this as a hard rule. Coolify can start and stop containers and holds the secrets of every app it manages, so its dashboard is as sensitive as root on the server. Put it behind your domain over real HTTPS, close its raw port with the firewall, keep a strong random admin password, and leave open registration disabled (Coolify turns it off after the first admin). For a team instance, restrict access with a VPN or an allow-list of addresses.
What exactly do I back up, and how do I restore Coolify? Two things, always together: the PostgreSQL database and the /data/coolify directory. The database holds every project, server, application and secret; the directory holds the environment file and the SSH keys Coolify uses to reach its servers. Dump the database with pg_dump from its container and tar the data directory, then copy both off the slice. To restore onto a fresh install, put the /data/coolify files back and load the dump, and Coolify returns with its projects and server connections intact.

Running Coolify on your own slice means the whole platform is yours: the projects, the apps, the secrets they carry, and the bill, with no per-seat pricing and no black box between you and your own deployments. To put it into service, take a ServerCake slice, a clean Ubuntu 24.04 box hosted in India and billed in rupees with GST, and follow the steps above on hardware that answers only to you.


Run your own PaaS on a slice

Host Coolify on a slice

Your own Heroku or Netlify, without the per-seat bill and with the data staying on your box. Spin up a ServerCake slice, a clean Ubuntu 24.04 box in India billed in rupees with GST, and run Coolify exactly as in this tutorial, from the one-command install to a first app deployed and running.

Get early access

This guide is provided for educational purposes and offered as is, without warranty of any kind. The commands change the configuration of a server you control, and some can lock you out if run out of order. Test on a non-production machine, keep a second session open, and take a snapshot or backup before you begin. You are responsible for changes made to your own systems; ServerCake accepts no liability for any loss, downtime, lockout, or damage arising from following this guide or running the accompanying script.

Spotted something out of date or have a question?

Built by the ServerCake team

Cloud that speaks India.

ServerCake is India's KYC-verified cloud: VMs and managed databases priced in ₹, billed with GST, on India-resident infrastructure. Reserve your spot for early access.

Reserve your spot