How to Self-Host Coolify and Deploy Your Own Apps Without a Cloud Provider
Coolify is a free and open-source platform that gives you a Heroku-style deployment experience on hardware you control. Connect a server, link a Git repository, and your app is live with automatic HTTPS, environment variables, and build logs with no per-seat pricing and no platform fees. This guide covers installing Coolify on Ubuntu, deploying your first app, and accessing the dashboard securely from anywhere using a Localtonet tunnel.
📋 What's in this guide
What Is Coolify?
Coolify is an open-source, self-hosted Platform as a Service (PaaS). It wraps Docker, a reverse proxy, SSL certificate management, and deployment pipelines into a single web dashboard. Instead of writing Docker Compose files, configuring Traefik manually, and setting up Let's Encrypt by hand for every project, you do it once through Coolify's UI and it handles the rest for every app you deploy after that.
The alternatives Heroku, Render, Railway, Fly.io charge per service, per seat, or per compute hour. Coolify charges nothing beyond the cost of the server you already own or rent. You can deploy as many apps and databases as your hardware can handle.
Coolify (self-hosted)
- Free beyond your server costs
- Unlimited apps, databases, and services
- Full control over your infrastructure
- No vendor lock-in
- Automatic HTTPS with Let's Encrypt
- Works on any Linux server or VPS
Heroku / Render / Railway
- Pay per dyno, instance, or compute hour
- Costs scale with number of services
- Platform can change pricing at any time
- Data lives on third-party infrastructure
- Free tiers have significant limitations
Requirements
Minimum server requirements
- OS: Ubuntu 20.04, 22.04, or 24.04 LTS (other Linux distros supported with manual install)
- CPU: 2 vCPUs minimum
- RAM: 2 GB minimum (4 GB recommended for running multiple apps)
- Storage: 20 GB minimum
- SSH access: Root user SSH access required for the installation script
- Fresh server: Strongly recommended installing on a server with existing apps can cause port conflicts
Coolify works on a VPS from any provider (Hetzner, DigitalOcean, Vultr, Linode), a dedicated server, a home server, or even a powerful desktop running Ubuntu. For a home server setup where the machine is behind a router or CGNAT, see the remote access section below a Localtonet tunnel handles the public URL without any port forwarding.
Install Coolify
Coolify provides an automated installation script that installs Docker, sets up the directory structure, generates SSH keys, and starts all Coolify containers in one step. Run this as the root user on a fresh Ubuntu server:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
The script takes a few minutes to complete. When it finishes, Coolify is running and
the dashboard is accessible at http://your-server-ip:8000.
Verify all Coolify containers are running:
docker ps --filter "name=coolify"
Coolify uses port 8000 for the dashboard, port 6001 for real-time WebSocket updates,
and port 6002 for the terminal feature. Ports 80 and 443 are used
by the built-in Traefik reverse proxy to serve your deployed applications.
If you set up a custom domain for the Coolify dashboard itself, you can close port 8000
and access everything through the domain on port 443.
First Login and Initial Setup
Create your admin account
Open http://your-server-ip:8000 in a browser.
Coolify shows a registration screen on first visit.
Create your admin account with a strong password.
This is the only account that can manage the entire Coolify instance.
Confirm the localhost server
After registration, Coolify asks you to set up a server. The machine Coolify is running on is already pre-configured as localhost. Click Validate Server to confirm it is reachable. Coolify connects to itself over SSH and runs a health check.
Connect a Git source (optional)
Go to Sources and connect your GitHub or GitLab account using an OAuth app or a personal access token. This allows Coolify to read your repositories and set up automatic deployments on push. You can also deploy from a public Git URL without connecting an account.
Deploy Your First Application
Coolify can deploy applications using Nixpacks (auto-detects language and build steps), a custom Dockerfile, or a Docker Compose file from your repository. The example below uses a Node.js application with Nixpacks no Dockerfile required.
Create a project and environment
Go to Projects → New Project. Give it a name. Inside the project, Coolify creates a default production environment. Click New Resource inside that environment.
Add an application
Select Application as the resource type. Choose your Git source (GitHub, GitLab, or a public repository URL). Select the repository and branch you want to deploy. Click Continue.
Configure the build settings
Set the Build Pack to Nixpacks for automatic detection.
Set the Port your application listens on for example 3000 for Node.js
or 8000 for Python. Add any environment variables your app needs under Environment Variables.
Set a domain
Enter the domain you want your app to be available on under Domains. Coolify provisions a Let's Encrypt certificate for this domain automatically. Make sure the domain's DNS A record points to your server's IP address before deploying.
Deploy
Click Deploy. Coolify clones the repository, builds the app, starts the container, and wires up the reverse proxy and SSL certificate. Watch the build logs in real time on the deployment screen. When the status turns green, your app is live.
Once the first deployment succeeds, enable Auto Deploy on the application settings page. Every time you push to the configured branch, Coolify pulls the latest code, rebuilds, and redeploys with zero downtime using rolling updates.
Add a Database
Coolify can provision databases alongside your applications. Each database gets its own container, a generated connection string, and an optional scheduled backup.
Add a database resource
Inside your project environment, click New Resource → Database. Select the database type PostgreSQL, MySQL, MariaDB, MongoDB, Redis, Dragonfly, or KeyDB. Coolify fills in default credentials. Change them to something strong and click Create.
Copy the internal connection string
Go to the database's settings page. Coolify shows an internal URL and an external URL. Use the internal URL in your application's environment variables so the connection stays within Docker's internal network without going through the reverse proxy.
Enable scheduled backups (optional)
On the database settings page, enable Scheduled Backups and set a frequency. Coolify dumps the database on schedule and stores the backup file. You can configure an S3-compatible storage destination for off-site backup retention.
Access the Coolify Dashboard Remotely with Localtonet
If Coolify is running on a home server or a machine behind CGNAT, port 8000 is not reachable
from the internet. Even on a VPS, you may want to keep port 8000 off the public internet
and access the dashboard only through a secure, authenticated URL.
A Localtonet HTTP tunnel gives you a public HTTPS URL for the Coolify dashboard without opening any firewall ports.
Coolify has a built-in option to serve its own dashboard on a custom domain using Traefik.
That feature requires your server to have a public IP and inbound port 80 and 443 open.
The Localtonet tunnel approach works even when the server has no public IP at all behind a home router,
CGNAT, or a corporate firewall. Use whichever fits your setup.
Install and authenticate Localtonet on the Coolify server
curl -fsSL https://localtonet.com/install.sh | sh
localtonet --authtoken <YOUR_TOKEN>
Create an HTTP tunnel for port 8000
Log in to the Localtonet dashboard, go to Tunnels → New Tunnel,
select HTTP, set local IP to 127.0.0.1 and port to 8000.
Click Create. You get a public HTTPS URL such as https://abc123.localto.net.
Open the Coolify dashboard from any browser
Navigate to your Localtonet HTTPS URL. Log in with your admin credentials. You have full access to all projects, deployments, logs, and server management from any device.
Keep the tunnel running permanently
Register Localtonet as a systemd service so the tunnel returns automatically after every reboot.
sudo localtonet --install-service --authtoken <YOUR_TOKEN>
sudo localtonet --start-service --authtoken <YOUR_TOKEN>
Attach a custom domain to your Localtonet HTTP tunnel so the Coolify dashboard URL never changes. A stable URL also means webhook callbacks from GitHub or GitLab for automatic deployments always reach the right address. See the custom domain guide for setup steps.
Frequently Asked Questions
What languages and frameworks does Coolify support?
Coolify uses Nixpacks for automatic build detection, which supports Node.js, Python, Go, PHP, Ruby, Java, Rust, Elixir, and more. If Nixpacks does not support your stack, you can provide a Dockerfile or a Docker Compose file instead. Any app that can run in a container can be deployed through Coolify.
Can I deploy to multiple servers from one Coolify instance?
Yes. Go to Servers → Add New Server and provide the SSH connection details for any additional machine. Coolify connects over SSH, installs Docker if needed, and registers the server. You can then choose which server to deploy each application to. All servers are managed from the same dashboard.
Can I run Coolify on a home server or Raspberry Pi?
Coolify works on any Linux machine with Docker support, including home servers and ARM devices like the Raspberry Pi 4 and Pi 5. The minimum 2 GB RAM requirement means a Pi 3 may struggle a Pi 4 with 4 GB RAM is a comfortable baseline for a few small apps. For the home server scenario, use a Localtonet tunnel to expose the dashboard and your deployed apps without port forwarding.
How does Coolify handle SSL certificates for deployed apps?
Coolify uses Traefik as its reverse proxy and automatically requests a Let's Encrypt certificate for every domain you assign to an application. Certificates are renewed automatically before they expire. You only need to make sure the domain's DNS A record points to the server's public IP before deploying.
Is there a way to roll back a deployment if something breaks?
Yes. Go to the application's Deployments tab. Every deployment is listed with its commit hash, timestamp, and status. Click on any previous successful deployment and click Rollback. Coolify redeploys the exact image from that deployment without rebuilding.
Can I migrate existing Docker Compose projects to Coolify?
Yes. Go to New Resource → Docker Compose and paste your Compose file or point Coolify at the Git repository that contains it. Coolify deploys it and manages the lifecycle from that point on. You can continue editing the Compose file in your repository and redeploy through Coolify whenever you push changes.
Your Own Heroku on Your Own Hardware
Install Coolify, connect your Git repositories, and deploy apps with automatic HTTPS and zero platform fees. Open a Localtonet tunnel and manage everything from anywhere.
Create Free Localtonet Account →