feat(hub): implement native in-app container updates

Introduces the ability for registered users to trigger Beszel container updates directly from the web interface.

- Added `app_update` logic to the hub to pull the latest image from GHCR and recreate the container.
- Implemented `/api/beszel/update` and `/api/beszel/update/apply` endpoints.
- Added a new `AppUpdatePanel` in the settings UI to check for and apply updates.
- Added update notifications in the navbar and settings.
- Updated `docker-compose.yml` and `README.md` to include the required Docker socket mount for update functionality.
- Added a new public status page route that bypasses authentication.
- Refactored several TypeScript interfaces to replace `any` with `unknown` or specific types for better type safety.
- Updated localization files to support new update-related strings.
This commit is contained in:
Tomas Dvorak
2026-04-30 14:38:13 +02:00
parent 67254f89a9
commit 7727be166b
63 changed files with 582907 additions and 636 deletions
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr ""
#: src/components/systems-table/systems-table.tsx
msgid "Add System"
msgstr ""
#~ msgid "Add System"
#~ msgstr ""
#: src/components/routes/settings/notifications.tsx
msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Historique des alertes"
msgid "Alerts"
msgstr "Alertes"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})"
msgstr ""
@@ -224,9 +222,14 @@ msgstr "Tous les conteneurs"
#: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems"
msgstr "Tous les systèmes"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?"
msgstr "Êtes-vous sûr de vouloir supprimer {name} ?"
@@ -338,6 +341,10 @@ msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'auth
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel utilise <0>Shoutrrr</0> pour s'intégrer aux services de notification populaires."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx
msgid "Binary"
msgstr "Binaire"
@@ -385,6 +392,7 @@ msgstr "Peut arrêter"
#: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Vérifiez {email} pour un lien de réinitialisation."
msgid "Check logs for more details."
msgstr "Vérifiez les journaux pour plus de détails."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx
msgid "Check Now"
msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Cliquez pour copier"
#: src/components/systems-table/systems-table.tsx
msgid "Columns"
msgstr ""
#~ msgid "Columns"
#~ msgstr ""
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times"
#~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx
msgid "Restarts"
msgstr "Redémarrages"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Paramètres SMTP"
#: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By"
#~ msgstr "Trier par"
msgid "Sort By"
msgstr "Trier par"
#: src/components/routes/domain.tsx
#~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Paramètres SMTP"
msgid "Start Time"
msgstr "Heure de début"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Joignable ({upSystemsLength})"
msgid "Update"
msgstr "Mettre à jour"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Voir vos 200 dernières alertes."
#: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields"
#~ msgstr "Colonnes visibles"
msgid "Visible Fields"
msgstr "Colonnes visibles"
#: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx