Today we’ll talk again about home servers. I’ve already written many notes and videos on this topic. Let’s discuss application deployment methods.
- Kubernetes – a convenient system, but designed for organizations (minimum 3 nodes, constant polling of everything, which leads to active fan operation, etc.).
- Proxmox – simplifies things, but doesn’t solve the problem (you can easily operate with virtual machines – start/stop/move/backup, but it’s still complex to create and it’s a rather coarse abstraction (backups include not only data, but also a large volume of OS/programs/etc.), no scaling at this level, etc.).
- specialized OSes for applications like TrueNAS, CasaOS – they’re quite poor in terms of data preservation, as well as when restoring the system on different hardware after a failure.
In this regard, we need to design a new system. It should be similar to Kubernetes from the user’s perspective and install on bare metal, but internally account for home realities:
- usually no more than 1 application instance is needed
- minimal manual intervention, as at home there’s no one and no time to do it
- 2 machines for applications: active and passive
- automatic switching
- user notification on automatic switching
- simple installation
- simple recovery of a broken machine
- backups to another system
- use of local domains for finding applications
- during idle time it should be simple: for silence and minimal energy consumption
I already had one approach: https://github.com/stepin/home-cloud , but it’s a bit complex to understand and set up.
We’re slowly starting work on this at https://github.com/stepin/k4h . The application code is in Kotlin Native + Ktor. 4 main applications:
- ISO generator site for OS with necessary settings
- k4h-node – server application that manages a K4h node
- k4h – client application that manages K4h
- web UI for K4h (replaces the client application for those who don’t like the console)
It’s unlikely to be quick, but we’ll see. If anyone wants to participate, you’re welcome (that’s why the announcement is at the start of development, not at the end).