Сегодня еще раз поговорим о серверах дома. У меня уже было множество заметок и видео роликов на эту тему. Поговорим о способе деплоя приложений.
- Kubernetes – удобная система, но спроектирована для организаций (минимум 3 ноды, постоянный опрос всего, что ведет к активной работе вентиляторов и тп).
- Proxmox – упрощает, но не решает проблему (можно легко оперировать с виртуальными машинами – включать/останавливать/перемещать/бекапить, но все еще сложно создавать и это довольно грубая абстракция (те же бекапы включают не только данные, но и большой объем ОС/программ/прочего), нет масштабирования на этом уровне и прочее).
- специализированные ОС для приложений типа TrueNAS, CasaOS – они весьма плохи с точки зрения сохранности данных, а так же при восстановлении системы на другом железе при сбое.
В связи с этим, нужно проектировать новую систему. Она должна быть похожа на Kubernetes с точки зрения пользователя и ставится на голое железо, но внутри учитывать реалии дома:
- обычно не нужно больше 1 инстанса приложения
- минимальное ручные вмешательства, т.к. дома это некому и некогда делать
- 2 машины для приложений: активная и пассивная
- автоматическое переключение
- оповещение пользователя при автоматическом переключении
- простая установка
- простое восстановление сломавшейся машины
- бекапы на еще одну систему
- использование local доменов для поиска приложений
- во время простоя должен быть простой: чтобы была тишина и минимальное потребление энергии
У меня уже был один подход: https://github.com/stepin/home-cloud , но он сложноват в понимании и устройстве.
Потихоньку начинаем работу над этим в https://github.com/stepin/k4h . Код приложения на Kotlin Native + Ktor. 4 основных приложения:
- сайт-генератор iso для ОС с необходимыми настройками
- k4h-node – серверное приложение, которое управляет нодой K4h
- k4h – клиентское приложение, которое управляет K4h
- web ui для K4h (заменяет клиентское приложение для тех, кто не любит консоль)
Вряд ли это будет быстро, но посмотрим. Если кто-то хочет тоже участвовать, то приветствуется (поэтому и анонс при начале разработки, а не в конце).