Appearance
Install on Linux
Build-from-source only
There is no .deb, .rpm or container image. You build Nexus on the machine that will run it, and the result is not relocatable — it finds its Python runtime through a path baked in at build time. If you want a packaged, supported install today, use Windows.
Studio and Lens are Windows-only. A Linux install is headless; engineers connect to it from a Windows workstation.
Prerequisites
- A 64-bit Linux with GCC 13 or later.
- CMake 3.25+, Ninja, and vcpkg.
- A free-threaded CPython 3.14t build.
- Node.js, to build the web bundle.
1. Build
Nexus builds without the Studio toolchain, so a server does not need Qt:
bash
export RAYLUX_PYTHON_HOME=/opt/python3.14t
export VCPKG_ROOT=/opt/vcpkg
cmake -B build -S . \
-DRAYLUX_NEXUS_ONLY=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build --parallelBuild the operator runtime too, unless you want a Nexus instance with no screens:
bash
npm ci --prefix web
npm run build --prefix webThe install step looks for the web bundle when it runs, so the order of these two builds does not matter.
2. Install
bash
sudo cmake --install build --prefix /usr/local| Path | Contents |
|---|---|
/usr/local/bin/raylux-nexus | Nexus |
/usr/local/share/raylux/web/ | the operator runtime |
/usr/local/share/raylux/fonts/ | fonts embedded into report PDFs |
/usr/local/lib/systemd/system/raylux-nexus.service | the service unit |
/usr/local/lib/sysusers.d/raylux-nexus.conf | the raylux service account |
If the web bundle is missing the install warns and continues — a headless Nexus is a legitimate deployment.
3. Create the service account
bash
sudo systemd-sysusers
getent passwd raylux # confirm it exists4. Start it
bash
sudo systemctl daemon-reload
sudo systemctl enable --now raylux-nexus
systemctl status raylux-nexusThe unit creates /var/lib/raylux and /var/log/raylux with the right ownership on every start, so there is nothing to chown.
5. Check it
bash
curl http://localhost:8080/health # {"status":"ok"}
curl http://localhost:8080/health/ready # {"status":"ready"}Then continue to First run to create your administrator account.
Opening the firewall
Unlike the Windows installer, nothing opens ports for you.
bash
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reloadOperating it
bash
journalctl -u raylux-nexus -f # live log
sudo systemctl restart raylux-nexus
sudo systemctl stop raylux-nexusNexus also writes its own rotating log to /var/log/raylux/raylux_nexus.log.
Known limitations
- Not relocatable. The binary locates
libpython3.14t.sothrough a build-time path. Copying the install to another machine will not work. - Readiness is not reported to systemd. The unit is
Type=exec, so systemd considers the service started as soon as the process execs, not once it can serve. Gate on/health/readyinstead. - No configuration migration. Upgrading across a change in the configuration format is currently a manual edit.
- If you move Nexus to port 443, add
AmbientCapabilities=CAP_NET_BIND_SERVICEand the matchingCapabilityBoundingSetto the unit. Do not run it as root.