M
MeshWorld.
DevOps Self-Hosted Docker How-To Deployment 8 min read

How to Set Up Coolify for Self-Hosted Deployments

Cobie
By Cobie

Coolify is an open-source platform that gives you what Heroku and Render offer — push-to-deploy, environment variable management, domain and SSL setup — but running on your own VPS. You pay for the server (a $6/month Hetzner instance handles plenty), not the platform. This guide gets you from a blank server to a running app.

:::note[TL;DR]

  • Install: one curl command on a fresh Ubuntu 22.04/24.04 VPS
  • Coolify runs at http://your-ip:8000 after install
  • Connect GitHub/GitLab, add a project, set environment variables, deploy
  • Coolify handles HTTPS automatically via Let’s Encrypt
  • Persistent data (databases, volumes) stays on your server — you own it :::

Prerequisites

  • A fresh VPS with Ubuntu 22.04 or 24.04 (Hetzner CX22, DigitalOcean Droplet, Vultr, Linode — any works)
  • At least 2 vCPUs and 2GB RAM (4GB recommended if you’re running databases too)
  • A domain name (or subdomain) pointing at your server’s IP
  • SSH access as root or a user with sudo

Step 1: Install Coolify

SSH into your server and run the official install script:

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

The script installs Docker, sets up the Coolify containers, and configures a systemd service. Installation takes 2-5 minutes.

When it finishes, Coolify’s admin UI is running at:

http://your-server-ip:8000

Open that URL in your browser. You’ll be prompted to create an admin account — use a strong password, you’re setting up your deployment infrastructure.


Step 2: Configure a source (GitHub or GitLab)

Coolify can deploy from GitHub, GitLab, Gitea, or any public Git URL.

Connect GitHub:

  1. In the Coolify UI, go to SourcesAddGitHub App
  2. Follow the OAuth flow to authorize Coolify to access your repositories
  3. Choose which repositories to grant access to (you can restrict this to specific repos)

For public repositories, no OAuth setup is needed — paste the repo URL directly when creating an application.


Step 3: Add your server as a deployment destination

  1. Go to ServersAdd Server
  2. Choose Localhost if you’re deploying on the same machine as Coolify (most common setup)
  3. Coolify validates the connection and sets up its Docker network

If you want to deploy to a different server from where Coolify is running, add it as a remote server with SSH credentials instead.


Step 4: Create a project and deploy an app

  1. Go to ProjectsNew Project → give it a name
  2. Click New ResourceApplication
  3. Select your source (GitHub) and repository
  4. Choose a branch (typically main or production)

Build settings:

Coolify auto-detects Nixpacks build configurations for Node.js, Python, Go, Ruby, and others. If your project has a Dockerfile, it uses that. For most standard apps, the defaults work without editing.

For a Node.js app, Coolify automatically:

  • Detects package.json
  • Runs npm install and npm run build
  • Sets the start command to npm start

Port configuration:

Tell Coolify which port your app listens on:

  • Node.js Express: 3000
  • Python FastAPI/Uvicorn: 8000
  • Go default: 8080

If your Dockerfile has an EXPOSE statement, Coolify reads it automatically.

Click Deploy to trigger the first build. You can watch build logs in real time in the UI.


Step 5: Add environment variables

  1. In your application, go to the Environment Variables tab
  2. Add each variable as a key-value pair
  3. Toggle Is Secret for sensitive values — secrets are stored encrypted and redacted from build logs

Variables set here are injected into your container at runtime. They override anything in .env files that might be in your repository.

For shared configuration across multiple apps (a shared database URL, for example), Coolify supports shared environment variable groups under SettingsShared Variables.


Step 6: Configure a custom domain with HTTPS

  1. In your application settings, go to Domains
  2. Add your domain: myapp.example.com
  3. Enable HTTPS — Coolify uses Let’s Encrypt and manages certificate issuance and renewal automatically

Before adding the domain, make sure your DNS is already pointing at the server:

# Verify DNS propagation
dig myapp.example.com +short
# Should return your server's IP

Coolify handles the Nginx reverse proxy configuration internally — you don’t write any Nginx config manually. Each application gets its own virtual host, certificate, and proxy rules.

For www redirect (redirect www.example.com to example.com or vice versa), add both domains and Coolify handles the redirect.


Step 7: Set up automatic deployments on push

  1. In your application, go to Webhooks
  2. Copy the webhook URL Coolify provides
  3. In GitHub: repository → Settings → Webhooks → Add webhook
  4. Paste the Coolify webhook URL, set content type to application/json, event to “push”

Now every push to your connected branch triggers an automatic deployment. Build logs are visible in Coolify’s deployment history.


How do you deploy a database?

Coolify has one-click database provisioning for PostgreSQL, MySQL, MongoDB, Redis, and others.

  1. In your project, click New ResourceDatabase → select the database type
  2. Configure version and name
  3. Coolify creates a Docker container with persistent volume storage
  4. The connection string is automatically available as an environment variable for your apps in the same project

The database runs on Docker with a named volume — data persists across container restarts and Coolify updates.

To expose a database port for external access (e.g., for a GUI client like TablePlus):

  1. Go to database settings → Network
  2. Enable port exposure on a specific host port

:::warning Exposing database ports to the internet is a security risk. Use SSH tunneling for database GUI access instead:

ssh -L 5432:localhost:5432 user@your-server-ip

Then connect your GUI client to localhost:5432. :::


How do you deploy a Docker Compose application?

If your app has a docker-compose.yml:

  1. New Resource → Docker Compose
  2. Connect your repository or paste the compose file content directly
  3. Coolify parses the compose file and maps services to its routing and SSL system

Coolify integrates with Traefik labels in your compose file for routing, but it can also use its own proxy. For most apps, letting Coolify handle routing is simpler than managing Traefik labels manually.


Useful Coolify CLI commands (on the server)

# Check Coolify service status
docker ps --filter name=coolify

# View Coolify logs
docker logs coolify

# Restart Coolify if the UI is unresponsive
docker restart coolify

# Update Coolify to the latest version
curl -fsSL https://cdn.coollabs.io/coolify/upgrade.sh | bash

Summary

  • One curl command installs Coolify on a fresh Ubuntu VPS; the UI runs on port 8000
  • Connect GitHub, create a project, add an application — Coolify auto-detects the build system
  • Environment variables and secrets are managed per-app in the UI, injected at runtime
  • Custom domains + Let’s Encrypt HTTPS are handled automatically — no Nginx config needed
  • Databases are one-click provisioned with persistent Docker volumes; connect via the auto-generated connection string

FAQ

How does Coolify compare to Dokku?

Dokku is older and uses a Heroku-style git push workflow — no web UI, Heroku buildpacks, configured entirely via SSH commands. Coolify has a web UI, broader service support (databases, cron jobs, S3-compatible storage), and is actively developed. If you’re comfortable on the command line and want something minimal, Dokku is fine. If you want something closer to a self-hosted Render or Railway, Coolify is the better fit in 2026.

My build succeeds but the app isn’t reachable. What should I check?

First verify the port setting matches what your app actually listens on — mismatched ports are the most common cause. Second, check your DNS: dig yourdomain.com +short should return your server IP. Third, check that port 80 and 443 are open in your firewall (sudo ufw status). Fourth, check application logs in the Coolify UI — a startup error may prevent the container from running even after a successful build.

Can I run Coolify on a subdomain of my own domain?

Yes. After initial setup at :8000, go to Coolify Settings → Instance Settings → set your Coolify URL to coolify.yourdomain.com. Coolify generates its own SSL certificate for the admin UI. Point coolify.yourdomain.com DNS to your server first.