Инсталиране
Предварителни изисквания
- Linux хост с Docker Engine 24+ и плъгина compose.
- Три DNS имена, сочещи към хоста (записи
A/AAAA):PLATFORM_DOMAIN, напримерhub.example.com: Entrosity Hub (влизане) на/, Axis на/axis(портал, API, агенти), документацията на/docs;RMM_DOMAIN, напримерrmm.example.com: само API за агентите, конекторите и скриптовете, които са регистрирани към него (инсталация отпреди Hub); браузърите се пренасочват към името на Hub;RMM_FILES_DOMAIN, напримерfiles.rmm.example.com: изтегляния и качвания.
- Портове 80 и 443, отворени от интернет (ACME HTTP-01, агенти, браузъри).
- SMTP акаунт за поканите и смяната на забравени пароли в Hub и за имейлите с аларми от Axis.
Стъпки
1. Изтегляне на файловете
sudo git clone https://github.com/entrosity/entrosity-infra.git /opt/entrosity
cd /opt/entrosity/deploy
2. Създаване на deploy/.env
Създайте deploy/.env с права 600 и го попълнете. Генерирайте всяка тайна
(secret) с openssl rand -base64 32.
Започнете от шаблона: cp deploy/.env.prod.example deploy/.env. Той
съдържа стойностите по-долу; всички са задължителни, с изключение на блока
с незадължителните настройки.
# Names and certificates
PLATFORM_DOMAIN=hub.example.com # Entrosity Hub; Axis at /axis, the docs at /docs
RMM_DOMAIN=rmm.example.com # API for agents enrolled against it; browsers go to the Hub
# PLATFORM_OLD_DOMAINS=portal.example.com # earlier Hub names (set by platform-cutover.sh move)
RMM_FILES_DOMAIN=files.rmm.example.com
# Database
POSTGRES_PASSWORD=<random> # owner "rmm": migrations and backups
RMM_APP_DATABASE_PASSWORD=<random> # "rmm_app": what the backends use
# Object storage
MINIO_ROOT_USER=rmm
MINIO_ROOT_PASSWORD=<random>
# Secrets (keep a copy of this file somewhere safe!)
RMM_JWT_SECRET=<random, 32+ bytes>
RMM_MASTER_KEY=<exactly 32 bytes, base64>
RMM_RELEASE_SIGNING_KEY=<from make release-keygen>
RMM_RELEASE_TOKEN=<random, 32+ characters>
# Mail
RMM_SMTP_HOST=smtp.example.com
RMM_SMTP_PORT=587
RMM_SMTP_PASS=<password>
# Entrosity Hub (sign-in for all Entrosity products; mails through RMM_SMTP_*)
PLATFORM_APP_DATABASE_PASSWORD=<random> # "platform_app": what the Hub uses
PLATFORM_JWT_SIGNING_KEY=<random> # Ed25519 seed (32 bytes, base64): signs every Hub token
PLATFORM_MASTER_KEY=<random> # exactly 32 bytes, base64: TOTP seeds, queued e-mails
PLATFORM_PRODUCT_TOKEN_RMM=<random> # 32+ characters: Axis's access to the Hub's internal API
# [email protected] # default: RMM_SMTP_FROM
# Optional
# RMM_VERSION=1.0.0 # image tag (set by upgrade.sh / deploy.sh)
# PG_SHARED_BUFFERS=1GB PG_EFFECTIVE_CACHE_SIZE=3GB PG_WORK_MEM=16MB
# PG_MAINTENANCE_WORK_MEM=256MB PG_MAX_CONNECTIONS=200
# PG_ARCHIVE_MODE=on PG_ARCHIVE_COMMAND=... # point-in-time recovery
# RMM_BACKEND_MEMORY=2g RMM_BACKEND_GOMEMLIMIT=1400MiB PLATFORM_MEMORY=512m
# RMM_BACKUP_DIR=./backups RMM_BACKUP_KEEP_DAYS=14
# RMM_BACKUP_S3_ENDPOINT= RMM_BACKUP_S3_BUCKET= RMM_BACKUP_S3_ACCESS_KEY= RMM_BACKUP_S3_SECRET_KEY=
Бекендът чете целия файл (env_file: .env); compose извежда от
стойностите по-горе RMM_PUBLIC_URL и RMM_PORTAL_URL
(https://$PLATFORM_DOMAIN/axis), RMM_CORS_ORIGINS, настройките
RMM_PLATFORM_*, настройките на Hub, настройките за S3 и URL адресите на
базите данни. Потребителите влизат на https://$PLATFORM_DOMAIN/ и отварят
Axis на https://$PLATFORM_DOMAIN/axis/; новите агенти и конектори се
регистрират със SERVER_URL=https://$PLATFORM_DOMAIN/axis. Всичко останало
е описано в Справочника за конфигурацията.
.envRMM_MASTER_KEY криптира съхраняваните тайни на Axis (пароли за AD,
имейли в опашката), а PLATFORM_MASTER_KEY – тези на Hub (TOTP seed
стойности, имейли в опашката). Резервно копие не може да бъде декриптирано
без ключовете, с които е създадено.
При RMM_ENV=prod (задава се от compose) бекендът отказва примерните тайни
за разработка от deploy/.env.example.
3. Стартиране на стека
docker compose -f docker-compose.prod.yml --env-file .env up -d
Първо се изпълнява migrate; platform-db-init създава базата данни
platform на Hub, а platform-migrate – нейната схема. Hub (platform) и
бекендите стартират, след като схемите им са актуални, а web – след като
поне един бекенд премине проверката на състоянието. Caddy получава
сертификатите при първата заявка.
4. Създаване на първия администратор
Първият администратор е администратор на платформата в Entrosity Hub, което го прави глобален администратор в Axis:
docker compose -f docker-compose.prod.yml --env-file .env run --rm platform \
bootstrap-admin --email [email protected] --password-stdin
Въведете паролата (12+ знака) и натиснете Enter. Това работи само докато не
съществува администратор на платформата. След това отворете
https://hub.example.com, влезте, настройте двуфакторна автентикация в
страницата Account и създайте първата организация с разрешен
Entrosity Axis (Администриране на платформата):
тя се появява в Axis като тенант в рамките на минута. Отворете Axis от
списъка с продукти или на https://hub.example.com/axis/.
5. Стартиране при зареждане на системата
Unit файлът на systemd стартира compose от /opt/entrosity:
sudo cp /opt/entrosity/deploy/systemd/rmm.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now rmm
6. Публикуване на агента и конектора
Агентите се инсталират от най-новото публикувано издание в канала stable. Публикувайте такова, преди да създавате токени за регистриране:
- оставете това на release workflow-ите на
entrosity-axis-agentиentrosity-axis-connector: задайте променливите на хранилището (repository)RMM_API_URLиRELEASE_PUBLISH_ENABLED=trueи тайнитеRMM_RELEASE_TOKEN(тази на сървъра) иRELEASE_PUBLIC_KEY(публичната половина наRMM_RELEASE_SIGNING_KEY); или - качете MSI файловете в Admin → Agent releases; или
- в изтеглено копие на
entrosity-axis.backend:go run ./cmd/publish-agent --product agent --file rmm-agent.msi --version 1.0.0 --channel stable.
Вижте Издания на агента.
7. Хостване на App Installer за winget (по избор)
Устройствата без winget го инсталират от файлове, хоствани от сървъра.
Качете .msixbundle файла на App Installer и зависимостите му – файловете
.appx (VCLibs, UI.Xaml) – в bucket-а под releases/winget/, например с
MinIO клиента в контейнера minio-init.
8. Резервни копия и наблюдение
Настройте нощното резервно копие и, по избор, наблюдението.
Лабораторна инсталация без публичен DNS
Задайте PLATFORM_DOMAIN=localhost, RMM_DOMAIN=rmm.localhost и
RMM_FILES_DOMAIN=files.localhost. Тогава Caddy издава сертификати от
собствения си сертифициращ орган (CA). Агентите трябва да имат доверие в
този CA:
docker compose -f docker-compose.prod.yml cp web:/data/caddy/pki/authorities/local/root.crt .
Инсталирайте root.crt в Trusted Root Certification Authorities на
тестовите машини.