Moving Entrosity Hub
Entrosity Hub and Entrosity Axis share one host name: the Hub at /,
Axis at /axis, the documentation at /docs (PLATFORM_DOMAIN). Moving
them to another name is one scripted step on the host. Agents and
connectors are not affected: every earlier name keeps serving Axis's API
for the devices enrolled against it, and sends browsers to the new name.
History
Sign-in moved from Axis to the Hub in September 2026, in three steps:
- Hub sign-in. Axis used to sign users in itself at
https://manage.entrosity.com(the portal under/manage). The Hub was started next to it athttps://portal.entrosity.com, Axis's users, tenants and roles were copied there withplatform-server import-rmm, and Axis switched to the Hub's tokens, served athttps://portal.entrosity.com/manage.manage.entrosity.comkept the API for enrolled agents and connectors and redirected browsers. - Local sign-in removed. Migration
0013_drop_local_authremoved passwords, sessions, two-factor secrets and invitations from Axis's database (Data model). Going back to local sign-in now means restoring a backup taken before it. - New addresses. Axis moved from
/manageto/axis(the Hub's migration0002_axis_path), and the Hub tohub.entrosity.comwith themovestep below.
The stages used for the first step (hub, import, switch,
redirect, rollback) are gone from the script. import-rmm still
exists in platform-server, but it needs an Axis database from before
migration 0013.
Until hub.entrosity.com has a DNS record, production serves the Hub on
https://portal.entrosity.com with Axis at
https://portal.entrosity.com/axis; the move below completes the switch.
Before you start
- DNS: an
Arecord for the new name (for examplehub.entrosity.com) pointing at the host (93.123.16.234), in theentrosity.comzone at GoDaddy. It may be proxied (Cloudflare) or not; the script only checks that the name resolves on the host. Caddy gets the certificate on the first request (HTTP-01 on port 80), so the record must reach the host. - Tell users: everyone signs in again after the move, at the new address (the Hub's session cookie belongs to a host name). Passwords, authenticators and roles are unchanged.
- A backup is taken by the script; keep a copy of
deploy/.envas well.
Move
Run deploy/scripts/platform-cutover.sh move hub.entrosity.com (and
status) on the host, in /opt/entrosity/deploy.
The move to hub.entrosity.com was run, before production was deployed
from entrosity-infra, with the manual workflow platform-cutover of
entrosity/RMM (.github/workflows/platform-cutover.yml), which ran the
script over the deploy workflow's SSH key and never overlapped a deploy.
That workflow is disabled now; entrosity-infra keeps a copy in
.github/workflows-disabled/:
# historical, in entrosity/RMM
gh workflow run platform-cutover.yml -f stage=status
gh workflow run platform-cutover.yml -f stage=move -f domain=hub.entrosity.com
move:
- checks that the name resolves (
getent hosts) and stops otherwise; - takes a backup (
backup.sh); - sets
PLATFORM_DOMAINindeploy/.envto the new name and adds the previous one toPLATFORM_OLD_DOMAINS(removing the new name from that list, so moving back works the same way); - removes settings that compose now derives or that are no longer used:
RMM_PUBLIC_URL,RMM_PORTAL_URL,RMM_CORS_ORIGINS,RMM_AUTH_MODE,RMM_EDGE,COMPOSE_PROFILES. Compose setsRMM_PUBLIC_URLandRMM_PORTAL_URLtohttps://<PLATFORM_DOMAIN>/axis(Configuration); - restarts the Hub, the backends (same number of replicas) and Caddy;
- waits for
https://<domain>/api/platform/v1/healthzandhttps://<domain>/axis/api/v1/healthz(which also proves the certificate).
status prints PLATFORM_DOMAIN, PLATFORM_OLD_DOMAINS, RMM_DOMAIN,
RMM_VERSION and the services.
To go back, move to the previous name the same way.
Verify
curl -fsS https://hub.entrosity.com/api/platform/v1/healthz
curl -fsS https://hub.entrosity.com/axis/api/v1/healthz
curl -so /dev/null -w '%{http_code}\n' https://hub.entrosity.com/api/platform/internal/v1/jwks.json # 404
curl -so /dev/null -w '%{http_code} %{redirect_url}\n' https://portal.entrosity.com/manage/ # 308 to hub.entrosity.com/axis/
curl -fsS https://portal.entrosity.com/manage/api/v1/healthz # enrolled agents
curl -fsS https://manage.entrosity.com/api/v1/healthz # enrolled agents
Then, as a user: sign in at https://hub.entrosity.com, open
Entrosity Axis, open a tenant and run a script on a test device. In
Grafana, rmm_ws_connections stays where it was (agents keep their
connections) and rmm_platform_sync_age_seconds stays below 60.
After the move, point the variables of the workflows that still name the
old host at the new one where wanted (DEPLOY_URL, RMM_API_URL,
CI workflows); the old hosts
keep serving the API, so nothing breaks in between.
What old addresses keep working
Caddy serves three kinds of sites (TLS, deploy/Caddyfile):
| Address | Browsers | Agents, connectors, scripts |
|---|---|---|
https://hub.entrosity.com/ (PLATFORM_DOMAIN) | The Hub; Axis at /axis; the docs at /docs | New enrollments use https://hub.entrosity.com/axis (/axis/api/…) |
https://hub.entrosity.com/manage/… | 308 to /axis/… | /manage/api/* is still served |
https://portal.entrosity.com/… (PLATFORM_OLD_DOMAINS) | 308 to the same path on the Hub's name (/manage/… to /axis/…) | /axis/api/* and /manage/api/* are still served |
https://manage.entrosity.com/… (RMM_DOMAIN) | 308 to https://hub.entrosity.com/axis/…; /docs to the Hub's docs | /api/* and /manage/api/* are still served |
Agents and connectors keep the server URL they enrolled with (a redirect to another host would drop their credentials), so these API paths stay as long as such devices exist. Reinstalling with an enrollment token moves a device to the current address. Bookmarks and e-mailed links to any old page land on the matching page of the new address.