Установка по SSH
Адрес, ключ, домен. Приложение проверяет готовность сервера, генерирует секреты, поднимает Umami, Postgres и Caddy в изолированной сети Docker и выпускает сертификат. Если первая установка сорвётся, сервер вернётся в исходное состояние.
Проверка, которая не оставляет следов
До установки приложение собирает факты о сервере: свободное место, занятые порты, спрашивает ли sudo пароль, жив ли демон Docker. На сервере не появляется ни одного файла — скрипт уходит на стандартный ввод, а не во временный каталог.
Аналитика, которая никуда не едет
Umami работает на сервере клиента и слушает только петлю. Приложение ходит к панели через SSH-туннель, и локальный порт наружу тоже не отдаётся. Данные посетителей не покидают машину клиента.
Агент, который говорит, пока вы спите
Он живёт на сервере клиента и следит за диском, памятью, процессором, сроками домена и сертификата. Письма и сообщения в Telegram уходят с этого же сервера — поэтому доходят и тогда, когда приложение закрыто.
Обновления, которые можно отменить
Перед обновлением стека снимается дамп базы и копия конфигов — до того, как что-то изменится. Если миграция не заладится, вернётся и то и другое. Бэкап — одна кнопка, удаление — тоже, и оно разведено на два разных действия.
Всё в одном окне
Сайты сгруппированы по серверам, дашборд по каждому, сводка по всем, состояние серверов, сроки доменов и сертификатов, открытые порты. Тридцать клиентов без тридцати вкладок.
Проверки, которые спрашивают то, что нужно
Внешняя проверка спрашивает то же, что и агент: отдаётся ли страница, есть ли на ней строка, не пусто ли поле JSON, происходит ли перенаправление. Пятый вид спрашивает, куда указывает имя, — это видно только снаружи. А сторож задач следит за тем, что не отвечает вовсе: бэкап или cron отчитывается на свой секретный адрес, и мы пишем вам, когда отчёта нет.
Окно в базу клиента
Добавьте read-only SQL-запрос на вкладке сайта — и он станет карточкой: числом, фразой или небольшой таблицей, любого размера и в любом порядке. Запрос идёт из приложения тем же туннелем, что и аналитика, — без phpMyAdmin и без SSH-консоли, — а ответ остаётся на этом экране: не сохраняется и никуда не уходит, даже к нам.
Почта домена — через собственный Cloudflare клиента
Включите почту для домена сайта и заведите адреса вроде support@, пересылающие на уже существующий ящик. Приложение читает DNS домена, готовит единственную строку, которую нужно добавить, если сайт уже отправляет письма, и зовёт API Cloudflare ключом, который остаётся на этом компьютере. Почта не проходит через нашу инфраструктуру — она идёт от Cloudflare прямо в выбранный ящик.