Run a Web node on Linux
Run oore-web from the Linux web archive under systemd and update it from the web UI.
Use a Linux Web node when the browser ingress runs on a Linux host, for example a cloud VM in front of a private control plane.
The control plane still runs on a Mac. The Linux host runs only oore-web, which serves the web UI and proxies API requests to oored.
oore install does not manage Linux hosts. You install the archive and the systemd unit once. After that, oore-web update and the web UI update the Web node in place.
What you need
- A Linux host on
x86_64orarm64with systemd. ssh-keygenfrom OpenSSH.oore-web updateuses it to verify signed release metadata.- A protected network path from the host to the control plane, such as a private overlay network.
- A ready control plane that uses Identity provider or Trusted Proxy access.
- For Trusted Proxy access, the backend proof file and the upstream proof file described in Trusted Proxy.
1. Install the archive
Create a service account and an install root that it owns:
sudo useradd --system --home-dir /opt/oore-web --shell /usr/sbin/nologin oore-web
sudo install -d -o oore-web -g oore-web -m 0750 /opt/oore-webDownload oore-web_<version>_linux_x86_64.tar.gz (or _linux_arm64) and oore_<version>_checksums.txt from the release. Verify the archive, then extract it as the service account:
sha256sum --ignore-missing -c oore_<version>_checksums.txt
sudo -u oore-web tar -xzf oore-web_<version>_linux_x86_64.tar.gz -C /opt/oore-webThe service account must own the install root. The web UI update replaces bin/oore-web and web-dist as that account.
Store each proof in a file that only the service account can read:
sudo install -d -o root -g oore-web -m 0750 /etc/oore-web
sudo install -o oore-web -g oore-web -m 0400 backend-proof /etc/oore-web/backend-proof
sudo install -o oore-web -g oore-web -m 0400 upstream-proof /etc/oore-web/upstream-proof2. Install the systemd unit
Save this unit as /etc/systemd/system/oore-web.service. Replace the backend URL with the control plane’s address on the protected network:
[Unit]
Description=Oore web node
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=oore-web
Group=oore-web
Environment=OORE_INSTALL_ROOT=/opt/oore-web
ExecStart=/opt/oore-web/bin/oore-web serve \
--listen 127.0.0.1:4173 \
--backend-url http://100.64.10.20:8787 \
--backend-transport-protected \
--trusted-proxy-secret-file /etc/oore-web/backend-proof \
--upstream-trusted-proxy-secret-file /etc/oore-web/upstream-proof
Restart=on-failure
RestartSec=2
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetOmit both proof options for Identity provider access.
The unit must be named oore-web.service, must run oore-web directly, and must use Restart=on-failure or Restart=always. After an update, oore-web exits with status 75 and relies on systemd to start the new release.
Start the service:
sudo systemctl daemon-reload
sudo systemctl enable --now oore-webKeep the listener on loopback. Terminate TLS and authenticate users at the ingress proxy on the same host, then forward to 127.0.0.1:4173.
A user unit in ~/.config/systemd/user also works when lingering is on for that account (loginctl enable-linger <user>). Without lingering, the unit stops when the account logs out, so Oore does not offer updates from the web UI.
3. Verify the Web node
Check the frontend and the control plane through it:
/opt/oore-web/bin/oore-web status --url http://127.0.0.1:4173A healthy Web node prints Frontend: ok and Backend: ok, each with its
version and channel, and a Ready: line with database=true migrations=true encryption=true. The command exits with status 1 when either
check fails.
Then confirm the service and the browser path:
- Run
systemctl status oore-web. The unit isactive (running). - Open the public HTTPS URL in a browser and sign in.
- As the instance owner, open Settings > General. Under Runtime, the Frontend row shows the Web node’s version and channel.
Update the Web node
From the web UI, select Update frontend. oore-web downloads and verifies the release, replaces its files, and exits so systemd restarts it.
From a shell, run the update as the service account, then restart the unit:
sudo -u oore-web OORE_INSTALL_ROOT=/opt/oore-web /opt/oore-web/bin/oore-web update
sudo systemctl restart oore-weboore-web update warns when it cannot find a suitable oore-web.service unit.
Change the release channel
oore-web update stays on the channel the Web node was installed from. To move the Web node to another channel, for example to follow a control plane that moved from stable to alpha, name the channel and confirm the switch:
sudo -u oore-web OORE_INSTALL_ROOT=/opt/oore-web /opt/oore-web/bin/oore-web update --channel alpha --switch-channel
sudo systemctl restart oore-weboore-web records the new release and channel, so later updates follow it. Update Oore in the web UI also moves the frontend to the backend’s channel.
A switch never downgrades. If the target channel’s latest release is older than the installed version, the update stops without changes.
Run oore-web status from step 3 and confirm that the frontend reports the new version and channel.
Troubleshooting
oore-web status reports Frontend: failed
oore-web is not running, or --url points somewhere else. Check
systemctl status oore-web and journalctl -u oore-web, and keep the URL on
the --listen address from the unit.
oore-web status reports a backend liveness or readiness failure
The Web node cannot reach oored, or oored is not ready. Check the
--backend-url address in the unit, the protected network path to the control
plane, and oore status on the control plane. A Ready: line with a false
value names the failing check.
The status says the response did not pass through oore-web
--url points at the control plane or the ingress proxy instead of
oore-web. Use the loopback address from --listen.
Update frontend stays disabled
The Frontend row under Runtime shows the reason. Common reasons are a unit with another name, a unit without a restart policy, a user unit without lingering, and an oore-web process started from a shell instead of by systemd.
An update fails
If the update fails, Oore keeps the previous release and shows the failure after the next restart. The full output is in /opt/oore-web/logs/oore-web-update.log.
Oore says only the instance owner can manage updates
If Oore says that only the instance owner can manage updates, read the reason it gives. Behind a Trusted Proxy, oore-web forwards the identity header only when the upstream proxy also sends the upstream proof. Without --upstream-trusted-proxy-secret-file, it strips the header and the control plane does not recognize the session.
The Web node runs in a container or under pm2
Containers and process managers such as pm2 are not supported for updates from the web UI. Replace the container image or archive instead.
Next step
Monitor Oore and include the Web node in your upgrade plan.