Replies: 5 comments
|
Hi @rfx77, thanks for the question. This is an understandable point of confusion because there are a few different URLs involved, and they have similar names. The short answer is: your xySat servers do not need access to port 80 if they can reach the conductor directly on port 5522. The generated command using However, there is one important detail about the ports: 5522 is not a dedicated xySat WebSocket port. It is xyOps' built-in HTTP listener, and that same listener handles all of the following:
In other words, ordinary HTTP and The different URLsThere are three related concepts here:
The key point is that
How xyOps chooses the conductor hostnameBy default, xyOps uses the hostname of the conductor server as the hostname that xySat will use to connect back to it. If the conductor is running in Docker, this means the hostname of the container. It is therefore important that the conductor hostname is stable, resolves correctly from every worker server, and points to an address those workers can reach. For Docker, you can explicitly set this using the For example, you can set the container hostname directly with Docker: docker run \
--hostname "xyops.test.local" \
...Alternatively, you can override the hostname detected by xyOps using the environment: XYOPS_hostname="xyops.test.local"Normally you would only need one of these hostname mechanisms. The important result is that xyOps identifies itself using a hostname that all xySat workers can resolve and reach. There is one explicit override to this behavior: if you set a top-level What happens during installationWhen you run this command: curl -s "http://xyops.test.local:5522/api/app/satellite/install?t=TOKEN" | sudo shthe process is approximately:
So the HTTP requests during installation are expected. Port 5522 carries both the short-lived HTTP bootstrap requests and the long-lived WebSocket connection. The conductor does not need to initiate a new inbound connection to the worker. From a firewall perspective, the important rule is worker-to-conductor TCP access on the configured xyOps port. DNS for What I would use for your setupBased on your description, I would configure it like this:
If the generated install command already contains curl -fsSL "http://xyops.test.local:5522/api/app/satellite/install?t=NEW_TOKEN" | grep '^BASE_URL='It should report: BASE_URL="http://xyops.test.local:5522"If it unexpectedly reports port 80, that generally means the install request is being routed through a proxy, or the proxy is rewriting the About separating the web interface from xySatThere are two slightly different security goals here. If your goal is simply that xySat should not need to connect to port 80, then yes, that is already supported. Use port 5522 for the generated installer and the ongoing xySat connection, as described above. If your goal is that the worker network must be physically unable to request the web interface at all, while still using port 5522 for xySat, then a port-level firewall rule alone cannot provide that separation. The web interface, HTTP API, bootstrap endpoints, and WebSocket listener all share the same xyOps HTTP listener. A client that can reach port 5522 can technically make an HTTP request to For stricter isolation, you would need a reverse proxy or other application-aware network control in front of the worker-facing endpoint. For example, you could have:
The worker-facing proxy would need to support WebSocket upgrades as well as the HTTP endpoints xySat uses for installation, configuration, upgrades, packages, and job-related file transfers. I would be careful about allowing only the initial three bootstrap URLs, because that can make the first install succeed while breaking later upgrades or job features. If you introduce a special worker-facing hostname, you can set a top-level environment:
XYOPS_satellite__config__host: xyops-workers.test.local
XYOPS_satellite__config__port: "5522"
XYOPS_satellite__config__secure: "false"You only need this override if the workers should use a hostname different from the conductor's normal hostname. With your current direct For an Internet-facing or otherwise untrusted network, I would also strongly recommend using TLS. In a direct setup that normally means You can find some additional background in the Satellite section of the Self-Hosting guide, especially Overriding the Connect URL, and in Adding Servers. One final security note: the I hope this helps clarify some things. For the layout you described, port 80 can remain the human-facing entry point, while the xySat machines use port 5522 for both installation and their ongoing connection. I am working on the documentation and trying to make it more clear. It has evolved over many versions, and is a bit confusing in its current state. |
|
Excerpt from docker-compose.yaml ` So BASE_URL is always http://xxxxxxx.test.local in the script that i get with curl. even if the script comes from port 5522 This is what the add-server-dialog shows: So why das the installer use port 80? If you calculate the base-url within the curl-request to the installen than it shoult be 5522. As you can see below your grep command gives a url to port 80 and not 5522. No matter waht i try to do. BASE_URL in the downloaded script is always http port 80 it seems to be that Line 203 in c4152ed ignores the calculation of the base_url that Line 14 in c4152ed does |
|
Hi @rfx77, You are correct, and thank you for digging into the source and providing such a clear reproduction. I also owe you a correction: my previous reply missed the external-to-internal Docker port translation in your Compose setup. The Add Server dialog calculates its URL from satellite.config, so it correctly shows port 5522. However, the downloaded installer does not reuse that calculated endpoint. Because xyOps is listening on port 80 inside your container, that helper replaces the incoming external port 5522 with the internal listener port 80. Therefore:
So yes, this is a real bug in xyOps. It is not caused by Your xySat configuration using port 5522 is correct. The problem is specifically the bootstrap and upgrade script URL generation. Until I can get a fix out, one possible workaround is to keep the conductor's internal listener on 5522 and publish that same container port twice: environment:
XYOPS_WebServer__port: "5522"
ports:
- "80:5522"
- "5522:5522"
- "5523:5523"This keeps the human-facing endpoint on host port 80, while workers use host port 5522. Because the internal listener is also 5522, the generated installer will retain the correct port. Not sure if this will work for your exact case, but I just wanted to give you something to try while I work on a fix. It should be out later this week. One clarification from my earlier reply still applies: port 5522 is not a dedicated xySat-only listener. It exposes the same xyOps web interface, API, downloads, and WebSocket endpoints as port 80 in this arrangement. I will correct the installer and upgrade paths so they consistently use the configured worker-facing endpoint, and add regression coverage for Docker port translation. Thanks again for the excellent investigation and the precise line references. You found it. |
|
Thanks for the quick investigation. Currently i dont have a real issue and i can live with it. |

Uh oh!
There was an error while loading. Please reload this page.
Whe i install xySat via the generated curl link, the link always goes to port 5522:
curl -s "http://xyops.test.local:5522/api/app/satellite/install?t=fc42627f8b35221cfbc55494684c792cdfe78ec024399eacb7b2f5397d8949cd" | sudo shthis is fine. i opend ports 5522 on my firewall so that all xysat servers can communicate with xyops.
the problem is, that during install also the BASE_URL is required. This is on Port 80 in my setup.
For security reasons it would be better if the xySat only needs 5522 so that the webinterface can be split from the xySat WS communication.
Can i configure the now or is it required that the Webport is open during this install.
All reactions