Дом-дурачок. 3 года спустя
Мой домашний серверный сетап меняется каждые 3-4 года. В Сибири у меня был огромный жужжащий ящик, в Литве я перебивался готовыми NAS'ами от WD и Synology, потом переезжал в дата-центр, а в последние годы держал домашний кластер Raspberry Pi.
Недавно я запостил в твиттер очередную фотку своего настенного планшета с новым виджетом и куча народа попросила рассказать как всё устроено.
Штош, три года прошло, время апдейтов.
На эту черную пятницу я прикупил себе кумплюктер. Последний раз я употреблял в своей речи слова SATA и DDR примерно лет пять назад, а последние годы моя «жизнь» вообще происходит исключительно за ноутбуком или планшетом. Я — тот бородатый хипстер их реклам Apple.
Но жизнь без настоящего кумплюктера — это, конечно, не жизнь. Хотя «настоящим» кумплюктер можно было назвать лишь отчасти, потому что он вот такой:
Это так называемый Mini PC, которые раньше были в основном уделом школьных кабинетов информатики, а теперь самые храбрые из них даже превратились в Steam Deck, на который дрочат все геймеры.
У меня довольно слабая модель — MinisForum U820 за €350, но и бралась она с расчетом, что мне не нужен гейминг и внешние видеокарты, а нужна экономичная машинка для замены моих Raspberry Pi.
Один мой RPi отвечал за умный дом с Home Assistant — тот самый, о котором я писал три года назад. Другой RPi был под домашнее облако-бекапилку-файлопомойку, на котором был RAID1 из 2x4Tb HDD с периодическими бекапами всех моих проектов, считалкой налогов (яж блять в Германии) ну и просто хранилищем для всех фоток, документов и прочего нажитого непосильным трудом. Эти два HDD переезжают со мной вот уже в третью подряд страну.
И вот когда мне понадобился третий RPi я сказал хватит. Пора брать что-то нормальное, ставить туда полноценную Убунту и устраивать хоум-лаб под себя как в лучших домах Европы.
Последние недели я усердно мигрировал свои домашние сервисы на эту пепяку, потому как раз появился повод рассказать как оно всё устроено для потомков.
После того самого поста прошло три года. Почти вечность. Тогда я строил умный дом в новой квартире и верил в светлое будущее, а теперь не верю ни во что и практически переехал.
Сразу накину — за три года было выброшено практически всё.
☠️ Зоопарк Xiaomi китайских девайсов. Ожидаемо, эти ребята сгнили первыми.
Пока они новые — ты кайфуешь. За пять баксов ты можешь следить за температурой и влажностью в каждой комнате, а еще за десять — автоматически включать в них свет. Вау! Технологии!
Но проходит полгода-год и вот в датчике температуры села батарейка, которую хер заменишь, а датчик движения просто умер от пыли — надо покупать новый и переписывать все сценарии.
Всё это хоть и кажется мелочами на первый взгляд, но когда всё разваливается по пятому кругу — ты просто забиваешь. Не лень мне и рукой свет включать.
Да, всё это было абсолютно ожидаемо и китайское барахло от Xiaomi/Aqara покупалось исключительно ради экспериментов и шуток про всратый IoT. Так что особо не жалко.
До сих пор иногда нахожу дохлые трупики старых датчиков по квартире и улыбаюсь.
☠️ Универсальные хабы, умные выключатели и прочие «сценарии». Любой сценарий, сложнее чем «нажал кнопку — включилась лампа» обречён со временем сдохнуть. Вы просто устанете каждый раз прописывать в него новые лампочки, триггеры, менять сцены и вообще заморачиваться со всем этим больше одного раза.
Потому все «умные выключатели» были содраны со стен и заменены обратно на тупые.
Особый кек случился с датчиками на батареях, которые якобы должны были «умно» подстраивать температуру комнаты под комфортную днём, снижать её ночью и экономить отопление, когда дома никого нет.
Так вот. Мне пришел счет за 2020 год, когда датчики стояли везде, и за 2021, когда я их снял. С «умными экономящими датчиками» за год я нажёг на 20% больше отопления, чем за год с тупыми крутилками, которые просто всегда стоят на единичке.
Заебись сэкономил!
В итоге из «умных устройств» у меня остался только набор икеевских кнопочек и розеток, которые не заменяют обычные выключатели, а скорее дополняют их — когда лень вставать с дивана перед сном, либо это напольная лампа, которой хочется управлять удалённо.
Но не более того. Даже гирлянда на балконе была заменена на обычную с собственным таймером. Никакой разницы.
☠️ Удалённое управление. Фича «выключить свет дома пока тебя нет» пригодилась за всё время ровно НОЛЬ раз.
Да, я восхищен как Apple HomeKit пробрасывает всё мое добро через любой NAT и позволяет мониторить мой дом откуда угодно через спящий где-то под телевизором Apple TV. Это круто. Но реально ни разу не пригодилось. Прости, Тим Кук.
✅ IKEA Smart Home. На второй год весь зоопарк донглов и протоколов был заменён на один единственный хаб — от IKEA. Это был осознанный выбор.
Во-первых, IKEA сделала самую нормальную «экосистему», так как переиспользовала открытые стандарты (ZigBee) и даже контрибьютила в опенсорс.
Во-вторых, IKEA построила весь свой умный дом вообще без какого-либо «облака». Это честная mesh-сеть, которая может работать даже в полном оффлайне. Выдерните хаб из розетки — все ваши выключатели и лампочки всё равно продолжать работать. Настоящий peer-to-peer. Хоть кто-то из блядских корпораций наконец-то сделал это правильно.
Да, из-за этого ИКЕЮ часто критикуют, мол, у них нет всяких модных фич, как у того же Google Home. Но это именно потому что для их реализации все ваши данные должны быть слиты в облако — а икея выбрала другой путь. Спартанский, но очень похвальный.
За одно только это респект Шведам, буду следить за ростом их линейки «умных» девайсов с удовольствием. Пожалуйста, не прогибайтесь и не делайте IKEA Cloud. Очень прошу!
✅ Home Assistant. В оригинальном посте я так нахваливал Home Assistant, что даже сказал, что слежу за каждым их ченжлогом.
Такая яркая любовь обычно быстро проходит, но нет. Я всё еще минимум раз в пару месяцев открываю и читаю их ченжлоги. Третий год подряд!
Однако со временем Home Assistant перестал для меня быть «универсальным хабом», я больше не управляю через него девайсами (хотя и могу), я использую его как дашборд, в который собираются и мониторятся нужные мне показания и информация.
У Home Assistant одна из самых классных и простых архитектур для виджетов и компонентов, что я видел. Да, они ломали её один раз, что даже прозвали The Great Migration, но с тех пор всё стало еще красивее. Даже коллегам привожу в пример.
Так что он всё еще жив и легитимен, хотя по сути и превратился в бекенд для планшета на стене. Зато перед выходом я всегда знаю успею ли на близжайший трамвай и надо ли надевать шапку! (да, мам)
✅ Планшет. Настенный планшет всё еще настолько полезен, что заслуживает отдельного рассказа ниже.
Около входной двери у меня уже давно висит дешевый планшет Amazon Fire HD. Он был куплен за что-то типа 70 евро и круглые сутки показывает один из дашбордов с инфой из Home Assistant, который я себе сконфигурил, через Fully Kiosk App.
И это до сих пор самое полезное, что есть во всём моем доме-дурачке вообще. Даже если я наиграюсь и выброшу нафиг все умные девайсы, дашборд я всё равно оставлю. Смотрю на него по несколько раз в день и он реально экономит время.
Планшет агрегирует два класса информации — «домашнюю» и «уличную».
Домашняя инфа живет в левой половине. Это:
Справа — всё «уличное»:
Были еще планы добавить туда всякие расписания вывоза мусора, но я не нашел нужных API для Берлина.
По технике проблем особых не было. За три года ничего не выгорело, не сломалось, батарейка жива, счета за электричество меня не обанкротили. Там щас слой пыли с ноготь толщиной, но это пофиг, сломается — куплю новый.
Единственный косяк, я он нём уже рассказывал, что Амазон где-то раз в пару месяцев решает показать мне рекламу во весь экран. Нужно же как-то Джефу Безосу оставаться самым богатым человеком в мире. Плоти долор.
Пока я перевозил всё свое добро с Raspberry Pi, заметил, что нам давно не хватало нормального виджета для транспорта. Раньше у нас был совсем маленький и он умел только трекать транспорт из точки А в точку В. А нам теперь надо весь. Так что я решил написать новый. Да, опять.
Мне кажется, для олдов это уже скоро станет мемом — Вастрик в любом городе и при любых обстоятельствах делает свой трекинг транспорта. Новосибирские олды еще помнят NGTMap — это же был мой первый «стартап», который я продал «большой корпорации» аж за 500 догдашних долларов! Был очень горд собой, три месяца на них жил!
В последние годы я начал сильно больше заморачиваться по поводу своих данных и информационной безопасности. Может это техно-пессимистическая Германия на меня так влияет, может Берлин, с его глубокой хакерской культурой, а может потому что большая айтишечка сейчас в целом гниёт со страшной силой.
Хорошие сервисы, которыми я пользуюсь лет десять, обрастают тоннами ненужных фич и переписывают свои удобные маленькие приложения на монструозно-тормозное веб-говно. Продуктоунеры пришли, блять. «Насколько вы готовы рекомендовать наше приложение друзьям». Убивав бы.
Другие же активно строят цифровые гулаги и огороженные сады, где либо торгуют твоими данными, либо сливают их направо и налево.
Сейчас добавилась и третья боль — постоянные блокировки всего. Я уже боюсь утром почту открывать, ведь там опять будет письмо от какого-нибудь Гитхаба, Спотифая или Хецнера, что «им очень жаль и они не могут продолжать со мной сотрудничество без объяснения причин».
Потому я начал плавно склоняться в сторону «всё своё ношу с собой» и селф-хостинга для всего, что я считаю действительно важным.
Первым из мастодонтов пал Dropbox. Он так сильно сгнил, что был без жалости заменен сначала на Nextcloud, а потом вообще на Syncthing, потому что он простой и стабильный.
Вторым был убит GMail. Но честно селф-хостить имейл в 2020+ году нет никакого смысла (ваш IP сразу забанят все почтовики), потому он был заменен на независимый платный имейл-сервис, даже неважно какой, с бекапами истории в Nextcloud.
На очереди замена 1password на какой-нибудь Bitwarden/Vaultwarden, но с этим сложнее, потому что в 1password меня держит шаринг паролей с кучей людей, а тут без «облака» пока никуда.
Так что со временем я планирую всё больше и больше всего селф-хостить дома. Да, это требует времени и навыков, да, у селф-хостинга тоже есть свои опасности (недавно я чуть не уронил RAID-массив на пол), но плюсов для меня всё равно больше.
Планомерно пересаживаю всех домашних на это тоже.
Ну а еще это неплохое хобби — можно потренироваться с теми технологиями, которые редко используешь по работе.
Эта часть для гиков, где я рассказываю как всё собрано изнутри.
Операционная система — Убунта. Слишком стар я для хардкорных прыщей, хотя в свое время очень любил Arch. Убунта установлена с полноценным десктопом, так как кумплюктер подключен к телевизору и там даже установлен Steam, если вдруг мне захочется погамать в любимую инди-игру с геймпада от PS4.
Дальше докеры. Докеры — основа всего сейчас. Не знаю как мы жили без них. Сейчас, запуская приложение без докера, чувствуешь себя как будто голым на улицу вышел.
Современные ОС по-прежнему обожают засираться всякими пакетами, зависимостями, ошмётками кешей и конфигов. Это в молодости я думал, что я просто глупый и ничего не понимаю, но даже спустя 10+ лет я всё еще не понимаю что с этим делать.
Тут пакеты из pip, тут пакеты из aptitude, тут snap'ы, тут вообще какой-то инсталл-скрипт притащил для себя php и nodejs. Потому мне с докерами как-то проще: развернул контейнер одной командой — потыкал — удалил — система такая же чистая и новая.
Докеры — кайф. хотя пора бы переезжать на Podman, конечно
Потому для любого сервиса, который я хочу крутить на своем сервере, я первым делом гуглю "название + docker-compose" и в 99% случаев кто-то уже написал нормальный рабочий конфиг, который просто развернется одной командой — со всеми фронтендами, бекендами, базами данных, мониторингами, итд.
Конечно, можно было упороться по хардкору с Кубернетесами и HELM-чартами, как трушные хоум-лаберы, но я не вижу особого смысла в оркестрации, когда у тебя всего одна машина.
Чем проще делаешь — тем дольше проживет
Когда контейнеров с сервисами становится много, типа 10+, начинаются проблемы. К каждому приходится запоминать порт, придумывать где хранить все конфиги, авторизацию — всё это быстро запутывается как провода в тумбочке.
Простой выход — использовать готовые решения типа Umbrel, которые абстрагируют всё это за тебя и дают свой типа App Store. Для большинства юзеров пойдёт.
Но если планируешь запускать много кастомных докеров — готовые решения могут быть болью в жопе. Тут на ум приходит популярный в кругах Go'шников старый добрый Traefik, который всё это богатство красиво собирает под себя.
Traefik — это такой же реверс-прокси как Nginx, только написанный в этом десятилетии. Он уже по-умолчанию заточен под работу с докерами, а еще даёт из коробки SSL, подсети, авторизацию, и кучу других полезных плагинов, ради которых раньше приходилось долго танцевать в конфигах Nginx и Let's Encrypt.
В простейшем случае, чтобы развернуть контейнер на новом поддомене, нужно просто добавить пару-тройку "меток" (labels) в ваш Docker Compose, чтобы Traefik их прочитал и сделал всю магию автоматически. Даже перезапускать его не надо, всё дискаверится автоматически.
Моя домашняя сеть недоступна из интернета, потому я пока забил на SSL. Но это плохо, обязательно наверну его позже.
Каждый сервис живет на своем локальном поддомене. home.local — это главная страница всего (дашборд со ссылками), а дальше идут syncthing.home.local, homeassistant.home.local, gitea.home.local, stats.home.local и так далее.
Откуда берутся локальные домены? Старый добрый avahi-daemon анонсирует их все через Multicast DNS на вашу домашную сеть автоматически. Даже не надо поднимать свой DNS сервер, чтобы у тебя были красивые URL. У гостей тоже работает (если у них не доисторические девайсы).
На убунте оно уже буквально включено из коробки. Просто откройте в браузере [ваш_хостнейм].local и узрите. Если нет — просто делаем sudo apt install avahi-daemon и вот оно магически появляется.
Дальше встает выбор дашборда. Можно, конечно, хранить все эти ссылки просто в закладках, но мне удобнее когда я захожу на home.local и сразу кликаю на нужный мне сервис. Traefik даже умеет пробрасывать всем единые хедеры с авторизацией, чтобы не вводить каждый раз логин-пароль.
Дашбордов на гитхабе дофига, я выбрал Homer с темой Homer v2. Он так же разворачивается через docker-compose и встает одним из сервисов. Все универсально, нравится.
Дальше уже можно разворачивать любые сервисы из списка Awesome Selfhosted и играться как ребенок с кубиками. У меня набор пока минимален:
Syncthing. Одно из самых моих любимых приложений вообще. Оно неубиваемое, делает одну вещь и делает ее хорошо вот уже много лет — синхронизирует файлы напрямую между машинами без облака.
Filebrowser. Да, прям так и называется. Легковестная браузилка файлов, выручает когда нужно «найти в архиве документов свой старый контракт» или что-то такое. Почти ничего больше не умеет, но оно и не нужно.
Nextcloud. Комбаин всё-в-одном — и файлохранилище, и календарь, и чат, да даже почту умеет за вас забирать. Раньше пользовался активно, но сейчас немного устал от монструозности и выбираю решения попроще. Однако, главным плюсом Nextcloud все еще остается мобильное приложение — через него удобно как смотреть что-то на сервере, так и бекапить фоточки с телефона.
Home Assistant. Установлен из докера, потому немного урезан по фичам. Например, не умеет устанавливать всякие приложения внутри — SSH-терминал или HomeKit-хаб. Но мне так даже больше нравится, а при желании я могу всё это поставить сам рядом.
Cronicle. У меня куча периодических cron-задачек, которые кто-то должен исполнять и мониторить чтобы не падали. Бекапы всех моих сайтов, скрипты, группирующие чеки по папочкам для налоговой, и прочее. С обычными крон-тасками главная проблема — он внезапно ломаются и ты об этом узнаешь только спустя месяц.
Portainer. Для меня это просто удобная веб-админка ко всем докерам. Посмотреть логи, какие контейнеры запущены, где кеши надо почистить и прочее.
Gitea. Локальный гитхаб, туда зеркалятся все мои репо. Зачем? Ну вот когда настоящий Гитхаб наконец-то забанит меня потому что я русский ванька (как он делает с иранцами, например) — тогда и поймёте зачем.
PhotoPrism. Ваш собственный Google/Apple Photos. Его даже немножечко обмазали нейросетями и он умеет находить фотки по простым запросам типа «car» или «budapest». У меня есть ритуал — каждое рождество сливать все фотки за год из облаков на диск в хайрезе, потому что все мы слышали истории как тот же Google со временем просто пережимал ваши фотки в 10 шакалов, чтобы экономить место. Теперь они все еще и автоматом индексируются PhotoPrism'ом и их можно потом смотреть с друзьями через аппку на телефоне.
Your Spotify. Ваш собственный Last.fm. Ну, почти. Простая аппка, которая сохраняет себе всю историю ваших прослушиваний Spotify и может показывать статистику а-ля Spotify Wrapped только не раз в год, а хоть раз в месяц или раз в неделю. Чисто залипалово. Ну и локальное хистори музыки всегда полезно. Эх, аж заскучал по Last.fm.
ArchiveBox. Ваш собственный Internet Archive (он же Wayback Machine). Я еще не угорел по «архивации всего, что я смотрел и читал», но в тусовке есть любители. Работает так: ставишь плагин в свой Firefox и он автоматически сохраняет тебе на сервер ВСЁ, что ты браузил в интернете. Даже если контент был удалён (что сейчас часто бывает) — ты всегда можешь прочитать его из личного архива. Всё равно HDD стоят дешево.
Pi-hole. Блокировщик рекламы и локальный DNS-резолвер. Давно не использую, поставил чисто по привычке, но вдруг!
Glances. Максимально простая и удобная страничка мониторинга сервера. Просто условный htop + docker ps + df -h еще пара стандартных команд, выведенных в одном месте. Нравится. Даже передумал ставить стандартную связку Prometheus + Grafana, так как его хватает. Но может поставлю еще чисто для статистики.
🏴☠️ В моем списке нет популярных сервисов типа Plex, Transmission и Jellyfin, которые офигенно позволяют построить свой Netflix на торрентах. Это всё опять из-за Германии, где торренты запрещены. Но вам я очень рекомендую! Отыграйтесь там за мою боль.
Последний вопрос — как это всё хранится и конфигурируется. Для этого у меня есть локальный гит-репо со всеми конфигами и старый добрый Ansible. Да-да, он еще живой. Они даже с питона 2 его наконец-то переписали. И десять лет не прошло.
Ансибл используется для накатывания всего моего сетапа с нуля. Я не так часто настраиваю новый сервер и каждый раз вспоминаю «чо там еще надо было установить». Теперь всё это просто записано в плейбуке, в конце которого Ансибл просто копирует весь репо на хост и делает docker-compose up -d для каждого сервиса. Красиво.
Надо лишь не забывать время от времени конфиги подкоммичивать в гит. Когда что-то меняешь через UI — будущие поколения об этом не узнают.
В детстве такой проблемы не было. Данных было немного, а линуксы переустанавливались каждые пару месяцев. С годами, или как в моем случае с десятилетиями, ты начинаешь замечать насколько хрупки HDD, даже если покупаешь специальные WD Red для NAS.
Однажды утром ты просыпаешься, наливаешь себе кофе, а левым ухом слышишь треск из под телевизора — один из твоих HDD сдох.
Ты идешь и покупаешь в два раза больше дисков и делаешь на них RAID1. Ну либо, если у тебя уже дофига дисков разного размера — делаешь ZFS по-модному. Ну а если ты нищеброд — просто по старинке настраиваешь cron+rsync всех важных папочек на соседний диск.
Каждый подход имеет свои плюсы и минусы. Выбирайте сами.
В линуксах есть просто прекрасный своей простотой mdadm, позволяющий буквально в две команды собрать себе софтварный рейд-массив, а в случае деградации — пересобрать.
Mdadm позволяет жонглировать дисками как горячими пирожками, хотя и каждый раз стрёмно, конечно. Потому сейчас я решил попробовать чуть более олдскульный метод — rsync'ать все данные с диска на диск раз в неделю и мониторить это отдельно. Так тоже можно, если вам важно именно иметь бекапы, а не high availability.
Но для новичков это всё еще опционально. В идеале лучше вообще всё бекапить в облако, ведь даже самый лучший домашний RAID-массив можно просто физически наебнуть с полки на пол и потерять всё. Не хотелось бы.
Ну а вишенкой на торте и самым хайтеком современного селф-хостинга считается Cloudflare Tunnel. Я пока не знаю зачем он мне, но очень хочется.
Ты по сути можешь так и держать свой сервер только в домашней сети (за NAT'ом), но поставить на него специального демона, который устанавливает приватный шифрованный тоннель с Cloudflare и дальше может через него иметь доступ ко всем своим домашни сервисам из любой точки интернета.
Сейчас люди с публичными IP адресами такие «эээ, а в чем разница???», но я живу в стране, где иметь дома публичный IP это как иметь дома Porsche (и то вторых больше), так что тут народ прям ликует по поводу Cloudflare Tunnel.
Вместо заключения положу вам ссылочек, чтобы процесс вкатывания во всю эту историю с селф-хостингом и автоматизацией был попроще.