РазделРазработка
Разработка
make build # dist/monopanel
make check # gofmt + go vet + golangci-lint + тесты (≈2 с)
make web # Web UI в web/build (нужен node + pnpm)
make help # все целиПрогон всего набора занимает пару секунд, поэтому его дёшево запускать на каждое изменение.
| Команда | Что делает |
|---|---|
make test | юнит-тесты; вся логика панели проверяется через фейковый агент, без root и systemd |
make check | то же плюс gofmt, go vet и golangci-lint — то, что гоняет CI |
make test-race | детектор гонок (≈1 мин): очередь задач, SSE-брокер, кеш сертификатов |
make cover | покрытие по пакетам; make cover-html — отчёт в браузере |
make web-check | типы и разметка Web UI (svelte-check) |
scripts/check-templates.sh | скармливает сгенерированные конфиги настоящим nginx -t и apachectl -t |
make e2e | сценарий на живой панели: пользователь → сайт с пресетом → база → удаление |
make testbed-matrix | тот же сценарий на одиннадцати VM площадки (по одной на каждую ОС матрицы) параллельно, с откатом к чистому снимку; make testbed-migrate SRC= DST= — настоящий переезд аккаунта между двумя из них с проверкой |
Фейковый агент (internal/agent/agenttest) поднимает unix-сокет и отвечает на операции
привилегированного агента, записывая всё, что панель попыталась сделать. Тест видит
содержимое сгенерированного server-блока nginx и пула php-fpm и проверяет поведение
целиком: пресеты CMS, allow-list по IP, приостановку сайта, каскадное удаление
пользователя, проверку подписи обновления.
End-to-end гоняется против настоящей панели и убирает за собой всё, что создал:
make e2e HOST=<ssh-алиас> # токен берётся по ssh и отзывается после прогона
# или явно:
MONOPANEL_URL=https://panel:8443 MONOPANEL_TOKEN='…' make e2eCI на каждый push: тесты с детектором гонок и покрытием, линтер, проверка шаблонов
реальными nginx и Apache, сборка Web UI с проверкой типов, сборка бинарника под amd64
и arm64. E2E запускается вручную (workflow_dispatch) — ему нужен доступ к живому хосту.
Матрица ОС гоняется с рабочего места на площадке Proxmox
(docs/08-testbed.md): скрипты в scripts/testbed/, адрес хоста и
сеть — в git-игнорируемом .dev/testbed.env.
Структура
cmd/monopanel/ точка входа
internal/api/ HTTP API (huma + chi), SSE, UI, TLS, job-хендлеры
internal/agent/ привилегированный агент: ApplyConfigSet, EnsureUnixUser, Service, Pkg
internal/jobs/ очередь задач, воркеры, брокер событий
internal/store/ SQLite, миграции, модели
internal/osprofile/ различия Debian/RHEL
internal/render/ рендер шаблонов + golden-тесты
internal/updater/ поиск релиза, проверка подписи, установка пакета с откатом
internal/cli/ tui/ команды mp и TUI-меню
internal/client/ Go-клиент API (CLI, TUI, setup)
templates/ nginx/, apache/, php-fpm/, systemd/
web/ SvelteKit-приложение (build/ вшивается в бинарник)
web/static/monaco/ редактор VS Code (Monaco), урезанная сборка — см. его README
packaging/ nfpm.yaml, units, sysusers/tmpfiles, install.sh
scripts/release/ генерация ключа и подпись SHA256SUMS для релиза
scripts/testbed/ площадка: VM на Proxmox, bootstrap панели, прогон матрицы и переезда