Каждый домашний сервер, NAS или умный дом рано или поздно превращается в свалку глючных конфигов, мёртвых проектов и забытых бэкапов. Разбираемся, как отличить рабочий технотреш от безнадёжного говна — и что с этим делать.
Пример: старые версии Home Assistant, которые не поддерживают новые интеграции, или прошивки для роутеров, в которых есть уязвимости, но нет патчей.
Говно не появляется само по себе. Оно — результат конкретных решений и компромиссов. Разберём основные источники.
Ты ставишь временное решение, чтобы протестировать идею. Оно работает, и ты забываешь о нём. Через год ты уже не помнишь, что это было временное решение, и оно становится частью инфраструктуры.
Пример: ты поднял VPN на роутере через PPTP, потому что «быстро и просто». Через год ты понимаешь, что PPTP небезопасен, но у тебя уже десяток устройств, которые подключаются через него, и переделать всё — слишком сложно.
Ты боишься обновлять систему, потому что «работает же». Ты отключаешь автоматические обновления, чтобы ничего не сломалось. Через год ты понимаешь, что твоя система отстала от жизни на несколько версий, и обновление теперь — это большой и рискованный проект.
Пример: старые версии Proxmox, которые не поддерживают новые версии ядра, или Ubuntu 18.04, которая давно вышла из поддержки.
Ты не читаешь документацию. Ты не смотришь примеры. Ты не спрашиваешь советов. Ты делаешь по-своему, потому что «я сам разберусь». В итоге ты изобретаешь велосипед, который уже давно изобрели до тебя, но с кучей багов и костылей.
Пример: ты пишешь свой скрипт для бэкапов вместо того, чтобы использовать готовые решения вроде Borg или Restic. Через год ты понимаешь, что твой скрипт не умеет делать инкрементальные бэкапы, не проверяет целостность данных, и вообще работает через раз.
Ты используешь софт, потому что он бесплатный, а не потому что он хороший. Ты миришься с его недостатками, потому что «бесплатно же». В итоге ты тратишь больше времени на борьбу с багами, чем сэкономил на лицензии.
Пример: бесплатные версии софта с ограниченным функционалом, которые не подходят для твоих задач, но ты всё равно их используешь, потому что «бесплатно». Или open-source проекты, которые заброшены, но ты продолжаешь их использовать, потому что «бесплатно».
Ты тратишь месяцы на планирование идеальной инфраструктуры. Ты рисуешь диаграммы, пишешь документацию, продумываешь каждый шаг. В итоге ты так и не начинаешь, потому что идеального решения не существует.
Пример: ты планируешь идеальную сеть с VLAN, VPN, брандмауэрами и мониторингом, но так и не подключаешь ни одного устройства, потому что «ещё не всё готово».
Говно не исчезнет само. Его нужно активно вычищать. Вот несколько стратегий.
Раз в квартал устраивай «день уборки». Проверяй все сервисы, которые у тебя запущены. Удаляй то, что не используется. Обновляй то, что устарело. Документируй то, что осталось.
Что проверять:
docker ps -a). Удаляй остановленные и неиспользуемые.apt list --installed или dpkg -l). Удаляй то, что не нужно.crontab -l). Удаляй мёртвые задачи.netstat -tulnp или ss -tulnp). Закрывай ненужные порты.Если ты делаешь что-то вручную чаще раза в месяц — автоматизируй. Примеры:
Документируй всё. Но не в виде отдельных заметок, которые никто не читает, а как часть инфраструктуры. Примеры:
Правило: если ты не можешь объяснить, как работает твоя система, за 5 минут — это говно.
Не вноси изменения в продакшен без тестирования. Используй:
Чем сложнее система — тем больше в ней говна. Упрощай. Примеры:
Правило: если ты не можешь объяснить, как работает твоя система, за 30 секунд — она слишком сложная.
Проблема: NAS на базе старого ПК с FreeNAS. Запущен пять лет назад. Никто не обновлял. Бэкапы не делаются. Доступ по SMB тормозит. Никто не знает, что там внутри.
Диагноз: классическое говно. Работает, но никто не знает как. Бэкапов нет. Обновлений нет. Документации нет.
Решение:
Результат: система стала прозрачной, обновляемой и поддерживаемой.
Проблема: умный дом на базе Home Assistant. Десятки интеграций, половина из которых не работает. Автоматизации написаны на YAML, который никто не понимает. Zigbee-сеть глючит. Обновления отключены, потому что «работает же».
Диагноз: говно в чистом виде. Работает, но никто не знает как. Обновлений нет. Документации нет. Поддержка невозможна.
Решение:
Результат: система стала поддерживаемой, обновляемой и документированной.
Проблема: самописный скрипт на Python для мониторинга серверов. Скрипт запускается по cron, шлёт уведомления на почту. Никто не знает, как он работает. Скрипт падает раз в неделю, и его приходится перезапускать вручную.
Диагноз: говно. Работает, но ненадёжно. Документации нет. Поддержка невозможна.
Решение:
Результат: система стала надёжной, документированной и поддерживаемой.
Иногда говна настолько много, что проще всё переделать с нуля. Как понять, что пора:
Стратегия перезапуска:
Пример: переезд с одного гипервизора на другой. Не переноси все виртуальные машины сразу. Начни с одной, протестируй, убедись, что всё работает, потом переноси остальные.
Говно не появляется само по себе. Оно — результат наших решений. Вот несколько правил, которые помогут не стать источником говна:
Говно — это не приговор. Это сигнал, что систему пора приводить в порядок. Не игнорируй его. Чисти регулярно. И тогда твоя инфраструктура будет работать как часы, а не как свалка технотреша.