Debian
c7b98f196e
feat(dashboard): Operations-Dashboard mit Live-Health/Resources/Audit/HAProxy
...
Vorher: Dashboard war Counts + statische Cards. Jetzt operativer
Überblick — was läuft, was klemmt, was wurde gerade geändert.
Backend (4 neue Endpoints):
* GET /api/v1/system/services — systemctl is-active für 8 services
(edgeguard-api, scheduler, haproxy, nftables, unbound, chrony,
squid, postgresql). Inklusive ActiveEnterTimestamp.
* GET /api/v1/system/resources — /proc/loadavg, meminfo, statfs(/),
nf_conntrack count+max, uptime.
* GET /api/v1/audit/recent?limit=N — letzte audit_log entries.
audit-Repo bekommt ListRecent + Entry struct.
* GET /api/v1/haproxy/stats — parsed haproxy 'show stat' CSV vom
/run/haproxy/admin.sock (postinst addet edgeguard zu haproxy-
group für socket-read; haproxy-group exists nach apt install).
Frontend Dashboard rewrite:
* PageHeader + KPI-Strip (6 tiles, wie zuvor) — bleibt.
* Resources-Strip: Load (1/5/15) + Mem-Progress + Disk-Progress +
Conntrack-Progress + Uptime.
* Service-Health-Grid: 8 Karten mit StatusDot + state.
* Recent-Activity-Card (audit-log): action-Tag + actor + subject +
relative time.
* HAProxy-Backends-Card: backend/server + UP/DOWN-Tag + sessions +
bytes_in/out + last_change_age.
* WireGuard live (handshake-age, traffic) — bleibt aus früherem
Stand.
* Cluster + Firewall + SSL + Routing Cards — bleiben.
* Polling 10s für services/resources/haproxy, 15s für audit.
Plus: postinst usermod -a -G haproxy edgeguard für admin.sock
read-permission.
Version 1.0.43.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-11 07:46:39 +02:00
Debian
ca03e69637
feat: Network/IP-Verwaltung + Mailguard-Design-Übernahme
...
Backend:
* Migration 0009_networks: network_interfaces (ethernet|vlan|bond|
bridge|wireguard, role wan|lan|dmz|mgmt|cluster, parent + vlan_id
für VLANs) + ip_addresses (interface_id FK, address+prefix, is_vip
+ vip_priority für Cluster-Failover-VIPs).
* Repos services/networkifs + services/ipaddresses + Models +
Handler /api/v1/network-interfaces (CRUD + /:id/ip-addresses)
und /api/v1/ip-addresses (CRUD).
* /api/v1/system/interfaces refactored auf Go-natives net.Interfaces()
statt `ip -j addr show` shell-out — die systemd-Sandbox blockt
AF_NETLINK auch für Go's runtime, deswegen edgeguard-api.service
RestrictAddressFamilies um AF_NETLINK ergänzt. Output-Shape
bleibt identisch (ifindex, ifname, flags[], mtu, link_type,
address, addr_info[]) — Frontend muss nicht angepasst werden.
Frontend:
* Networks-Page (/networks): "System-discovered Interfaces"
read-only Tags-Card oben, deklarierte Interfaces unten als
Tabelle mit Modal-CRUD; Type-Switch zeigt parent+vlan_id-Felder
bei type=vlan; Role-Tags farbig (wan blau, lan grün, dmz orange,
mgmt purple, cluster magenta).
* IPAddresses-Page (/ip-addresses): Tabelle pro Interface, VIP-
Toggle blendet vip_priority-Eingabe ein. Goldenes VIP-Tag in der
Liste.
* Sidebar erweitert um Networks + IP-Adressen + section-grouping.
Design 1:1 von mail-gateway/management-ui/ übernommen:
* enterprise.css verbatim (Inter-Font via Google CDN statt local
woff2), Sidebar 240px dunkler Gradient #0B1426→#101D33→#0D1829,
branding-accent #1677ff für Active-State, abgerundete Cards mit
shadow-Token, Header weiß mit subtilem backdrop-filter.
* AntD-Theme-Tokens: colorPrimary #0EA5E9, fontSize 13, fontFamily
'Inter', controlHeight 34, borderRadius 6.
* Layout-Komponenten neu strukturiert: AppLayout/Sidebar/Header
matchen mailguard-Klassen-Naming (.app-layout, .main-content,
.sidebar-section, .sidebar-menu-item.active, .header-left, …).
* Sidebar mit 4 Sektionen (Übersicht / Routing / Netzwerk / System)
+ Logo-Header + Versions-Footer.
Live-deployed auf 89.163.205.6: Networks-Endpoint listet eth0
(89.163.205.6/24, MAC bc:24:11:64:29:e8) + lo, frontend zeigt sie
als System-Tags in der Networks-Page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 16:08:44 +02:00
Debian
0a6f81beaa
feat(api): Phase 2 — REST-API MVP + CRUD für Domains/Backends/Routing
...
REST-API mit Response-Envelope (1:1 mail-gateway), HS256-JWT-Signer
(Secret persistent unter /var/lib/edgeguard/.jwt_fingerprint),
Setup-Wizard (Bcrypt-Admin-Passwort in setup.json), Auth-Middleware
(Cookie + Bearer), Setup-Gate. Update-Banner-Endpoints
/system/package-versions + /system/upgrade ab Tag 1 wired (Pattern
aus enconf-management-agent: systemd-run detached, HTTP-Response
geht VOR dem Self-Replace raus).
CRUD-Repos für domains/backends/routing_rules mit pgxpool +
handgeschriebenem SQL (mail-gateway-Pattern, kein GORM zur Laufzeit).
Audit-Log-Schreiber auf jede Mutation, NodeID aus /etc/machine-id.
DB-Pool öffnet best-effort — ohne erreichbare PG bleiben CRUD-Routen
unregistriert, Auth/Setup/System antworten weiter (Dev ohne PG).
End-to-end live-getestet gegen lokale postgres-16: Setup → Login →
POST/PUT/DELETE Backends + Domains + Routing-Rules → audit_log
schreibt 5 Zeilen mit korrektem actor/action/subject. Graceful
degrade ohne DB ebenfalls verifiziert.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 09:56:10 +02:00