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

Железо

Роутеры - 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 при использовани с телефона. То скроллинг сбрасывается, то вместо просмотра - выделение срабатывает. Но пока альтернатив не вижу.

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

UPS - nut. Куча поддерживаемых 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

Комментарии (20)


  1. CitizenOfDreams
    03.07.2024 09:28
    +8

    Гит, Ансибль и Докер в домашнем хозяйстве... Интересно, а в других профессиях такие же профдеформации? Например, у бульдозериста диван складывается с помощью гидравлического поршня, а у подводника в туалете вместо кнопки смыва пять больших вентилей?


    1. sergeygals Автор
      03.07.2024 09:28
      +2

      Это не мы такие, это жизнь такая :)


    1. aborigen81
      03.07.2024 09:28

      Особенное спасибо за "подводника".
      Понравилось.


      1. CitizenOfDreams
        03.07.2024 09:28

        Особенное спасибо за "подводника".

        Всегда пожалуйста. Бульдозерист, а вы что молчите?


        1. roofcat
          03.07.2024 09:28

          Шланг в гидравлике меняю :)


  1. kt97679
    03.07.2024 09:28

    Скажите, пожалуйста, рассматривали ли вы immich для хостинга фотографий и если да, то почему решили использовать вместо него photoprism?


    1. sergeygals Автор
      03.07.2024 09:28
      +1

      вот именно из за таких комментариев я и пишу посты :) вот в упор не помню почему не стал использовать immich. выбор делал два года назад, возможно меня напугало `The project is under very active development.`. Но это не точно. Сегодня поставлю, поиграюсь и сравню, спасибо


      1. kt97679
        03.07.2024 09:28

        Я не пробовал ни photoprism ни immich, но у последнего заявлено мобильное приложение, в отличие от photoprism.


        1. sergeygals Автор
          03.07.2024 09:28
          +1

          да, уже пробую, жду индексации что бы посмотреть и сравнить, пока выглядит удобно. в планах потыкать в ui и потестить поиск, пока выглядит интересно, dog находит и сурков и кошек (хотя в основном собак, даже в отражённии зеркала машины нашел) так же нашёл dog на фотке серой стены, призма нашла сильно меньше, не нашла не одного видео (а immich нашел) но тоже в dog записала ослика и кота


      1. StraNNicK
        03.07.2024 09:28
        +1

        два года назад и я бы immich не взял.
        но вот год назад взял его и доволен.


  1. dburmistrov
    03.07.2024 09:28
    +1

    Пароли - keepass.

    А почему не vaultwarden, раз уж взялись за self-hosted? Клиентов - полно, и вязать с синком его не нужно.


    1. sergeygals Автор
      03.07.2024 09:28

      ну я бы с удовольствием размазывал по нескольким серверам 300гигов, но выглядит это дороговато во всех смыслах. Тем более что этот размер будет только увеличиватся. Keepas даёт большую свободу выбора. Седня захотел nexcloud - на, завтра synсthing - а вот. Послезавтра мне удобнее rsync запускать или в git хранить - никаких проблем. Тем более файлик то маленький. Ну и следить за одним сервисом смотрящем в инет проще, nexcloud пользуется не только для keeepass. А vaultwarden это таки отдельный сервис, притом узкоспециализированный.


      1. StraNNicK
        03.07.2024 09:28

        ну я бы с удовольствием размазывал по нескольким серверам 300гигов, но выглядит это дороговато во всех смыслах.

        вот эту фразу я не очень понял. Что за 300 гигов? База паролей вроде небольшая.


        1. sergeygals Автор
          03.07.2024 09:28

          ну я про то что централизация в виде vaultwarden и nextcloud это не очень хорошо, ибо единая точка отказа. а вот syncthing - это хорошо, потеря одного - двух узлов не страшна. но пихать в syncthing 300 гигов фоток и видео так себе идея. а вот маленький файл паролей - запросто.


          1. StraNNicK
            03.07.2024 09:28

            теперь понял, спасибо.


    1. StraNNicK
      03.07.2024 09:28

      vaultwarden хорош. Отдельно радует встроенный аутентификатор TOTP (в клиенте bitwarden, конечно, но всё же)


      1. asolokha
        03.07.2024 09:28

        a в keepassxc TOTP не радует - просто работает


        1. StraNNicK
          03.07.2024 09:28

          я пользовался keepassxc. Вы правильно написали — работает, но не радует : )
          ну а если без шуток, то показалось неудобным синхронизировать базу keepassxc между устройствами.
          syncthing, конечно работает, но как-то всё это очень костыльно.

          к тому же на android keepassxc уже нет (есть аналог, но это аналог).

          мне bitwarden показался удобнее. Но это субъективно, конечно.


      1. sergeygals Автор
        03.07.2024 09:28

        Кажется что хранить totp в одном приложении с самими паролями так себе история. Украв файл и пароль имеем полный доступ, не ?


  1. sergeygals Автор
    03.07.2024 09:28

    А в чем аналоговость keepass2android? Ну как бы есть формат базы kbdx, есть разные программы которые с ним работают. Никогда проблем не испытывал что пользую один и тот-же файл под андроидом, маком, линухами и виндой. Ну и про костыльность непонятно. Формат kbdx отлично переживает изменение открытых файлов другими программами (syncthing, nexcloud клиент, rsync, rclone, etc). Распределенная синхронизация файлов - отдельная область со всякими разлекухами типа решения конфликтов, слияния и всего такого. Ну и получается вполне себе unix way. Keepass занимается одним, паролями, и позволяет выбрать любой (даже тот который появится в будущем, что нить на спутанных фотонах) удобный путь для другого - синхронизации файла. По моему это не костыль, это продуманность архитектуры