Using Coolify to Simplify Deployments
Matt Hatcher
Posted on November 3, 2024
I am like many of the developers out there in that 90% of my projects are solo ventures. Most of the projects I can solve in that manner, from concept to deployment. However, one stage has to be the bane of my existence, and that's deployment. If you're in the same boat as me, keep on reading because I'm about to share with you some knowledge I've gathered around deploying applications.
There are many platforms out there that promise to make deployment easier, and many of them do at a cost. From Heroku's legacy (RIP free tier, you will be missed) of git-push deployments to modern PaaS solutions with their usage-based pricing (Railway, Vercel, Fly.io, etc.), each comes with its own ecosystem of add-ons, restrictions, and hidden costs that only become apparent when you try to scale. Some require you to conform to their specific deployment patterns or learn an entire set of tools. In the end, you just want to run your application with basic needs.
This is where I've recently fell in love with Coolify
Before I start telling you about Coolify and how it's helped me, I should let you in on a secret: there's no magical solution and anyone selling you on one is lying. Every service simplifies or helps one aspect of the process, but in reality there's no all in one solution and I'm not trying to sell you on that today. Coolify helps deployment of resources and backups, that's all.
Example Project
Looking at one of my Discord solutions I have a database, web application, Discord bot, and at points I'll have a caching layer through something like Redis. This is relatively common setup for me.
In a very high level diagram, this is what they look like most of the time.
This kind of project can be deployed through any service such as AWS, Digital Ocean App platform, Fly.io, Heroku, Railway, etc. However, pricing for them can start to really rack up when in reality you can deploy all of these to a $15 a month Hetzner server and call it a day. I actually used to deploy to Railway and Vercel and was paying almost $50 a month for a much simpler setup and it was became cumbersome in terms of pricing because I knew it could be so much lower.
The deployment of these resources, and any resources like it, is pretty simple no matter where you go. Before diving into Coolify, let me share my journey with Railway - one of the more popular modern deployment platforms. My experience with it illustrates why finding the right deployment solution matters, especially for solo developers juggling multiple projects.
Railway
If you're looking for a simple solution much like Heroku but also not Heroku then Railway is a great option. I've actually used Railway before in the past and honestly they're fantastic!
Deploying Resources
If you really want to know how easy it is, I deployed multiple resources just for this.
New Project with 3 services on Railway
I created a new project, deployed 3 services, and got them up and ready within 5 minutes. The database and Redis also have attached volumes for persistent storage. At this point I just attach my GitHub account and then deploy from GitHub repo as a resource and my project is up and running!
Genuinely it's a good experience and has very little limitations if you're just deploying web applications. It's relatively low cost too and you can even enable app sleeping which will reduce cost dramatically too. I'd for sure recommend it and even recommend it over Heroku in some scenarios. It has solid options for custom domains, all sorts of templates, and much more.
Realistic Limitations for Non-Web Applications
Railway does have limitations though, much of which I encountered pretty quickly. I did mention specifically web applications earlier because the moment you deploy something like a Discord bot you start getting hit with rate limits and IP bans.
This sounds scary, but it's not as bad as you think. The reality of Railway is that it's shared infrastructure. You and 20 other people could be on a server all on the same public IPs. Even static IPs aren't static to you as they say in their caveats:
There is no guarantee that the IPv4 address assigned to your service is dedicated. It may be shared with other customers.
On top of the requirement of being on the Pro so you fork out $20 a month for a kinda static IPv4 address. I sound kind of harsh but it's not that bad, IPv4 is exhausted as-is and more companies are starting to charge for them, even Hetzner charges a couple bucks a month for them.
The only real way to get around this issue is to go to a service like Hetzner, Vultr, or Digital Ocean and deploy a proxy service so that when you send API requests to somewhere like Discord it appears as it's coming from that server and not your Railway applications.
While I'm saying some negatives, there's genuinely more positives for a majority of developers. That being said, when I used it backing up volumes and some other items was not in a finished state. It may be much better now so I encourage you all to give it a shot for your first project.
Why I Left Railway
The reason I had to move away from Railway is simply the IP issue amongst a couple smaller quirks; because of the noisy neighbors and constant IP rate-limiting from Discord I couldn't run most of my applications and it was just a matter of time before they became unusable. Even as I was in the testing phase for weeks I started noticing more frequent rate limiting and IP bans because more templates were coming out for Discord bots and people started using it more. It's still an issue they seem to get help tickets for. I'm not wanting to throw too much shade at them for this, I know their reasoning for it. I just have to note that this is the main reason I opted for a more complex deployment script (until Coolify) over a much more simple UI in Railway.
Coolify, the Superhero
Today I deploy everything through Docker Compose and GitHub scripts which is...not fun. It was easy to setup but very annoying to deploy as my needs grew, especially when you have firewalls on your servers and GitHub always is rotating IPs and Actions could be coming from one of hundreds of IPv4 or IPv6 addresses. Managing IP whitelists becomes a game of whack-a-mole that nobody wants to play.
I also deploy more than just side projects, I also have a few clients I deploy a variety of applications for. Here's a few things for example: Odoo, Ghost (hello!), custom NodeJS apps, Vue apps, React apps, multiple Discord bots, status pages, databases, Plausible, authentication/authorization, and more. Each of these has its own quirks, configuration needs, and maintenance requirements.
For a solo developer, or even a couple people, this is a lot to manage and can be cumbersome to keep up to date.
This is where Coolify caught my attention. At its core, Coolify does one thing: it handles the deployment and updating of your applications. No fancy marketing about revolutionary platforms or groundbreaking technology - just a straightforward tool that allows you to deploy Docker images, Git repos (through Nixpacks), and more.
The key difference? You own and control the infrastructure. Coolify doesn't try to be your hosting provider or lock you into their ecosystem. You bring your own server (whether that's DigitalOcean, Linode, a bare metal server, or whatever else you prefer), and Coolify helps you deploy to it. This means you're not tied to any specific cloud provider's pricing or limitations.
Coolify is also open source and you can actually self-host it! Although I'd definitely recommend their cloud offering. Right now it's $48 per team a year and that includes 2 servers (you can add a server for $32 a year).
What Coolify doesn't do is just as important as what it does. It won't:
- Secure your servers
- Manage or upgrade your servers
- Update your servers applications
- and a few other things
These are all things you'll still need to handle yourself or through other tools, sorry!
What Coolify does do:
- Handle proxying of domains through Traefik or Caddy
- SSL automation
- Application deployment
- Backups (through S3 compatible service, I currently use Backblaze B2)
- All sorts of Docker things such as terminals, logs, volumes, networks, and more.
- Monitoring of the server (once they fix a few bugs)
- and some other things I am missing
This is where Coolify shines. Let me show you how to get started.
Getting Started with Coolify
Now that we've got the basics down, let's look at setting up Coolify.
Welcome to Coolify
When you first log in, you'll be greeted with a clean, dark interface. There's no overwhelming dashboard of options - just what you need to get started.
Create Private Key
Your first step is creating an SSH key. This is straightforward - Coolify generates the key pair and you just need to save it.
I use Hetzner so I add the SSH key to my project and when I create a new server I automatically add the SSH key to the server.
Create Server
Next, you'll need to set up your first server. You provide your server details and Coolify handles the initial setup, installing its required dependencies like Docker. Since it's open source you can actually see what it does here on GitHub (shoutout Laravel because it's cool).
Creating a Project
Before you get started deploying resources you have to create a project which is super easy as well
Yup, literally that easy. I decided to make my project name "Hello Wolrd" because I actually typo'd world.
Once you navigate to the project you'll see a new environment called "production" which is a nice feature of Coolify because you can clone entire resources to different environments which makes making "dev" or even "beta" phases really convenient.
In your new environment you should see something like this
Your First Resource
When you add your first resource you have a few options, I won't go too detailed into them but here's a quick screenshot
Available One Click Deploy Templates
As you can see you can do a lot. I really like the available services. They do document a majority of services on the Coolify Docs but I've also noticed their documentation doesn't contain all the available services.
Let's make it simple and deploy a NocoDB instance (one of the available services). NocoDB is an open source alternative to AirTable which is basically just spreadsheets as a database.
Once we select NocoDB and select the server you'll be greeted with this screen
The piece I blurred out is the generated domain that also includes my server IP.
At this point all you do is click "Deploy" and voilà!
With a click of a button and about 60 seconds to pull images I now have a working NocoDB instance.
It is really that easy.
Day-to-Day with Coolify
After using Coolify for some time, here's what stands out in daily operations:
- Git pushes automatically trigger deployments, no manual intervention needed
- Adding new services is straightforward - pick a template and go
- Container management (restarts, logs, terminal access) is all in one place
- Backups happen automatically to your S3 storage
- Domain and SSL management "just works"
- If something fails, it's handled for you
The biggest win? No more maintaining complex deployment scripts or dealing with GitHub Actions.
Advanced Setup
Coolify's platform has a lot of options, you're not restricted to just their templates. It's all built around Docker and it's basically a glorified Docker wrapper. If you can containerize it, it can be deployed through Coolify.
It's so easy to edit too, they give you an editor online that you can use and you can even see the final deployable compose file (they add various tags for proxies, volume names, and so on).
I've never felt like I have this much fine grained control through any platform using a generic syntax that I could run locally on my developer machine and match exactly what my server runs.
Homelab Hosting
Don't worry all you homelab power users! This can still work for you! They even have some templates for dashboards as well as Emby, Jellyfin, and more! Since you can self host it you can set up everything you need in house; or you can even connect your home server to their cloud solution although I'd probably recommend keeping that in house too.
Comparison to Railway
I'll be straight with you, in terms of ease of use Railway wins. It's much more evolved, it visualizes resources better, and feels a bit more "modern." However, I can't ignore the amount of control I have with Coolify and the fact that since it's my own servers with dedicated IPs I don't have a lot of the issues I encountered on Railway and I really don't have to worry about noisy neighbors either.
Final Thoughts
After spending some time with Coolify, I can say it hits a sweet spot for me. It's not trying to be everything to everyone - it's a focused tool that makes application deployment less painful. No complex pricing calculators, no endless menus of services you'll never use, and no vendor lock-in. You bring the hardware, they deploy the software.
Is it perfect? No. Like any tool, it has its rough edges. The monitoring still needs some work as it's not even available at the moment, and occasionally you'll need to dive deep to fix things. Hell, even writing this post I found a bug where you can delete a project without deleting resources leaving stray resources that you can't delete. But for what it aims to do - simplifying application deployment while letting you keep control of your infrastructure - it does the job really well.
For my use case of managing various client projects, side projects, and personal applications, the time saved on deployment automation alone makes it worth the $48 yearly investment. If you're tired of wrestling with deployment scripts or looking for a middle ground between full DevOps and platform lock-in, give it a try.
Key Takeaways
- Coolify is a flexible deployment solution (PRO) Coolify offers an alternative to traditional PaaS platforms like Heroku and Railway by allowing developers to self-host their applications. This makes it ideal for those who want more control over their infrastructure without being tied to a specific cloud ecosystem.
- Cost-Effective (PRO) Coolify’s pricing is significantly lower than many alternatives, particularly for solo developers and small teams, at around $48 per year for two servers. This makes it an affordable option for deploying smaller applications or personal projects.
- Hands-On approach with full control (CON, with a bit of PRO) Coolify doesn’t manage server security, updates, or other maintenance tasks, meaning you must handle these aspects themselves. While this requires some technical know-how, it also allows for complete control over server configuration and application setup, which can be a benefit for developers looking for a more tailored solution.
- Straightforward deployment for Docker & Git (PRO) Coolify excels in simplifying the deployment of Docker images and Git repositories, along with handling reverse proxying and SSL.
- Ideal for developers who prioritize control & cost over convenience (PRO & CON) Coolify may not be for everyone, especially those who want a fully managed solution. However, for developers who value customization, cost savings, and control, it provides an efficient and streamlined deployment option.
- NO VENDOR LOCK-IN (PRO) By far the best thing about Coolify is I could drop them at any point and my applications would still be running because it's on my hardware and using Docker standards, I have no reason to stick with them if they go a direction I don't like.
If you have any experience with Coolify or want to share any other applications, feel free to leave a comment! I would love to hear from you!
Posted on November 3, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.