23-panel — Веб-панель управления (mitdevd)

Опциональная веб-панель контроля сервера: HTTPS-интерфейс с двухфакторным входом, который показывает состояние сервера, служб, кластеров и приватной сети. Сам модуль лишь проверяет предпосылки и указывает команду установки. ☐ опциональный.

Зачем нужен

Панель mitdevd — это control-plane (управляющий узел) с веб-интерфейсом: браузерная приборная панель, где сведено состояние сервера в одном месте. Вместо того чтобы ходить по SSH и запускать mitdev doctor, вы открываете страницу и видите загрузку CPU/RAM/диска, аптайм, какие службы запущены, состояние кластеров (PostgreSQL, Redis) и пиров приватной сети. Данные обновляются автоматически.

Вход защищён паролем и вторым фактором (кодом из приложения-аутентификатора), а сам интерфейс по умолчанию слушает только localhost — то есть безопасен даже на сервере с белым IP.

Важная деталь: сам модуль 23-panel почти ничего не устанавливает. Тяжёлую работу (скачивание бинарника, создание базы, сертификатов, служб и администратора) делает отдельная команда mitdev web install. Модуль нужен, чтобы панель числилась в списке компонентов установки, но ставилась осознанно и отдельно.

Когда включать и когда не нужен

Зависимости и требования

Панель требует (проверяется при установке и модулем, и командой mitdev web install):

Если PostgreSQL или Redis не установлены, модуль выведет предупреждение, а mitdev web install откажется работать до их установки.

Что именно делает

Модуль 23-panel (module_install)

Пошагово — модуль намеренно минимален:

  1. Проверяет наличие psql (PostgreSQL); если нет — предупреждает, что панель его требует.
  2. Проверяет наличие Redis (redis-server/redis-cli); если нет — предупреждает.
  3. Выводит подсказку: «Панель устанавливается отдельной командой: mitdev web install».
  4. Отмечает модуль выполненным (state_mark).

То есть модуль ничего не скачивает и не запускает — только сигнализирует о готовности предпосылок.

Команда mitdev web install (фактическая установка)

Именно она разворачивает панель:

  1. Скачивает бинарник mitdevd под архитектуру в /usr/local/bin/mitdevd.
  2. Генерирует мастер-ключ /etc/mitdev/panel.key (openssl rand -hex 32, права 600) — им шифруются TOTP-секреты в базе.
  3. Создаёт в PostgreSQL роль mitdev_panel со сгенерированным паролем и базу mitdev_panel.
  4. Пишет конфиг /etc/mitdev/panel.env (права 600) с DSN базы, адресом Redis и параметрами слушателей.
  5. Выпускает сертификаты проекта (mitdevd ca init): собственный удостоверяющий центр (CA), серверные и клиентские сертификаты — панель общается со своим агентом по mTLS (взаимная проверка сертификатов с обеих сторон).
  6. Ставит две службы systemd и запускает их: mitdev-agent (агент, собирает состояние узла) и mitdev-panel (сам веб-интерфейс).
  7. Создаёт первого администратора (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 отметка выполнения модуля

Учётные данные

Вход в панель = имя + пароль + одноразовый код из приложения-аутентификатора (или один из 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 и сертификатов

Как переопределить настройки

  1. Отредактируйте /etc/mitdev/panel.env (например, чтобы сменить порт слушателя) и перезапустите службу:
    sudo systemctl restart mitdev-panel
    
  2. Менять 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), поэтому браузер предупредит о недоверенном сертификате — это ожидаемо для внутренней панели, подтвердите переход.

Войти

Что можно в панели

Панель показывает (в режиме только чтения, с автообновлением):

Кнопка «Выйти» завершает сессию.

Добавить агента на другой сервер

На дополнительном узле можно поднять только агента (без панели), перенеся туда конфиг и сертификаты, и выполнить:

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

Типовые задачи

Частые ошибки

Симптом Причина Что сделать
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).

Остаётся на клиенте:

Откат и удаление

См. также