v2.4.21 – v2.4.35 — 2026-04-21¶
15 Releases an einem Tag — gruppiert nach Funktionsbereich.
Extensions & Marketplace¶
- Update-Flow für Extensions (v2.4.22): Marketplace zeigt "Update verfügbar"-Badge wenn die installierte Version von der Upstream-Version abweicht. In-Place-Update mit Backup/Rollback bei Health-Check-Fail —
extension_settingsund derenabled-Flag bleiben erhalten, neue Manifest-Settings werden mit Default befüllt. - Git-Deploy als vollwertige Marketplace-Extension (v2.4.25 + v2.4.26): aus dem Core entfernt und als eigenständige Extension neu released — SQLite-State, Webhook-Receiver für GitHub/GitLab/Gitea (HMAC-validiert), Auto-Deploy on Push, Rollback auf vorherige Commits, Pre-Deploy-Commands (composer/npm/yarn — Whitelist), 15 Sprachen, Pro-Repo-Webhook-URL + rotierbares Secret.
- Manifest-Sanitizer (v2.4.21): Frisch installierte Extensions deren Manifest noch den alten
/run/netcell/-Socket-Pfad enthält werden automatisch beim Entpacken auf/run/enconf/umgeschrieben. Schützt vor Health-Check-Fails durch stale Upstream-Tarballs. - Extension-Permissions akzeptieren Integer-Limits (v2.4.29): Package-Editor speichert jetzt auch
max_git_reposund ähnliche Extension-Limits in derextension_permissionsJSONB, nicht nurperm_*-Booleans.
SSL & TLS¶
- Reissue-Button für ALLE Cert-Typen (v2.4.33 + v2.4.35): Im SSL-Dashboard funktioniert "Reissue" jetzt auch für Mail- und Panel-Certs (nicht-Site-bound). Neuer Agent-Endpoint
POST /api/v1/ssl/force-renewruftcertbot renew --force-renewal --cert-name <domain>— Postfix/Dovecot/nginx werden automatisch via Deploy-Hook neu geladen. - TLS-Health-Probe ehrlicher (v2.4.34): Mail-Certs (z.B.
customer-mail.example.com) wurden fälschlich als "Falsches Cert" gemeldet, weil die Probe Port 443 abfragte — dort liefert aber das Default-Vhost-Cert. Probe wird für Server-level Certs jetzt mit Status "Übersprungen" markiert statt False-Positive. - Google-Ads-Reject-Schutz (v2.4.27 + v2.4.28): nginx- und Apache-Vhost-Templates strippen jetzt unsichtbare Unicode-Steuerzeichen (Bidi-Overrides U+202C, Zero-Width-Joiner, BOM) aus dem
$request_uri. Verhindert dass Google Ads die Domain als URL-spoofed markiert wenn ein Suchergebnis-Link einen solchen Char trägt. - /ssl mobile-optimiert (v2.4.33): Page-Header-Search nimmt auf Mobile volle Breite, TLS-Health-Header stackt vertikal, beide Tabellen scrollen horizontal statt überzulaufen.
Domain & Site Robustness¶
- Domain-Namen-Validierung beim Erstellen (v2.4.23 + v2.4.24):
isDomainValid()wird jetzt increateDomain,createSitesowie Alias-Admin-/Customer-Create aufgerufen — verhindert dass Garbage-Names wiefoo..comin die DB landen und beim nächsten nginx-Reload kaputt gehen. - Alias-Delete räumt Schatten-Domain-Row mit auf (v2.4.23): Beim Alias-Erstellen wird eine synthetische
Domain-Row angelegt damit der Alias in den SSL/Domain-Listen erscheint. Delete entfernte sie bisher nicht — jetzt wird sie scoped nach(name, customer_id)mit gelöscht. - DNS-Patch-Fehler geloggt statt verworfen (v2.4.23):
applyAliasundapplySubdomainignorierten den Return-Value vonDNSPatchRecords. Jetzt WARN-Log mit Hinweis auf den nachfolgenden ACME-Preflight-Skip.
System & Operations¶
- Apache im Repair-System sichtbar (v2.4.30): Eigener
RepairApacheVhosts-Reconciler im Admin → Repair, plus Orphan-Detection für stale/etc/apache2/sites-available/*.conf-Dateien (eigener Agent-EndpointPOST /api/v1/system/apache-orphans). Cleanup-Action im Repair-Report mit Ownership-Guard. - OPcache zeigt LIVE-FPM-Daten (v2.4.31): Status-View im System-Tab fragte bisher den CLI-Kontext ab — der ist immer kalt. Agent nutzt jetzt
cgi-fcgizum Shared-FPM-Socket und liest die echten Pool-Stats. Fallback auf CLI wenn kein Shared-Socket existiert.libfcgi-binwurde Agent-Dependency. - PHP-FPM-Service-Failure-Email-Storms gestoppt (v2.4.31): Zweiter Orphan-Pool-Sweep direkt nach
RunFPMMigrationin der Hardening-Migration — fängt Leftover-Pool-Configs die unter Race-Bedingungen den Shared-FPM-Restart kollidieren ließen. - OPcache-Version-Dropdown dynamisch (v2.4.32): Frontend liest installierte PHP-Versionen vom Agent (Glob auf
/etc/php/*/fpm/php-fpm.conf) statt einer hardcoded['8.1','8.2','8.3','8.4']-Liste — zeigt jetzt PHP 8.5 an wo es installiert ist und blendet nicht-installierte aus.
Bugfixes (User-Reports)¶
- Subscription-Detail "Speicherplatz 0/5120 MB" (v2.4.29):
usedwar als Placeholder auf 0 hardcoded, dazu fehltedisk_usage_mbim API-Response. Beides verdrahtet — zeigt jetzt den echten Verbrauch (z.B. 2724 MB / 5120 MB). - Git-Deploy "Neues Repository"-Modal crashte (v2.4.29): "n.map is not a function" — der Sites-API-Endpoint liefert ein paginated Envelope
{data: {data: [], total, page}}, der Fetcher las nurr.data.data. Akzeptiert jetzt beide Shapes defensiv. max_git_repos-Limit wurde beim Speichern verworfen (v2.4.29): Package-Update-Handler akzeptierte im Extension-Fallback nurperm_*-Booleans, keinemax_*-Integer. Jetzt mixed-typed JSONB;HasExtensionPermissionist robust gegen non-bool-Werte; neueGetExtensionLimit-Hilfsfunktion zum Auslesen.