Self-hosted PaaS & IaaS
I'm always looking to make my homelab environment easier to maintain. I think right now it's not too bad to keep up with, but it can always be better! What I'd like to do is look through the search terms self-hosted PaaS and IaaS and see what I come up with. I think the PaaS offerings won't be able to support the array of open source projects I host because they'd need to integrate with them directly, so perhaps there's a proxmox alternative that can better support containers.
PaaS and IaaS Defined
What is a Platform as a Service (PaaS)? It's a group of services that provides a runtime for an application. This includes everything around the application like a database, authentication and storage. These services take on a large range of capabilities and depth of integration. It also includes complete abstraction from the underlying infrastructure, they deal with that so you don't have to. They also need to give you the ability to Deploy onto that runtime. Typically the goal of PaaS is to quickly write an application by staying inside the guardrails of the platform. This involves using their SDK's to write your codebase such that it's tightly coupled with the PaaS.
A popular example is Firebase. You're expected to build your application around this platform; they offer SDK's for popular languages which integrate with the platform. You are encouraged to use their NoSQL realtime database, Firestore. If you do use their database, you can integrate with other services like authentication, serverless functions or object storage. Other features include a local emulation suite for testing, static hosting, security rules and ML integrations.
You'll notice that Firebase is rather opinionated. You can't really bring your own DB schema, it would be difficult to migrate an application that's already fully working here. It's best suited for building something from scratch. A lot of these platforms tend to lose their users once they get 'out grown'.
What is Infrastructure as a Service (IaaS)? It's a service that offers building blocks of cloud infrastructure as a subscription. This is your Azure, AWS, GCP and so on. PaaS allows you to shed ownership of the Database, Analytics, Operating System and so on. IaaS has to keep ownership of those, but still allows you to shed ownership of the metal and all the problems that come along with it.
Proxmox is almost an IaaS platform, yet it lacks many of the features and security controls required to make it multi-tenanted securely enough to let arbitrary code execute all over the place. When you think about it, that's a pretty tough job.
List of Projects
I went through a few pages of search results, reddit and github and this is what I found. I searched for 'PaaS/IaaS self-hosted'. This is every platform I found with a decent level of adoption.
Self-Hosted PaaS
Project URL | Orchestration Engine | Interfaces | Services |
---|---|---|---|
Caprover | Docker Swarm | CLI, GUI | NGINX, Postgres, MongoDB, Container |
Supabase | Docker-compose | GUI, API, SDK | Postgres, Auth, API, Serverless Functions, Storage, Vector Embeddings, Container |
Coolify | Standalone Docker engine | Git, SSH | GUI, Database, Container |
Dokku | Kubernetes, Docker, Nomad | Git, CLI, SSH | Proxy, Containers, Storage, Builder, |
Space Cloud | Kubernetes | Client SDK | CRUD DB API (no writing backend logic), serverless functions, realtime query, storage, API, RBAC, autoscaling, service mesh, MongoDB, Postgresql, SQL |
Tsuru | Kubernetes | CLI | Containers, API, Basic Auth |
A few projects had promise but seem to be no longer maintained. When I tried researching Workflow, all their docs had invalid nginx
configs and expired certs.
Self-Hosted IaaS
It's funny to say 'self-hosted' IaaS because the whole point is you're trying to abstract the infrastructure and not run anything on metal. I suppose the real use-case here is if someone wanted to create an internal AWS to save cloud expenses and use idle hardware.
Project URL | Description |
---|---|
OpenStack | Deployed by thousands. Proven production at scale. OpenStack is a set of software components that provide common services for cloud infrastructure. |
Apache CloudStack | Apache CloudStack is open source software designed to deploy and manage large networks of virtual machines, as a highly available, highly scalable Infrastructure as a Service (IaaS) cloud computing platform. |
CloudForms | a cloud management platform that also handles conventional virtualization application products such as VMware vSphere or Red Hat Enterprise Virtualization (RHEV) very well |
OpenQRM | openQRM has a key leading technology that sets it apart from the rest. The Diskless Boot. This feature means that any servers and applications are booted WITHOUT a hard disk! This has many advantages; faster boot times, longer uptimes, and much more cost-effective. |
oVirt | oVirt is an open-source distributed virtualization solution, designed to manage your entire enterprise infrastructure. oVirt uses the trusted KVM hypervisor and is built upon several other community projects, including libvirt, Gluster, PatternFly, and Ansible |
Again here are a few that are no longer maintained but looked promising:
Summary
As I feared, while reading through each project's landing page copy to create the table above, I one at a time excluded them all from possibility for my environment due to the application needing to be tightly-coupled with the platform. That won't work for me.
So I decided to hone in on a few IaaS projects to dig deeper on. I love RedHat as an organization, but know they make their products complex so you have to buy support. Not for me please, I'll pass on CloudForms which I could barely get a high level understanding of by reading their docs briefly.
OpenQRM is interesting, it sounds like they go back to the old-school approach of network booting machines and maintaining golden images. They also specifically callout a proxmox solution which speaks to me. I am a little afraid of the features locked behind a paywall, and that you have to use a cloud-hosted application to manage everything. I'll pass for now unless nothing else seems promising.
oVirt
could be a great solution, the documentation doesn't look the best but it does seem complete. It's a community driven project for better or for worse.
OpenStack
and CloudStack
seem the most interesting to me. They're backed by recognizable organizations, all their sites are modern and their documentation seems great. I explored these in depth, which I will cover in a future blog post. Unfortunately, they're both mega overkill for a home environment. It took me weeks to setup OpenStack, fighting errors at every turn. The end result is a slimmed down AWS/GCP cloud console experience. You can create networks, setup strict security boundaries between resources and provision VMs. It would work to sell infrastrucutre, but for my home environment where I am the sole operator it's overkill for sure.
Conclusion
This exploration had me learn a lot about how PaaS and IaaS work, one of the best parts of open source projects is your ability to peer inside and learn how all the big guys accomplish similar tasks. Unfortunately I didn't find any new cool projects to adopt into my environment but it does save me a migration weekend!