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:8000after 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:
- In the Coolify UI, go to Sources → Add → GitHub App
- Follow the OAuth flow to authorize Coolify to access your repositories
- 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
- Go to Servers → Add Server
- Choose Localhost if you’re deploying on the same machine as Coolify (most common setup)
- 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
- Go to Projects → New Project → give it a name
- Click New Resource → Application
- Select your source (GitHub) and repository
- Choose a branch (typically
mainorproduction)
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 installandnpm 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
- In your application, go to the Environment Variables tab
- Add each variable as a key-value pair
- 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 Settings → Shared Variables.
Step 6: Configure a custom domain with HTTPS
- In your application settings, go to Domains
- Add your domain:
myapp.example.com - 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
- In your application, go to Webhooks
- Copy the webhook URL Coolify provides
- In GitHub: repository → Settings → Webhooks → Add webhook
- 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.
- In your project, click New Resource → Database → select the database type
- Configure version and name
- Coolify creates a Docker container with persistent volume storage
- 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):
- Go to database settings → Network
- 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:
- New Resource → Docker Compose
- Connect your repository or paste the compose file content directly
- 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.
What to read next
- Docker Compose Cheat Sheet — understanding the compose files Coolify uses
- How to Set Up a Reverse Proxy with Nginx — manual alternative when you need more control
- How to Use Environment Variables in Docker — understanding how secrets flow into containers