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

Инсталиране

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

  • 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. Той съдържа стойностите по-долу; всички са задължителни, с изключение на блока с незадължителните настройки.

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. Всичко останало е описано в Справочника за конфигурацията.

Опасност
Пазете копие на .env

RMM_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 на тестовите машини.