ByteVancer
Guide

How to Set Up Coolify on a VPS or Dedicated Server (2026 Guide)

Install Coolify on a VPS or dedicated server step by step: requirements, firewall ports, the installer, securing the admin account, DNS and your first deploy.

By · Software Engineer · Published · Updated · 9 min read

Coolify turns a Linux server into your own deployment platform: connect a Git repository, pick a build pack, and it builds, runs and serves your app over HTTPS. This guide takes a fresh VPS or dedicated server to a first live deployment, following Coolify's official documentation. If you are still deciding between platforms, start with our Coolify vs Openship comparison.

What you need

RequirementMinimumNotes
CPU2 coresIt can run on 1 core, but that is not recommended
RAM2 GBBitdoze reports Coolify idling at ~1.5–2 GB, so leave headroom for builds
Disk10 GBLeave room for images and build output
Architectureamd64 or arm64Includes 64-bit Raspberry Pi
Operating systemLinux onlyDebian/Ubuntu, RHEL family (CentOS, Fedora, RHEL, AlmaLinux, Rocky), SUSE, Arch, Alpine, Raspberry Pi OS 64-bit
AccessRoot over SSHThe installer must run as root

Coolify runs on a VPS, a dedicated server, a VM, a 64-bit Raspberry Pi or even an old laptop — anything running Linux that you can reach over SSH. The docs recommend starting from a fresh server. On Ubuntu, use an LTS release (20.04, 22.04 or 24.04); non-LTS releases need the manual installation path.

Coolify: bare floor vs official minimum (RAM and disk, GB)

The docs say Coolify can run on 1 CPU core, 512 MB RAM and 4 GB disk, but recommend 2 cores, 2 GB and 10 GB. Bitdoze reports Coolify idling at about 1.5–2 GB of RAM, which is why the 512 MB floor leaves nothing for your apps or builds. Source: Coolify docs (self-hosted installation), Bitdoze.

View data table
Coolify: bare floor vs official minimum (RAM and disk, GB)
CategoryRuns, not recommendedOfficial minimum
RAM0.5 GB2 GB
Disk4 GB10 GB

Setup at a glance

Coolify setup, start to finish
  1. 01

    Provision a server

    Fresh Linux server, 2 cores / 2 GB RAM / 10 GB disk or more.

  2. 02

    SSH in as root

    Open the firewall ports listed below first.

  3. 03

    Run the installer

    One curl command installs Coolify.

  4. 04

    Open :8000

    Browse to http://<server-ip>:8000.

  5. 05

    Create the admin

    Immediately — the first account to register gets root-level control.

  6. 06

    Back up .env

    Copy /data/coolify/source/.env somewhere safe.

  7. 07

    Set domain & DNS

    A and wildcard records, then serve the dashboard on a domain.

  8. 08

    Deploy your first app

    Project → resource → build pack → deploy.

Step 1: Open the firewall ports

PortPurposeKeep open?
22/tcpSSHAlways — never remove this rule
80/tcpHTTP and certificate generationYes
443/tcpHTTPSYes
8000/tcpDashboard via IPOnly until the dashboard is on a domain
6001/tcpReal-time communicationOnly until the dashboard is on a domain
6002/tcpWeb terminalOnly until the dashboard is on a domain

Step 2: Run the installer

SSH into the server as root and run the official install script:

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

Step 3: Create the admin account immediately

When the installer finishes, open http://<server-ip>:8000 and register straight away. The first person to register becomes the administrator — with root-level control of your server. Leaving the registration page open on a public IP, even briefly, is a real risk.

Safer alternative: pre-create the root user

To never expose registration at all, pass the root user's credentials to the installer as environment variables. Replace the example values with your own, and use a strong password:

bash
env ROOT_USERNAME=RootUser ROOT_USER_EMAIL=example@example.com ROOT_USER_PASSWORD='StrongPassword123!' bash -c 'curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash'

Step 4: Back up the .env file

Coolify stores its configuration in /data/coolify/source/.env. It contains the APP_KEY that encrypts values in Coolify's database — lose it and those values can't be decrypted. Copy it off the server to a safe place, such as your password manager or an encrypted backup, and keep it out of version control.

Step 5: Point DNS at the server

TypeNameValueWhy
Aapp (e.g. app.example.com)Server IPA specific domain for one application
A*Server IPWildcard for Coolify-generated domains (does not cover the apex domain)

Point each domain at the server that runs the resource, not at the server that hosts the Coolify dashboard — with multiple servers these are often different machines. Before deploying, confirm the record resolves:

bash
dig +short app.example.com A

