Introduction
If you're a (web) developer, you must know how much it sucks to deploy and manage your different apps. Having one server running a single app is easy to manage, but once you have multiple servers with multiple apps written in different languages, it's getting messy. Log in to your servers in SSH, clone your repo, configure environment variables, install a process manager, pull logs, configure CI/CD, etc...
That's why a lot of people prefer using a PaaS such as Heroku or Netlify, but there are drawbacks:
-
Cost - PaaS services can be more expensive compared to self-hosting or other alternatives, especially for resource-intensive or high-traffic applications, as they often charge based on usage and scaling requirements (resulting in horror bill stories)
-
Lack of Control - PaaS platforms may not provide full control over server configurations, networking, or other infrastructure-related settings, which can limit the ability to fine-tune performance, security, or other aspects of the application.
-
Compliance and Data Privacy Concerns - PaaS providers may have different data privacy and compliance policies, which may not align with the requirements of certain industries or regions, leading to potential regulatory challenges.
And here comes Coolify, the open-source, self-hostable and privacy-focused alternative to Heroku and other softwares. Let's get into the details.
Features & functionality
Coolify provides a lot of features. I won't talk about all of them so I advise you to check their documentation for more information.
Supported applications
With Coolify, deploy almost any application based on a Git repository (public or private) thanks to pre-configured build packs. Natively, you can deploy the following:
- NodeJS
- NestJS
- PHP
- Rust
- Python
- Laravel
- Deno
- Heroku (to migrate your Heroku applications)
- Static sites
- VueJS
- NextJS
- NuxtJS
- React
- Preact
- Gatsby
- Svelte
- Eleventy
- Astro
- Docker (no repository required)
- Docker Compose (in beta)
Note: if you wish to deploy an application that isn't natively supported, or if you need a custom build process, you can simply use Docker to deploy it.
One-click deployment for databases and popular services
Coolify provides a quick way to deploy the following databases:
- MongoDB
- MariaDB
- MySQL
- PostgreSQL
- CouchDB
- Redis
- EdgeDB
And also, popular services (with or without databases) such as:
- Appsmith
- Appwrite
- Directus
- Fider
- Ghost
- Gitea
- GlitchTip
- Grafana
- Hasura
- Keycloak
- LanguageTool
- Lavalink
- Libretranslate
- Mattermost
- Meillisearch
- MinIO
- n8n.io
- NocoDB
- Openblocks
- Plausible Analytics
- Pocketbase
- Repman
- SearXNG
- Soketi
- Trillium Notes
- Umami
- UptimeKuma
- VaultWarden
- VSCode Server
- Weblate
- Whoogle Search
- Wordpress
Note: you can propose a PR to add or update a service.
Automatic reverse-proxy and SSL certificates
Every time you deploy an application, Coolify dynamically configures an instance of Traefik to generate reverse proxy configurations, generate SSL certs and route all incoming traffic to the right container. It uses Let's Encrypt (or your own certificate) for SSL certificates and can be applied for both www and non-www domains.
Deploy to local or remote Docker engines
This is really dope. You can deploy your applications to different remote servers from your Coolify instance. Their docs says it better than me: "You can have one Coolify instance as a control-plane/dashboard and deploy to unlimited number of remote servers."
Of course, you must first install Docker Engine on the remote servers and set-up SSH keys for connection. Thank God, Coolify provides an easy way to add SSH keys.
Github & GitLab integration
To deploy applications, you may need to import their code from a Git repository. By default, you can import public repositories just by pasting an URL. For private repositories, Coolify provides an easy way to connect your different Github / GitLab accounts as Git sources. See their documentation.
Automatic deployments & MR/PR previews
You can enable automatic deployments for your applications, meaning that each time your repo is updated, Coolify will automatically pull, build and deploy a new version of your project. This feature is not available for public repositories.
You can also enable merge request (MR) / pull request (PR) previews. Coolify allows you to set different environment variables for preview builds.
Before installing Coolify...
Before installing Coolify, check if your server is able to host it.
Supported architecture
Coolify supports AMD64 and ARM architectures.
Supported OS
You can install Coolify on any OS that is able to run Docker.
Minimum required resources
For Coolify to run, you must have:
- 2 CPUs
- 2 GBs RAM
- 30 GB of storage
Installation and setup
Installing Coolify is quite easy. Just run this single command line:
wget -q https://get.coollabs.io/coolify/install.sh -O install.sh; sudo bash ./install.sh
and your Coolify instance is up and running on port 3000.
Access your dashboard and create a new admin account (after that, registration will be disabled). We can now configure our instance.
First, let's configure a domain name for our Coolify instance. Go to your DNS providers, and configure a subdomain (e.g: cool.<DOMAIN>.com):
- Add a DNS record
- Key: cool
- Value: your server address IP
Now go to Coolify Settings and set the URL (FQDN) to cool.<DOMAIN>.com. You will now be able to access your dashboard from that URL.
You can now create new resources, but you first you have to understand what are the different types of resource you can deploy:
- Application - applications are used to deploy a production version of your code, you can deploy them from a Git repo or a simple Dockerfile.
- Services - services are pre-configured popular self-hostable applications submitted by the community, for example you can deploy a Wordpress application without having to create a database manually; the service does it automatically for you.
- Databases - I think you already got it.
- Sources - mainly Git sources, they allow you to define where to fetch your application code; for now, only Gitlab & Github are supported (self-hosted too).
- Destinations - destinations define where to deploy your applications, useful to deploy on remote servers or create network separation from different applications.
You're now ready to go with Coolify! Play around with it, it's the best way to learn.
Conclusion
For me, Coolify was a good finding and I enjoyed playing around with it. Even if you face bugs or limitations, you still can fork the project and submit a PR. Note that the creator is working on a new promising version of it with a migration path for v3 users.
Useful links: