chore(release): v0.2.0 — System TLS rationale + version bump + CHANGELOG
- System page: collapsible "Warum läuft TLS über Caddy?" explaining the single host-exposed TLS terminator (auto Let's Encrypt + auto-renew + wss for Reverb, decoupled from app updates) — answers the operator's question in the UI; Caddy stays. - Bump 0.1.1 -> 0.2.0 (cross-OS management, firewall + fail2ban control, command palette) + CHANGELOG entry. Pint clean; Codex review clean; R12 — all 9 routes HTTP 200, 0 console errors, TLS note renders. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>feat/v1-foundation v0.2.0
parent
2c533bf821
commit
4a4d107bfc
38
CHANGELOG.md
38
CHANGELOG.md
|
|
@ -13,6 +13,41 @@ getaggte Releases (Kanal `stable`, optional `beta`) — niemals Entwicklungs-Bui
|
|||
|
||||
_Keine offenen Änderungen — der nächste Stand wird hier gesammelt und als `vX.Y.Z` getaggt._
|
||||
|
||||
## [0.2.0] - 2026-06-13
|
||||
|
||||
Mehr-Betriebssystem-Verwaltung, echte Firewall- und fail2ban-Steuerung aus dem Dashboard sowie eine Tastatur-/Befehls-Bedienung.
|
||||
|
||||
### Hinzugefügt
|
||||
- **OS-Abstraktion**: Updates, Härtung und Firewall laufen jetzt über **apt, dnf und
|
||||
zypper** (Debian/Ubuntu, RHEL/Fedora/Rocky/Alma, openSUSE). Das Betriebssystem wird
|
||||
erkannt und auf der Server-Detailseite angezeigt (Paketverwaltung/Firewall). Arch
|
||||
und Alpine werden erkannt; nicht unterstützte Funktionen werden mit deutschem
|
||||
Hinweis sauber deaktiviert statt fehlzuschlagen.
|
||||
- **Firewall-Regeln (UFW)**: Regeln ansehen, hinzufügen und löschen samt
|
||||
Standard-Anzeige — mit Aussperr-Schutz (SSH-Regeln/-Port, deny ohne Port). firewalld
|
||||
wird nur angezeigt (Laufzeit aller aktiven Zonen inkl. Rich Rules); Regelverwaltung
|
||||
bleibt vorerst UFW.
|
||||
- **fail2ban-Status**: Jails mit Zählern, **gebannte IPs sehen und entsperren**,
|
||||
IP manuell sperren (R5-Dialog, Aussperr-Schutz für Loopback + eigenen Zugang) und
|
||||
**Whitelist (ignoreip)** verwalten.
|
||||
- **Befehls-Palette (Strg/⌘-K)** + Tastenkürzel: Schnell-Navigation (Leader „g“),
|
||||
Seitensuche („/“), Hilfe („?“).
|
||||
|
||||
### Geändert
|
||||
- System-Updates verwenden je Distribution den passenden Paketmanager
|
||||
(Audit-Aktion `system.package_upgrade`).
|
||||
- fail2ban-Tuning und -Whitelist liegen in getrennten Drop-ins, damit Änderungen sich
|
||||
nicht gegenseitig überschreiben; das frühere Einzel-Drop-in wird migriert.
|
||||
- Server-Detailseite zeigt erkanntes System, Paketverwaltung und Firewall-Werkzeug.
|
||||
- System-Seite erklärt jetzt, warum TLS über Caddy terminiert wird.
|
||||
|
||||
### Sicherheit
|
||||
- Firewall: race-freies Löschen per Regel-Spezifikation (keine Regelnummern),
|
||||
Whitelisting gegen Befehls-Injection, firewalld-Lockout-Schutz (Ports vor dem Start
|
||||
in der permanenten Konfiguration).
|
||||
- fail2ban: kanonischer (inet_pton) Schutz gegen das Sperren des eigenen Zugangs,
|
||||
ignoreip wird verbatim erhalten (inkl. Hostnames/Fortsetzungszeilen).
|
||||
|
||||
## [0.1.1] - 2026-06-13
|
||||
|
||||
Wartungs-Release: vollständige Code-Auditierung, Entfernung von totem Code und ein behobenes Open-Redirect. Keine funktionalen Änderungen für Nutzer.
|
||||
|
|
@ -79,6 +114,7 @@ Erste geschnittene Version — die komplette v1-Basis inklusive Server- und Pane
|
|||
- Release-/Versionierungsmodell: echte semantische Versionen + Git-Tags, Changelog
|
||||
pro Version, Kanäle `stable`/`beta` (kein nutzer-seitiges `dev`).
|
||||
|
||||
[Unreleased]: https://git.bave.dev/boban/clusev/compare/v0.1.1...HEAD
|
||||
[Unreleased]: https://git.bave.dev/boban/clusev/compare/v0.2.0...HEAD
|
||||
[0.2.0]: https://git.bave.dev/boban/clusev/compare/v0.1.1...v0.2.0
|
||||
[0.1.1]: https://git.bave.dev/boban/clusev/compare/v0.1.0...v0.1.1
|
||||
[0.1.0]: https://git.bave.dev/boban/clusev/releases/tag/v0.1.0
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
return [
|
||||
// First tagged release is v0.1.0 (semantic, not -dev). The live build hash
|
||||
// is resolved from .git at runtime (see App\Livewire\Versions\Index).
|
||||
'version' => '0.1.1',
|
||||
'version' => '0.2.0',
|
||||
|
||||
// Default user channel. Only 'stable' and 'beta' are ever offered to users.
|
||||
'channel' => 'stable',
|
||||
|
|
|
|||
|
|
@ -45,6 +45,20 @@
|
|||
</div>
|
||||
@endif
|
||||
|
||||
{{-- Architecture rationale: why TLS is terminated by Caddy (collapsible) --}}
|
||||
<div class="mb-4 rounded-md border border-line bg-inset p-3" x-data="{ open: false }">
|
||||
<button type="button" @click="open = ! open" class="flex w-full items-center gap-2 text-left">
|
||||
<x-icon name="shield" class="h-3.5 w-3.5 shrink-0 text-ink-3" />
|
||||
<span class="text-sm text-ink-2">Warum läuft TLS über Caddy?</span>
|
||||
<span class="ml-auto shrink-0 font-mono text-[10px] uppercase tracking-wider text-ink-4" x-text="open ? 'schließen' : 'mehr'"></span>
|
||||
</button>
|
||||
<div x-show="open" x-cloak x-transition class="mt-2.5 space-y-1.5 font-mono text-[11px] leading-relaxed text-ink-3">
|
||||
<p>Clusev nutzt <span class="text-ink-2">genau einen</span> nach außen offenen Dienst: Caddy. Es terminiert TLS, holt und erneuert das Let's-Encrypt-Zertifikat automatisch und leitet die Reverb-WebSockets (wss) über dieselbe Adresse — ohne Skript, Cronjob oder Reload-Hook.</p>
|
||||
<p>App und Reverb bleiben intern erreichbar (kein offener Port nach außen). Caddy ist ein eigener Container mit eigener Version, daher kann ein App-Update die TLS-Terminierung nie unterbrechen.</p>
|
||||
<p>Ein zusätzliches certbot + nginx wären <span class="text-ink-2">mehr</span> bewegliche Teile (eigene 443-Konfiguration, WebSocket-Upgrade, Renewal-Timer, Reload-Hook) — bei nur einer Domain kein Gewinn.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form wire:submit="saveDomain" class="space-y-4">
|
||||
<div class="grid gap-4 sm:grid-cols-2">
|
||||
<div>
|
||||
|
|
|
|||
Loading…
Reference in New Issue