Большие и не очень технологии в маленьком доме

от автора

В этой статье я попытаюсь суммаризировать мой личный опыт который накопился в процессе создания инфры ‘для дома’ с описанием используемых и оправдавших себя технологий.

Железо

Роутеры — Mikrotik. При достаточно адекватном ценнике — куча возможностей и большое разнообразие железа, которое вполне оперативно обновляется как по линейке, так и по софту. И по фичам. И если свитч CRS125-24G-1S-2HnD стоит давно и всем устраивает то вот роутеры переодически обновляются. При этом новый роутер ставится на основного провайдера, сейчас это C53UiG+5HPaxD2HPaxD с WiFi-6, а старый роутер переезжает на апстрим к запасному провайдеру. Да, микроты не идеал, да, есть некоторые сложности с переносом конфига со старой железки на новую, но плюсы перекрывают. А плюсы для меня такие

  1. Скрипты. Уведомления на почту о новой версии, авто бекапы — это все через них.

  2. Поддерживает кучу VPN в обе стороны

  3. Удалённый логгинг

  4. Выбор из CLI/API/Web интерфейсов

  5. Гибкая маршрутизация отдельных сетей (если вы понимаете о чем я)

  6. Постоянное наращивание функционала и ТТХ, к примеру на C53UiG+5HPaxD2HPaxD уже есть контейнеры и гиг памяти

Сервер — Mini-ITX с 2 SATA и M.2. Плюсы

  • Тишина. Например у меня J5040-ITX, активного охлаждения на проце у него нет, стоит он в корпусе ITX Thermaltake Suppressor F1 с большим вентилятором (200мм) во весь корпус который из-за размеров особо не шумит но обдувает внутри все.

  • Гибкость по стораджу. Два SATA — на RAID 1, M.2 на операционку и данные которые не страшно потерять.

  • Два слота Dual Channel DDR4. Сейчас у меня там стоит 8G, хватает с головой, 2 пользуется а 5 под кэшами.

Одноплатики — универсальная штука. У меня один (Raspberry 4) смотрит наружу с Nexcloud, git в виде gogs, и реверс прокси в виде caddy перед всем этим. Другой (Raspberry 3) трудится под octoprint на управлении 3д принтером, третий (Raspberry 4) работает как сервер homeassistant. Для всякого баловства типа kubernetes есть некое количество машин на orange (zero 2 w, pi 5). Благодаря Linux, Ubuntu и Docker все на них ставится и конфигурится ровно так как на серверах с x86_64. TTX тоже расттут. Orange PI 5 это 8 ядер и 4/8/16G памяти между прочим.

Технологии и софт

IaC (Infrastructure as Code)

Основа основ. Ну после Linux. Началу внедрения этой технологии дома положила борьба РКН с телегой, когда банились целые подсети, и старая технология — ‘зайду по ssh, настрою все и поставлю автообновления’ не очень работало, во-первых сервера приходилось менять, во-вторых количество софта на них росло. Потом, два года назад, доверие к облакам резко упало, дома появился сервер на itx плате и сейчас (с мая 2022) количество ролей в ansible дошло до 27. Нет никакого смысла править конфиг на сервере когда можно его хранить в гите и доставлять на сервер через ansible. В целом это реализовано на следующих шнягах:

Ansible — в 99% для дома хватит базовых модулей, которые довольно просты для понимания. Так же большие языковые модели вам в помощь, они умеют ansible, некоторые хуже, некоторые лучше, но для начала отличное подспорье. Гибко, модно, молодёжно. Новый сервер наливается нужным софтом в нужной конфигурации легко и не принуждённо после добавления его в инвенторку. Для серверов я использую Ubuntu, она отлично работает и на arm и на x86_64, никакого различия для ansible ролей нет. Гибкость — через роли и тэги. Все чувствительные данные (ключи, пароли, явки) можно и нужно шифровать и потом хранить весь код хоть в гитхабе. Много примеров легко находятся.

Git — Хранить код ansible и зеркалировать свои проекты на github. Я использую gogs на Raspberry 4, который смотрит наружу. UI на https, ssh, весь необходимый минимум. Развернут в виде докер контейнера 31 строчкой кода в ansible. Половина из которого — подпихивание конфига caddy который работает реверспроксей с https терминированием. Из минусов для меня — gogs не умеет синкать закрытые репы с github. Но это легко решается добавлением `git remote` и привычкой делать `git push && git push mygit`

Docker — отлично работает на arm и на x86_64. Cильно упрощает установку софта. C помощью docker-compose можно создавать и управлять целыми группами сервисов. Легко рулится через ansible. Единственная проблема для меня — контейнеры не попадают в область работы unattended-upgrades из ubuntu, а контейнеры смотрят иногда наружу. Я решил для себя эту проблему использованием watchtower.

Мониторинг

