Знаете это чувство, когда заходишь на собственный сервер, а там — сто один активный юнит, четыре базы данных, три веб-домена и восемь проектов, каждый из которых живёт своей жизнью? И ты такой: "Так. А что у меня тут вообще происходит?"
Вот с этого вопроса всё и началось.
Сначала это был один bash-скрипт. Потом два. Потом появились Python-помощники для баз данных, для systemd-юнитов, для поиска связей между проектами. Потом bash-меню. Потом ещё меню. Потом меню для меню. И в какой-то момент я обнаружил, что написал мета-проект: систему, которая описывает все остальные проекты на сервере, чтобы я — и не только я — мог бы быстро понять, что где лежит и что с чем связано.
Работает это так. Запускаешь главный скрипт, выбираешь проект, жмёшь "полный recon" — и получаешь подробный отчёт: все systemd-юниты проекта, все таблицы его баз данных с колонками и связями, все переменные окружения (только имена — секреты остаются секретами), конфиги веб-сервера, версии всего, что установлено, и, конечно, содержимое всех файлов проекта. Полторы тысячи строк текста. Всё честно, всё по делу.
Самое интересное — автоматика. Новый проект появился в папке? Система сама его зарегистрирует, сама создаст для него скрипт разведки, сама впишет в реестр. Юнит systemd появился? Система сама определит, к какому проекту он относится, и запомнит. Проект читает чужой конфиг? Система найдёт это глазами — буквально grep-ом по Python-файлам — и запишет связь в специальное поле. А потом при следующем запуске уже не ищет, а берёт готовое. Кеш, чтоб его.
Есть, конечно, места, где без человека не обойтись. Например, если проект на Go или PHP, а в конфиге проекта указано "искать только Python" — тут уж извините, система честно скажет "не нашла" и подождёт, пока вы добавите расширение руками. Мы это, кстати, уже поправили — теперь Go и PHP по умолчанию в списке. На будущее.
Ещё есть такая штука: некоторые вещи система умеет находить сама, а некоторые — только если ей подсказать. Это нормально. Полная автономность — это миф. Даже у лучших DevOps-инженеров есть файл с ручными исключениями.
Отдельная радость — документация. Вернее, её отсутствие. Точнее, её наличие, но в виде одного большого файла с правилами для тех, кто (или что) будет работать с этой системой дальше. Правила простые: сначала читай, потом делай; не ломай то, что работает; бэкапь то, что меняешь; если что-то пошло не так — покажи вывод целиком, а не "я всё исправил, но не скажу как".
В итоге получился не просто набор скриптов, а система, которая делает ровно то, для чего создавалась: даёт мне — и любому, кто откроет этот сервер впервые — быструю и понятную картину происходящего. Без магии, без зависимостей, без облаков. Только bash, Python и немного здорового параноидального отношения к собственному хозяйству.