The command should print your server's IP. Coolify's own DNS validation uses 1.1.1.1 as its default resolver, so a record that has not propagated there yet will fail validation even if it resolves elsewhere. Once DNS works, configure Coolify to serve the dashboard itself on a domain through its proxy.

Step 6: Deploy your first app

In the dashboard, create a Project and add a resource to it — an application, a database or a one-click service. For an application, connect the repository and choose how it is built:

  • Nixpacks — auto-detects the stack and builds it; the usual starting point.
  • Railpack — currently in beta.
  • Static — for static sites.
  • Dockerfile — when your repository already has one.
  • Docker Compose — for multi-container stacks.
  • Docker image — deploy a prebuilt image instead of building.

By default the build runs on the deployment server itself. The coolify-proxy container on that server — Traefik by default, Caddy as an alternative — routes your domain to the app and obtains a Let's Encrypt certificate, so the first deploy ends on HTTPS.

Step 7: Close the bootstrap ports

Once the dashboard is served on a domain through the proxy, you no longer need ports 8000, 6001 and 6002 open to the internet. Remove those rules and keep 22, 80 and 443. This shrinks the attack surface to the proxy and SSH.

Scaling out: more servers and a build server

Coolify can manage more than one machine: add remote servers over SSH and validate them from the dashboard. You can also add a dedicated build server — it cannot run resources, but it builds images and pushes them to a registry so builds stop competing with production for memory. On a small VPS that is the main lever you have; our comparison with Openship covers how Openship handles the same problem by building off-box.

How we run bytevancer.com on Coolify

This guide is not theory: bytevancer.com itself runs on Coolify. The site is built from a Dockerfile and deployed by a self-hosted Coolify instance (v4.3.x). The source lives in a private GitHub repository connected through Coolify's GitHub App, so every push to main deploys automatically, and a deploy takes about three minutes. Cloudflare sits in front of the site.

Our deploy pipeline
  1. 01

    Push to main

    A commit lands on main in the private GitHub repo.

  2. 02

    Webhook

    Coolify's GitHub App notifies the Coolify instance.

  3. 03

    Build

    Coolify builds the image from the repo's Dockerfile.

  4. 04

    Live

    The new version is serving about 3 minutes after the push.

  5. 05

    Cloudflare

    Traffic reaches the site through Cloudflare.

Lesson 1: closing port 8000 silently stopped auto-deploy (Sep 2026)

Coolify's docs say you can close ports 8000, 6001 and 6002 once the dashboard runs on a domain through the proxy, so we did (Step 7 above). Auto-deploy then stopped without any error in Coolify: the GitHub App's webhook URL still pointed at http://<server-ip>:8000, the port we had just closed.

What broke, and how we fixed it

💥 What broke

Pushes to main no longer started a deploy.

GitHub's Recent Deliveries for the app showed "failed to connect to host".

Cause: the webhook still targeted http://<server-ip>:8000.

🔧 How we fixed it

Updated the GitHub App's Homepage, Callback, Setup and Webhook URLs to the Coolify domain.

Webhook URL: https://coolify.<your-domain>/webhooks/source/github/events

Pushed a commit to test: the deploy started within seconds.

Lesson 2: Search Console said robots.txt was unreachable (Sep 2026)

Google Search Console showed our sitemap as "Couldn't fetch". The URL Inspection live test reported "Robots.txt unreachable", and Crawl stats → Host status showed a high robots.txt fetch fail rate, even though robots.txt returned 200 from 15 locations worldwide.

What broke, and how we fixed it

💥 What broke

Sitemap: "Couldn't fetch". Live test: "Robots.txt unreachable".

High robots.txt fetch fail rate in Crawl stats → Host status.

Two suspects: robots.txt was rendered per request, and Cloudflare's "Bot Preference Sync" prepends Cloudflare's bot settings to robots.txt at the edge.

🔧 How we fixed it

Made robots.txt a static, prebuilt file.

Turned off Cloudflare's "Bot Preference Sync".

Re-ran the live test: "URL is available to Google".

Takeaway: keep robots.txt static, and test it from Search Console's live test, not just curl.

Troubleshooting

Want to compare with the newer alternative? See our Openship setup guide and the Coolify vs Openship breakdown.

FAQ

Questions, answered

Coolify's documentation lists 2 CPU cores, 2 GB RAM and 10 GB of disk on amd64 or arm64 Linux. It can run on 1 core, 512 MB RAM and 4 GB disk, but that is not recommended. Bitdoze reports Coolify idling at roughly 1.5–2 GB of RAM.

Rather have Coolify set up and hardened for you?

We install, secure and maintain self-hosted deployment platforms — firewalls, DNS, backups and CI/CD pipelines that just work. See our Coolify setup and DevOps services.