Среда за разработка
Предварителни изисквания
| Инструмент | Версия | Предназначение |
|---|---|---|
| Go | 1.26+ | Бекенди, агент, конектор, споделени пакети |
| Node.js | 24 LTS + pnpm 10 | Уеб приложения, @entrosity/ui, този сайт с документация |
| Docker + Compose | скорошна | Postgres, MinIO, mailpit, Samba AD (тестове) |
| sqlc | 1.31 (фиксирана) | Генериране на код за заявките; make gen го стартира с go run (нужен е C компилатор за cgo) |
| oapi-codegen | v2 (фиксирана) | Генериране на код за API; също се стартира от make gen |
| golangci-lint | v2.13+ | Линтер (brew install golangci-lint) |
| WiX Toolset | v4 (само за Windows) | Изграждане на MSI |
| Виртуална машина с Windows 10/11 | – | Реално стартиране на агента и конектора (UTM, Parallels, VMware) |
Клониране на хранилищата
Кодът се намира в отделни хранилища. Клонирайте тези, които ви трябват, едно до друго в една папка; скриптовете и Makefile файловете се откриват взаимно там:
mkdir entrosity && cd entrosity
for r in infra shared-go ui axis.backend axis.frontend axis-agent axis-connector hub.backend hub.frontend docs; do
gh repo clone "entrosity/entrosity-$r"
done
export GOPRIVATE=github.com/entrosity # private Go modules
gh auth setup-git # Git credentials for go get
echo "//npm.pkg.github.com/:_authToken=<token with read:packages>" >> ~/.npmrc
Всяко Go хранилище е един модул: go build ./... и go test ./...
работят в корена му, а make help показва неговите цели.
Първо стартиране
Потребителите влизат през Entrosity Hub, затова стекът за разработка стартира Hub до Axis: четири процеса, всеки в собствен терминал.
cd entrosity-infra
cp deploy/.env.example deploy/.env # edit secrets if needed
make dev-up # postgres, minio (+ bucket), mailpit
docker compose -f deploy/docker-compose.yml exec postgres createdb -U rmm platform # the Hub's database (once)
cd ../entrosity-hub.backend
make migrate # the Hub's migrations
make bootstrap-admin [email protected] # type the password (12+ chars), Enter
make dev # the Hub's API on :8090 (internal API :8091)
cd ../entrosity-axis.backend
make migrate # Axis: river + app migrations
make dev # Axis's API on :8080 (curl localhost:8080/healthz)
cd ../entrosity-axis.frontend && pnpm install && pnpm dev # Axis's Vite server on :5173 (base /axis/)
cd ../entrosity-hub.frontend && pnpm install && pnpm dev # the Hub's web app on :5175
Бекендите четат ../entrosity-infra/deploy/.env (може да се замени с
ENV_FILE=…).
Стекът за разработка използва PostgreSQL 18. Том postgres-data, останал от
стека с PostgreSQL 16 на монорепото, няма да стартира: премахнете го
(docker compose -f deploy/docker-compose.yml down -v в entrosity-infra)
и изпълнете миграциите отново.
Отворете http://localhost:5175: сървърът за разработка на Hub
обслужва един произход (origin) като в продукция — Hub на /, неговото
API на /api/platform (към :8090), Axis на /axis (към Vite сървъра на
Axis) и API на Axis на /axis/api (към :8080, с премахнат префикс, както
прави Caddy). Влезте като администратора, създайте организация с
активиран Entrosity Axis и отворете Axis от списъка с продукти; Axis
открива организацията в рамките на своя интервал на синхронизация.
deploy/.env.example свързва двете: RMM_PLATFORM_URL=http://localhost:5175
(издателят на токени), RMM_PLATFORM_INTERNAL_URL=http://localhost:8091,
RMM_PLATFORM_TOKEN, равен на записа rmm в PLATFORM_PRODUCT_TOKENS,
и RMM_PORTAL_URL=http://localhost:5175/axis. Имейлите (поканите и
нулиранията на пароли от Hub, алармите от Axis) пристигат в mailpit на
http://localhost:8025.
Неинтерактивно създаване на администратор (в entrosity-hub.backend):
go run ./cmd/server bootstrap-admin --email [email protected] --password-stdin <<<'long passphrase'
Всяка променлива е обяснена в справочника за конфигурацията.
Защита на ниво ред при разработка
RLS се прилага и при разработка. Пулът се свързва като собственика rmm,
превключва към rmm_app и задава обхвата от контекста преди всяко
използване на връзка (Многотенантност). За
ad-hoc SQL от името на приложението: SET ROLE rmm_app; SET app.tenant_id = '<uuid>';.
Пакети и обектно хранилище
В режим на разработка бекендът създава bucket-а при стартиране. Порталът
качва файловете на пакетите директно в MinIO чрез предварително подписан
(presigned) PUT, така че крайната точка (endpoint) на MinIO трябва да е
достъпна от браузъра (MinIO от compose приема всеки произход). Задайте
RMM_WINGET_SOURCE_URL=off, когато работите офлайн.
Промяна на споделен код
@entrosity/ui: вentrosity-uiизпълнетеpnpm build && pnpm pack, след което в приложениеpnpm add ../entrosity-ui/entrosity-ui-<version>.tgz, за да го изпробвате (не правете къмит на това). Издава се чрез поставяне на таг вentrosity-ui; версиите в приложенията се вдигат автоматично.entrosity-shared-go:go work init . ../entrosity-shared-goв потребителя на модула (файлът е игнориран от git). Издава се чрез поставяне на таг, след коетоgo get github.com/entrosity/[email protected]във всеки потребител.- API договор: променете
api/openapi.yamlв бекенда и изпълнетеmake gen; в приложението —OPENAPI_SPEC=../entrosity-axis.backend/api/openapi.yaml pnpm fetch:api && pnpm gen:api(или…hub…). След като промяната в бекенда стигне доmain, работният потокopenapi-bumpна приложението прави същото.
Издания за самообновяване локално
- В
entrosity-axis.backendmake release-keygenотпечатваRMM_RELEASE_SIGNING_KEY=…(за.envза разработка) иRELEASE_PUBLIC_KEY=…(за изгражданията). - Изградете с публичния ключ:
RELEASE_PUBLIC_KEY=<public> make buildвentrosity-axis-agentиentrosity-axis-connector. - Публикувайте в портала (Admin → Agent releases) или в
entrosity-axis.backendсmake publish-release api=http://localhost:8080 file=../entrosity-axis-agent/dist/rmm-agent.msi version=… [product=connector] [channel=beta] [rollout=20](сRMM_RELEASE_TOKEN, зададен и в двете среди).
Симулираните агенти също приемат обновления: те „инсталират“, като се свързват отново с новата версия.
Стартиране на агента срещу сървър за разработка
- В портала създайте токен за регистриране на агент.
- Направете сървъра за разработка достъпен от виртуалната машина: адресът
на host-gateway на виртуалната машина (
http://10.0.2.2:8080при NAT в UTM/QEMU) илиngrok http 8080/ Tailscale. ЗадайтеRMM_PUBLIC_URLсъответно, за да работят URL адресите за изтегляне. make buildвentrosity-axis-agent(илиmake msiпод Windows). За бърза итерация стартирайте изпълнимия файл в конзолата, вместо да инсталирате услугата:.\rmm-agent.exe run --server http://10.0.2.2:8080 --token <token>- Устройството се появява в Devices до няколко секунди. Журнали:
%ProgramData%\RMM\logs\agent.log.
Симулирани агенти (без нужда от Windows)
В entrosity-axis.backend:
make sim token=<enrollment token> count=200
go run ./cmd/simagent --help
Фалшивите агенти се регистрират с уникални идентичности, изпращат сигнали
за активност (heartbeat), изпращат готови инвентарни данни и изпълняват
задачи с фалшиви резултати след 1–5 s. Флаговете включват
--failure-rate, --job-min, --job-max, --heartbeat,
--heartbeat-jitter, --prefix, --offset, --ramp и
--inventory-size. Регистрирането е с ограничение на честотата на
заявките за всеки IP адрес; инструментът прави повторен опит при 429 или
можете да увеличите RMM_ENROLL_RATE_PER_MINUTE.
Стартиране на конектора
LDAP частта работи под macOS и Linux срещу тестовия домейн на Samba AD
(в entrosity-axis-connector):
docker compose -f test/samba/docker-compose.yml up -d --wait samba # rmm.test, LDAPS on :10636
docker compose -f test/samba/docker-compose.yml exec -T samba bash /seed.sh # 50 computers in 4 OUs
# portal: Active Directory → Download connector → copy the token
RMM_CONNECTOR_DATA_DIR=/tmp/rmm-connector go run ./cmd/rmm-connector run \
--server http://localhost:8080 --token <connector token>
В съветника използвайте хост 127.0.0.1, порт 10636, LDAPS с Skip
certificate verification, базов DN DC=rmm,DC=test, bind
CN=svc-rmm,CN=Users,DC=rmm,DC=test / Svc-Pa55word!.
Инсталирането чрез push изисква реални Windows цели с активиран SMB
(ADMIN$) или WinRM и push акаунт, който е локален администратор там. Без
обектно хранилище задайте RMM_AGENT_MSI_URL към достъпен MSI на агента.
make simconnector token=… [computers=200] в entrosity-axis.backend
стартира симулиран конектор с генерирана директория (без LDAP, без
Windows).
Сайт с документацията
В entrosity-docs:
pnpm install
pnpm start # http://localhost:3000, live reload
pnpm build # static site in build/; fails on broken links
Вижте Писане на документация.