Начинал, достаточно давно, с лайтовых мониторингов типа cacti и munin-monitoring. Когда завёл сервер, по привычке построил мониторинг на zabbix, потом попробовал prometheus и перешёл на него. Буквально вчера удалил роли zabbix из ansible потому что точно не планирую к нему возвращаться.

Prometheus, Grafana, Alertmanager, Node-exporter — отлично ставятся через docker-compose и ansible. Все красиво, легко настраивается, куча примеров. Node-exporter ставится на arm и x86_64, легко настраивается на tls и пароль. Жрёт ресурсов меньше чем zabbix + mysql. Пишет алерты в телегу. Собирает метрики с homeassistant.

Blackbox_exporter — легко ставятся через docker-compose и ansible. Легко настраивается для работы с Prometheus. У меня мониторит основные http сервера в рунете и за его пределами для общего понимания картины их доступности и скорости доступа к ним.

mktxp — готовое решение для мониторинга микротиков через Prometheus и приема логов от них же в Loki с отображением в Grafana. В примерах есть настройка и docker-compose файл. Через ansible рулится изюмительно.

cadvisor — так как на основном сервере контейнеров уже 13 штук то использую его для их мониторинга. Тоже работает через Prometheus. Тоже через docker-compose и ansible.

netdata — красивое, легко ставится на все, но думаю отказаться, потому что Prometheus перекрывает все хотелки по мониторингу.

Всякое остальное

Веб / реверс проксиcaddy. Один бинарник, есть под все используемые архитектуры, из коробки умеет letsencrypt при минимальном конфиге (не люблю nginx за кучу конфигов), отлично работает как реверс прокси для виртуальных хостов. Для дома с IaC — самое оно.

Сетевая хранилка — nextcloud. Не идеальное и тяжеловатое решение, но есть клиенты под все плаформы, умеет стандартные протоколы типа WebDav, есть UI. В общем что-то сохранить или пошарить — вполне ок. Вполне себе работает на Raspberry 4 с 4G RAM.

Распределённая хранилкаsyncthing. Легко рулится через ansible. Умеет шифровать там где надо (например на удалённой виртуалке) и не шифровать там где не надо. Сейчас вполне успешно работает синхронизируя одну папку двух андроидах, двух маках, 5х Linux (Ubuntu и Gentoo) и одном IPad. Вообще использует для синхронизации за NAT общедоступные релеи, но если у вас паранойя то можете построить инфру исключительно на своих релеях. Батарейку на телефоне жрёт не значительно. Один минус — на IOS/IPadOS клиент сторонний и платный (но не сильно дорогой).

ЗаметкиObsidian. Куча плагинов, клиенты на всех используемых платформах, куча информации, один минус — не opensource. Несмотря на свою недавнюю статью, после некоторого опыта эксплуатации, не рекомендую использовать git для синхронизации, давится этот плагин большим количеством файлов. А вот в связке с syncthing работает отлично. Спасибо комментаторам статьи за то что таки заинтересовали заковырять syncthing.

Умный домhome-assistant на zigbee. Сейчас работает на Raspberry 4. С IaC у неё никак, к сожалению, но есть бекапы. На самом деле инсталляция уже пережила 3 сервера, Raspberry 2->3->4. Куча интеграций. Хоть с алисой, хоть с mi home, хоть с прометеусом, хоть с зубной щёткой. Про щётку не шутка, вполне есть интеграция с OralB.

Паролиkeepass. Клиенты подо все, тока под IPad он кривоват (или я только такой нашел), не умеет нормально синкать с nextcloud. На Android/MacOS/Linux/Win все замечательно, в связке с nexcloud работает давно и замечательно. Думаю что с syncthing тоже не будет проблем. И, возможно, сам на него скоро перейду.

Фоточки/видео хранилкаphotoprism. Собственно со времён написания статьи на эту тему почти два года назад почти ничего не поменялось. Замечательно рулится через docker-compose и ansible. Количество фото и видео выросло до 296G. В бесплатной версии наконец появилась карты по геотегам. Одно подбешивает — странное поведение UI при использовани с телефона. То скроллинг сбрасывается, то вместо просмотра — выделение срабатывает. Но пока альтернатив не вижу.

Backuprestic. Замечательная тулза, шифрование, инкрементальные бекапы, куча мест куда может складывать, удобное восстановление, удобная работа. Рекомендую. Легко управляется через ansible.

UPSnut. Куча поддерживаемых UPS, есть удалённые клиенты, легко рулится через ansible.

Бложикhugo. Легко хранить в гите, встроенная в github.io интеграция, очень легко перенести в любое место где есть веб-сервер. Формат исходников — вполне себе удобный MD.

Немного картинок

Загрузка сервера Intel(R) Pentium(R) Silver J5040 CPU @ 2.00GH с 8G RAM на котором работает мониторинг с логопринималкой, фоткохранилка, а так же samba и syngthing.

Загрузка сервера Raspberry Pi 4 с 4G RAM на котором крутится nexcloud, gogs и syngthing


ссылка на оригинал статьи https://habr.com/ru/articles/825272/