23-panel — Веб-панель управления (mitdevd)
Опциональная веб-панель контроля сервера: HTTPS-интерфейс с двухфакторным входом, который показывает состояние сервера, служб, кластеров и приватной сети. Сам модуль лишь проверяет предпосылки и указывает команду установки. ☐ опциональный.
Зачем нужен
Панель mitdevd — это control-plane (управляющий узел) с веб-интерфейсом: браузерная приборная панель, где сведено состояние сервера в одном месте. Вместо того чтобы ходить по SSH и запускать mitdev doctor, вы открываете страницу и видите загрузку CPU/RAM/диска, аптайм, какие службы запущены, состояние кластеров (PostgreSQL, Redis) и пиров приватной сети. Данные обновляются автоматически.
Вход защищён паролем и вторым фактором (кодом из приложения-аутентификатора), а сам интерфейс по умолчанию слушает только localhost — то есть безопасен даже на сервере с белым IP.
Важная деталь: сам модуль 23-panel почти ничего не устанавливает. Тяжёлую работу (скачивание бинарника, создание базы, сертификатов, служб и администратора) делает отдельная команда mitdev web install. Модуль нужен, чтобы панель числилась в списке компонентов установки, но ставилась осознанно и отдельно.
Когда включать и когда не нужен
- Включайте, если хотите видеть состояние сервера в браузере и готовы поставить панель командой
mitdev web install. - Не нужен, если вам достаточно
mitdev doctor/mitdev reportв терминале. - Панель не является пультом для выполнения команд на сервере — это интерфейс только для просмотра (мониторинг). Управлять сервером по-прежнему нужно через SSH и утилиту
mitdev.
Зависимости и требования
Панель требует (проверяется при установке и модулем, и командой mitdev web install):
- PostgreSQL (модуль postgresql) — хранит администраторов панели, их пароли и настройки 2FA;
- Redis (модуль redis) — хранит сессии входа и ограничение частоты попыток;
- доступ в интернет — бинарник
mitdevdскачивается с сервера установки (https://mitdev.top); curlиopenssl(есть после модуля system).
Если PostgreSQL или Redis не установлены, модуль выведет предупреждение, а mitdev web install откажется работать до их установки.
Что именно делает
Модуль 23-panel (module_install)
Пошагово — модуль намеренно минимален:
- Проверяет наличие
psql(PostgreSQL); если нет — предупреждает, что панель его требует. - Проверяет наличие Redis (
redis-server/redis-cli); если нет — предупреждает. - Выводит подсказку: «Панель устанавливается отдельной командой:
mitdev web install». - Отмечает модуль выполненным (
state_mark).
То есть модуль ничего не скачивает и не запускает — только сигнализирует о готовности предпосылок.
Команда mitdev web install (фактическая установка)
Именно она разворачивает панель:
- Скачивает бинарник
mitdevdпод архитектуру в/usr/local/bin/mitdevd. - Генерирует мастер-ключ
/etc/mitdev/panel.key(openssl rand -hex 32, права600) — им шифруются TOTP-секреты в базе. - Создаёт в PostgreSQL роль
mitdev_panelсо сгенерированным паролем и базуmitdev_panel. - Пишет конфиг
/etc/mitdev/panel.env(права600) с DSN базы, адресом Redis и параметрами слушателей. - Выпускает сертификаты проекта (
mitdevd ca init): собственный удостоверяющий центр (CA), серверные и клиентские сертификаты — панель общается со своим агентом по mTLS (взаимная проверка сертификатов с обеих сторон). - Ставит две службы systemd и запускает их:
mitdev-agent(агент, собирает состояние узла) иmitdev-panel(сам веб-интерфейс). - Создаёт первого администратора (
mitdevd bootstrap, интерактивно): спрашивает имя и пароль, генерирует секрет 2FA и показывает QR-код для Google Authenticator, а также одноразовые backup-коды.
Файлы, службы и порты
| Объект | Значение | Права / примечание |
|---|---|---|
| Служба systemd | mitdev-panel |
веб-интерфейс (control-plane) |
| Служба systemd | mitdev-agent |
агент сбора состояния узла |
Порт 127.0.0.1:9443 |
HTTPS UI | только localhost, наружу не публикуется |
Порт 127.0.0.1:9444 |
агент (mTLS) | внутренний, только localhost |
/usr/local/bin/mitdevd |
бинарник панели/агента | 755 |
/etc/mitdev/panel.env |
конфиг: DSN, Redis, слушатели | 600 |
/etc/mitdev/panel.key |
мастер-ключ шифрования TOTP-секретов | 600 |
/etc/mitdev/panel/ca/ |
CA и сертификаты (panel/agent/client) | каталог проекта |
/etc/systemd/system/mitdev-panel.service |
юнит панели | — |
/etc/systemd/system/mitdev-agent.service |
юнит агента | — |
База mitdev_panel (PostgreSQL) |
администраторы, 2FA, backup-коды | роль mitdev_panel |
/var/lib/mitdev/state/panel.done |
отметка выполнения модуля | — |
Учётные данные
- Пароль роли PostgreSQL
mitdev_panelсохраняется в/root/.mitdev-credentials(600):panel: db_password=<сгенерированный пароль> - Мастер-ключ
/etc/mitdev/panel.key(600) — шифрует секреты второго фактора в базе. - Логин администратора панели задаёте вы сами при
mitdev web install(шаг bootstrap): имя, пароль (не короче 8 символов) и 2FA. Пароль администратора хранится в базе в виде хеша argon2id — в открытом виде его нигде нет.
Вход в панель = имя + пароль + одноразовый код из приложения-аутентификатора (или один из backup-кодов). Сессии живут 8 часов и хранятся в Redis; после 5 неудачных попыток в минуту вход временно блокируется.
Настройка
Отдельных переменных в config/defaults.conf у модуля нет. Параметры панели задаются в /etc/mitdev/panel.env (заполняется автоматически при mitdev web install):
Параметр (panel.env) |
По умолчанию | На что влияет |
|---|---|---|
PANEL_LISTEN |
127.0.0.1:9443 |
адрес и порт веб-интерфейса |
AGENT_BIND |
127.0.0.1:9444 |
адрес и порт агента (mTLS) |
DB_DSN |
postgres://mitdev_panel:…@127.0.0.1:5432/mitdev_panel |
подключение к PostgreSQL (обязателен) |
REDIS_ADDR |
127.0.0.1:6379 |
адрес Redis для сессий |
KEY_FILE |
/etc/mitdev/panel.key |
мастер-ключ шифрования TOTP |
CA_DIR |
/etc/mitdev/panel/ca |
каталог CA и сертификатов |
Как переопределить настройки
- Отредактируйте
/etc/mitdev/panel.env(например, чтобы сменить порт слушателя) и перезапустите службу:sudo systemctl restart mitdev-panel - Менять
PANEL_LISTENна0.0.0.0:…не рекомендуется — панель задумана как localhost-сервис за SSH-туннелем.
Как пользоваться
Открыть панель
UI слушает 127.0.0.1:9443 (HTTPS) и наружу не выставлен. Откройте его со своего компьютера через SSH-туннель:
ssh -L 9443:127.0.0.1:9443 <пользователь>@<сервер>
Затем в браузере перейдите на https://localhost:9443. Сертификат самоподписанный (свой CA), поэтому браузер предупредит о недоверенном сертификате — это ожидаемо для внутренней панели, подтвердите переход.
Войти
- Имя — то, что вы задали при
mitdev web install. - Пароль — заданный тогда же.
- Код — шестизначный код из Google Authenticator (или другого TOTP-приложения), куда вы отсканировали QR при установке. Если аутентификатор недоступен — используйте один из сохранённых одноразовых backup-кодов.
Что можно в панели
Панель показывает (в режиме только чтения, с автообновлением):
- Сервер: ОС, ядро, CPU, использование RAM и диска, аптайм, основной IP;
- Службы: список ключевых служб и их состояние (активна/остановлена);
- Кластеры: состояние PostgreSQL и Redis (установлена/активна);
- Приватная сеть: имя сети и список пиров с задержкой (если сеть настроена).
Кнопка «Выйти» завершает сессию.
Добавить агента на другой сервер
На дополнительном узле можно поднять только агента (без панели), перенеся туда конфиг и сертификаты, и выполнить:
sudo mitdev web agent-install
Проверить статус служб панели
sudo mitdev web status
Проверка, что всё работает
module_verify считает модуль успешным, если служба mitdev-panel активна (systemctl is-active mitdev-panel). До выполнения mitdev web install службы нет — это нормально, пока панель не установлена.
Ручные проверки:
# службы панели и агента
sudo mitdev web status
systemctl status mitdev-panel mitdev-agent
# UI слушает localhost:9443
sudo ss -ltnp | grep 9443
# журнал панели при проблемах
journalctl -u mitdev-panel -n 50
Типовые задачи
- Установить панель (после PostgreSQL и Redis):
sudo mitdev web install - Открыть панель со своего компьютера:
ssh -L 9443:127.0.0.1:9443 <пользователь>@<сервер> # затем https://localhost:9443 - Создать ещё одного администратора / пересоздать 2FA:
sudo mitdevd bootstrap --config /etc/mitdev/panel.env - Перезапустить панель после правки конфига:
sudo systemctl restart mitdev-panel - Поставить только агента на соседнем сервере:
sudo mitdev web agent-install
Частые ошибки
| Симптом | Причина | Что сделать |
|---|---|---|
mitdev web install отказывается ставить |
не установлены PostgreSQL или Redis | поставьте модули postgresql и redis, затем повторите |
| Браузер ругается на сертификат | панель использует собственный (самоподписанный) CA | это ожидаемо для внутренней панели — подтвердите переход |
https://localhost:9443 не открывается |
нет SSH-туннеля или панель слушает только localhost | поднимите туннель ssh -L 9443:127.0.0.1:9443 … |
| Панель не пускает даже с верным паролем | неверный или просроченный код 2FA, рассинхрон времени | сверьте время на телефоне и сервере (timedatectl); используйте backup-код |
| «слишком много попыток» | сработал лимит 5 попыток в минуту | подождите минуту и попробуйте снова |
| Панель запущена, но данные не грузятся | не работает агент (mitdev-agent) |
systemctl status mitdev-agent; смотрите journalctl -u mitdev-agent |
Безопасность и продакшен
Модуль и mitdev web install уже закрывают: UI и агент слушают только 127.0.0.1 (не публично), вход защищён паролем (argon2id) и обязательным вторым фактором (TOTP), сессии в Redis с TTL 8 часов, ограничение частоты входов, связь панель↔агент по mTLS, секрет-файлы (panel.env, panel.key) с правами 600, юниты с усилением (NoNewPrivileges, ProtectHome, PrivateTmp).
Остаётся на клиенте:
- Не выставляйте
PANEL_LISTENнаружу. Доступ к панели — только через SSH-туннель; так белый IP сервера не открывает интерфейс всему интернету. - Храните backup-коды 2FA в надёжном месте — без телефона и без кодов вход в панель восстановить нельзя (только пересоздать администратора через
bootstrap). - Берегите
/etc/mitdev/panel.key: его утрата означает невозможность расшифровать TOTP-секреты существующих администраторов.
Откат и удаление
- Авто-откат при падении (
module_rollback): останавливает и отключает службыmitdev-panelиmitdev-agent. mitdev remove panel: останавливает службы и удаляет их юниты. Бинарник, конфиг, ключ и база сохраняются.mitdev remove panel --purge: то же плюс удаление/etc/mitdev/panel,/usr/local/bin/mitdevd,/etc/mitdev/panel.envи/etc/mitdev/panel.key. Базаmitdev_panelв PostgreSQL при этом не трогается — удалите её вручную при необходимости.
См. также
- ../SITE.md — про сайт и веб-часть проекта.
- ../COMMANDS.md — команды
mitdev web,mitdev doctor,mitdev report,mitdev remove. - ../SECURITY.md — модель безопасности mitdev.
- ../MODULES.md — краткий обзор всех модулей.