РазделРазработка
ДокументацияУстройство

Разработка

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 e2e

CI на каждый 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 панели, прогон матрицы и переезда
Исходник страницы на GitHub