As the title is 2 parts, so are the concepts.
"Configure multiple devices" is part 2, and relies on part 1 "Client Luci" (off device hosted Luci). Part 1 is the primary focus, and part 2 is not intended to be implemented in the same fashion as many are used to. (OpenWisp, etc)
I have been tracking multiple forum posts and external info regarding managing multiple OpenWRT devices for awhile now.
Beating a dead horse you say?....maybe not.
While certainly there are 3rd party options out there (openwisp, Ansible, openwrt-configurator,Dusk, cucumberwifi, etc), they are usually heavy, often bloated, and just one more link in the chain to train on, update, manage, or break. It seems potentially, the more efficient answer may be right under our noses.
Have Luci hosted locally on the controller machine, where horsepower and a modern browser are already the requirement.
With luci-1 that wasnβt realistic, however now that Luci2 is now almost all client side JS anyway, moving Luci off device seems more logical.
Tunneling the JSON-RPC stream to the local browser, from the device, means less device resource usage than directly serving the luci pages that could be run (and most are already β aka JS-XHR rendered) on the host. That would also mean that uhttpd may not even be needed on the device, further reducing resource requirements.
Some Advantages:
OpenWRT team controlled, consistent & Familiar UI β no adding layers of security risk / learning curve / bloat
Allow smaller on device images (aka:more devices now usable) while keeping Luci available for consistent configurations
Same UI whether on-device Luci or controller hosted Luci
Maintains Cross platform Luci capability
Maintains language localization for devices while decreasing image size
Configure/manage single or multiple devices (batch style) from one host. (This will eventually have to be a whole separate post, but as it requires off device Luci, it is started here.)
Access to local package repos/configs/images/documentation or other content on host machine.
Provide browser proxy internet connection: package installs / device provisioning for devices without direct internet connection.
(ref github.com/httptoolkit/mockttp#readme)
Lower attack vectors:
single RPC tunnel instead of multi http connections (beacons)
add optional keyfile auth for tunneling in leu of password
Could use SPA with reverse tunnel instead of always open HTTS port
possible single hardened Luci-only controller on lan or node
lan/node devices need no internet connection if desired β
(host repos or proxy thru host browser)
Future Luci apps/modules can extend fleet management and other heavier lift functionality you would not usually attempt on the lower end hardware.
And yes, if desired, you could still run Openwisp or the likes on the luci controller, or any other web hosted content/apps for that matter.
The concepts here are about leveraging the small, light, and fast Luci to reach higher utility and user efficiency, while minimizing device image size, resource requirements, and code changes.
Its also about consistency, and extending an already mature framework in active development, with a large app/module contributor base.
Hopefully we can get the absolutely amazing Devs here to chime in on what is needed to make this possible.