Summary
This release replaces the external Watchtower Docker container with a native image update service built into FluxOS, adds environment variable support for benchmark paths on Arcane systems, exposes new benchmark metrics in the host info API, and fixes SEO-blocking robots.txt behavior.
Changes
Replace Watchtower with Native Image Update Service
The third-party containrrr/watchtower container that previously monitored and auto-updated application Docker images has been fully replaced by a new native imageUpdateService module integrated directly into FluxOS.
Why: Running Watchtower as a separate Docker container added an external dependency, offered limited control over update timing/rate-limiting, and couldn't leverage FluxOS internals like encrypted registry credentials or global operation state. A native service eliminates this dependency and provides
fine-grained control.
What changed:
- New file
ZelBack/src/services/imageUpdateService.js— A ~470-line service that:- Periodically checks all installed apps for Docker image updates (every 6 hours)
- Compares local container image digests against remote registry manifest digests
- Supports both single-container apps (spec v1–v3) and multi-component compose apps (v4+)
- Triggers soft redeploys when newer images are detected
- Implements rate-limit detection — aborts the check cycle if a registry returns 429
- Staggers checks with 5-second delays between apps and 2-minute cooldowns after redeploys
- Uses a randomized initial delay (10–30 minutes) to prevent synchronized registry pressure across the network
- Respects global operation locks (install/remove/redeploy in progress) to avoid conflicts
- Handles registry authentication via
registryCredentialHelperfor private repositories
- New method
fetchManifestDigestOnly()inZelBack/src/services/utils/imageVerifier.js— Performs lightweight HEAD requests to retrieveDocker-Content-Digestheaders without downloading full manifests, significantly reducing bandwidth for update checks ZelBack/src/services/serviceManager.js— Startup sequence updated to:- Remove any existing
flux_watchtowercontainer (graceful migration) - Start the native image update service after a 10-minute delay
- Remove any existing
- Removed
fluxService.installFluxWatchTower()— The ~18-line function that pulled and ran the Watchtower container is deleted fromZelBack/src/services/fluxService.jsalong with its export - Deleted
helpers/fluxwatchtower.sh— The shell script used to install Watchtower is no longer needed - New test suite
tests/unit/imageUpdateService.test.js— Comprehensive unit tests covering:- Watchtower container removal (5 scenarios)
- Local image digest retrieval (5 scenarios)
- Remote manifest digest retrieval (4 scenarios)
- Update detection for v1–v3 and v4+ apps (5 scenarios)
- Update triggering with operation lock checks (6 scenarios)
- Full update cycle workflow (4 scenarios)
- Service lifecycle start/stop (4 scenarios)
- Updated
tests/unit/fluxService.test.js— Removed tests for the deletedinstallFluxWatchTowerfunction
Benchmark Path Environment Variable Support
ZelBack/src/services/fluxService.js— ThebenchmarkDebug()andtailBenchmarkDebug()functions now respect theFLUXBENCH_PATHenvironment variable, falling back to the default~/.fluxbenchmarkpath when unset. This enables correct path resolution on Arcane systems where the benchmark
directory may be in a non-standard location.
Host Info API Enhancements
ZelBack/src/services/fluxNodeService.js— The host info response now conditionally includes theeps_singlethreadbenchmark field when available (nodes running benchmark v6.1.0+), providing single-threaded CPU performance data alongside the existing multi-coreepsmetric.docs/flux-node-service.md— Updated API documentation to reflect new benchmark fields (disk,diskwritespeed,eps_singlethread) and thedataCentergeolocation indicator.
SEO Fix: robots.txt Serving
homeServer.js— Removed the hardcoded/robots.txtroute that returnedDisallow: /for all user-agents, which was blocking search engines from indexing any pages. Theexpress.staticmiddleware now serves the actualrobots.txtfrom the CloudUI build output, allowing each deployment to control
its own crawling rules.
Version Bump
package.json— Version incremented from8.5.0to8.6.0
Test Plan
- Verify the native image update service starts correctly after the 10-minute delay on node boot
- Confirm any existing Watchtower container is automatically removed on upgrade
- Validate image update detection works for both single-container (v1–v3) and compose (v4+) apps
- Test rate-limit handling by verifying the service aborts gracefully on 429 responses
- Confirm
eps_singlethreadappears in host info responses on nodes with benchmark v6.1.0+ - Verify
FLUXBENCH_PATHenv variable is respected on Arcane systems - Check that robots.txt is served correctly from CloudUI static files
- Run unit test suite:
npm run test:zelback:unit