LibrePortal/scripts/cli/commands/app/cli_app_header.sh
librelad a28eed0729 fix(services): route per-service restart through the task system + CLI
The Services tab restart button POSTed to a backend endpoint that (a)
checked the app's compose path from INSIDE the webui container, where
the host's containers root isn't mounted — so every restart failed with
'Compose file not found' — and (b) queued a raw 'docker compose restart'
that the host task processor would run as the manager user, which can't
talk to the rootless daemon anyway. Errors surfaced via a bare alert().

Per-service restart now follows the exact shape of the whole-app verbs:

- CLI: 'libreportal app restart <app> [service]' — the optional service
  arg makes dockerRestartApp restart just that compose service, via
  dockerCommandRun (right user in rootless mode) from the app dir on the
  host, where the compose file actually lives. Service names validated
  against compose-legal characters before touching a shell line.
- WebUI: the button dispatches a 'service_restart' task action through
  the task router (mutations-via-tasks), runs in the background with the
  standard task toast + link — no page switch — and failures use the
  notification system instead of alert(). Because the task runs host-
  side, restarting the WebUI's own libreportal-service now works too.
- Backend: the mutating restart endpoint and its now-unused helpers are
  removed; service-routes.js is read-only surface (status + log tails).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
2026-06-12 23:26:40 +01:00

41 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# App Commands Header
# Shows available app commands and help information
cliShowAppHelp()
{
echo ""
echo "Available App Commands (* is required):"
echo ""
echo " libreportal app list [type*] - Display a list of applications"
echo " available - Show available apps to install"
echo " installed - Show installed apps"
echo ""
echo " libreportal app install [name*] [config] [--reset-network]"
echo " - Install / reinstall the specified app."
echo " On reinstall, IPs and ports are preserved by default."
echo " Pass --reset-network to re-randomize them."
echo " libreportal app uninstall [name*] - Uninstall the specified app"
echo ""
echo " libreportal app start [name*] - Start the specified app (Must be installed)"
echo " libreportal app stop [name*] - Stop the specified app (Must be installed)"
echo " libreportal app restart [name*] [service] - Restart the specified app, or just one of its"
echo " compose services when [service] is given"
echo ""
echo " libreportal app up [name*] - Docker-Compose up (Rebuild app)"
echo " libreportal app down [name*] - Docker-Compose up (Uninstall app)"
echo " libreportal app reload [name*] - Docker-Compose up & down (Reinstall app)"
echo ""
echo " libreportal app backup [name*] [password] - Backup the specified app (password optional)"
echo " libreportal app restore [name*] [file|--latest] [password] - Restore from local/remote, prefers local"
echo " libreportal app restore [name*] [local|remote1|remote2] [file] [password]"
echo " - Restore from a specific location"
echo " libreportal app status [name*] - Show status of specified app"
echo " libreportal app tool [name*] [tool*] [args]"
echo " - Run a per-app tool (Tools tab actions)."
echo " [args] is pipe-encoded: key=value|key=value"
echo " libreportal app tool list [name] - List available tools (all apps, or just [name])"
echo ""
}