Преминете към основното съдържание

Среда за разработка

Предварителни изисквания​

ИнструментВерсияПредназначение
Go1.26+Бекенди, агент, конектор, споделени пакети
Node.js24 LTS + pnpm 10Уеб приложения, @entrosity/ui, този сайт с документация
Docker + ComposeскорошнаPostgres, MinIO, mailpit, Samba AD (тестове)
sqlc1.31 (фиксирана)Генериране на код за заявките; make gen го стартира с go run (нужен е C компилатор за cgo)
oapi-codegenv2 (фиксирана)Генериране на код за API; също се стартира от make gen
golangci-lintv2.13+Линтер (brew install golangci-lint)
WiX Toolsetv4 (само за 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 на приложението прави същото.

Издания за самообновяване локално​

  1. В entrosity-axis.backend make release-keygen отпечатва RMM_RELEASE_SIGNING_KEY=… (за .env за разработка) и RELEASE_PUBLIC_KEY=… (за изгражданията).
  2. Изградете с публичния ключ: RELEASE_PUBLIC_KEY=<public> make build в entrosity-axis-agent и entrosity-axis-connector.
  3. Публикувайте в портала (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, зададен и в двете среди).

Симулираните агенти също приемат обновления: те „инсталират“, като се свързват отново с новата версия.

Стартиране на агента срещу сървър за разработка​

  1. В портала създайте токен за регистриране на агент.
  2. Направете сървъра за разработка достъпен от виртуалната машина: адресът на host-gateway на виртуалната машина (http://10.0.2.2:8080 при NAT в UTM/QEMU) или ngrok http 8080 / Tailscale. Задайте RMM_PUBLIC_URL съответно, за да работят URL адресите за изтегляне.
  3. make build в entrosity-axis-agent (или make msi под Windows). За бърза итерация стартирайте изпълнимия файл в конзолата, вместо да инсталирате услугата:
    .\rmm-agent.exe run --server http://10.0.2.2:8080 --token <token>
  4. Устройството се появява в 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

Вижте Писане на документация.