Debian
e8334cd276
feat(scheduler): Auto-Renewal für Let's Encrypt Certs
...
Vorher: edgeguard-scheduler war 60s-sleep-Stub. LE-Certs liefen nach
90 Tagen ab und mussten manuell re-issued werden.
Jetzt:
* internal/services/certrenewer — Pipeline (find expiring → ACME-Issue
→ certstore.WriteCombined → Repo.Upsert → haproxy reload). Kapselt
was der /tls-certs/issue-Handler macht, nur DB-driven für N Certs.
* edgeguard-scheduler nutzt acme.Service + tlscerts.Repo + certrenewer.
Tick alle 6h, Threshold 30 Tage Restlaufzeit. Sofort-Run bei
Startup damit eine frisch eingespielte Box auch ohne 6h-Wartezeit
prüft.
* Issuer == "letsencrypt" als Filter — manuell hochgeladene PEMs
bleiben unangetastet (Operator owns lifecycle).
* Errors landen in tls_certs.last_error, retry beim nächsten Tick
(transiente ACME-Failures self-heal).
* systemd-Unit edgeguard-scheduler.service: ReadWritePaths um
/etc/edgeguard erweitert (für Cert-PEM-Writes), NoNewPrivileges
auf false (sudo systemctl reload haproxy braucht setuid). Spiegelt
edgeguard-api-Unit.
Version 1.0.16.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-10 22:50:00 +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
f0589e5628
feat(deploy): (d) end-to-end .deb install on 89.163.205.6 grün
...
Box (Debian 13 Trixie, amd64): apt install ./edgeguard-{api,ui,meta}.deb
zieht postgresql-17, haproxy 3.0, certbot, openssl, etc. nach.
postinst flow läuft sauber: migrate check → initdb → migrate up
(8 migrations) → render-config → install HAProxy drop-in → restart
haproxy → enable api+scheduler. Self-register in ha_nodes nach
Setup-Wizard funktioniert.
End-to-end smoke gegen 89.163.205.6:
* :80 → 301 Moved Permanently → https://
* :443 → TLS termination (self-signed _default.pem aus postinst)
→ JSON envelope vom api_backend (HTTP/2 + HSTS)
* / → React index.html aus /usr/share/edgeguard/ui/
Änderungen:
* control: keydb-server von Depends nach Recommends — single-node v1
installiert ohne KeyDB. Phase-3.1 multi-node bringt es zurück nach
Depends sobald ein eigenes APT-Repo das Paket bereitstellt.
* postinst: render-config (--no-reload) + HAProxy-Drop-in installen +
systemctl restart haproxy als zusätzliche Schritte.
* postrm: drop-in auf remove + purge entfernen, daemon-reload, ggf.
haproxy auf distro-default zurückreloaden.
* deploy/systemd/haproxy-edgeguard.conf: Drop-in lenkt HAProxy-Unit
auf /etc/edgeguard/haproxy/haproxy.cfg statt /etc/haproxy/haproxy.cfg.
After=edgeguard-api.service vermeidet 503-Race in den ersten 5s.
* scripts/apt-repo/build-package.sh: shippt Drop-in unter
/etc/edgeguard/systemd/haproxy-edgeguard.conf in der edgeguard-api.deb.
* haproxy.cfg.tpl: http-request redirect vor use_backend → keine
HAProxy-Warning beim Parsen mehr.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 14:02:14 +02:00
Debian
c7e5b28cf7
build: make deb pulls UI build via bun, drop stale angie comment
...
* Makefile: ui target prefers bun (with npm fallback) so make deb
end-to-end reproduces a fresh dist/. deb-amd64/deb-arm64 now
depend on ui, otherwise stale (or missing) management-ui/dist
goes into edgeguard-ui.deb.
* deploy/systemd/edgeguard-api.service: stale "angie" reference
in hardening comment removed.
Verified locally: make deb-amd64 produces three packages —
edgeguard-api_<v>_amd64.deb (6.9 MB), edgeguard-ui_<v>_all.deb
(320 KB), edgeguard_<v>_all.deb (4 KB meta). dpkg-deb -c
confirms layout matches packaging spec (binaries in /usr/bin,
units in /etc/systemd/system, UI under /usr/share/edgeguard/ui).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 12:08:13 +02:00
Debian
914538eed1
feat(configgen): Phase 2 Config-Generator + nginx → HAProxy-only Pivot
...
Architektur-Pivot: nginx fällt komplett weg. HAProxy 2.8+ übernimmt
TLS-Termination, L7-Routing per Host-Header und LB. ACME-Webroot
und Management-UI werden von edgeguard-api ausgeliefert (Phase 3
implementiert die zugehörigen Handler); HAProxy proxied
/.well-known/acme-challenge/* und Management-FQDN-Traffic an
127.0.0.1:9443. Eine Distro-Abhängigkeit weniger, ein Renderer
weniger, sauberere Trennung.
Renderer (alle mit Embed-Templates + Tests):
* internal/configgen/ — atomic write + systemctl reload helpers
* internal/haproxy/ — :80 + :443, ACME-ACL, Host-Header-Routing,
Stats-Frontend, api_backend Fallback
* internal/firewall/ — default-deny input, stateful baseline,
SSH-Rate-Limit, :80/:443 accept,
Cluster-Peer-Set für mTLS :8443,
Custom-Rules aus PG
* internal/{squid,wireguard,unbound}/ — Stubs (ErrNotImplemented)
Orchestrator + CLI:
* internal/services/configorch/ — fester Reihenfolge-Run, Stubs
sind soft-skip statt fatal
* cmd/edgeguard-ctl render-config [--no-reload] [--only=svc1,svc2]
Packaging:
* postinst: /etc/edgeguard/nginx raus, /var/lib/edgeguard/acme rein,
self-signed _default.pem via openssl req (damit HAProxy startet
bevor certbot etwas issuet hat)
* control: Depends nginx raus, openssl rein
* edgeguard-ui: dependency auf nginx weg, "Served by edgeguard-api
gin StaticFS"
Live-Smoke: render-config gegen lokale PG schreibt /etc/edgeguard/
haproxy/haproxy.cfg + nftables.d/ruleset.nft korrekt; CRUD-Test aus
Phase 2 läuft weiter unverändert.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 10:59:52 +02:00
Debian
9f75eec756
refactor: Angie → nginx + Unbound (DNS Forwarder + Cluster-Split-Horizon)
...
Reverse-Proxy von Angie (eigenes APT-Repo) auf nginx (Distro) umgestellt
— vereinfacht Bootstrap (kein angie.software-Repo mehr), reduziert
Offene-Punkte (arm64-Verfügbarkeit entfällt). Neuer Service Unbound
übernimmt zwei Rollen: Caching-Forwarder mit DNSSEC und Cluster-internes
Split-Horizon (Local-Zone eg.cluster, Peer-Adressen aus PG ha_nodes,
Reload via unbound-control). Architektur-Spec §7.5 dokumentiert beide
Rollen + Config-Schichtung.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-08 23:06:56 +02:00
Felix Netzel
84ea8c86f5
feat: working .deb build for edgeguard-api + meta
...
scripts/apt-repo/build-package.sh produces:
- edgeguard-api_<ver>_<arch>.deb (3 Go binaries, systemd units,
/etc/edgeguard/edgeguard.yaml as conffile)
- edgeguard-ui_<ver>_all.deb (skipped while management-ui/dist
is empty)
- edgeguard_<ver>_all.deb (meta, Depends api+ui)
Verified locally on amd64:
- go build ./... ✓
- make deb-amd64 ✓
- api binary serves ✓
GET /api/health → 200 {"status":"ok","version":"0.0.1-dev"}
- dpkg-deb -I + -c clean ✓
2026-05-08 19:04:21 +02:00
Felix Netzel
0ceab4c814
chore: initial skeleton
...
- docs/architecture.md: native rewrite plan (5 services + control plane,
Active-Active cluster like nmg, Floating-IP for HTTP ingress)
- cmd/edgeguard-{api,scheduler,ctl}: minimal Gin + CLI stubs
- packaging/debian/edgeguard-{api,ui,meta}: control + maintainer scripts
- deploy/systemd/edgeguard-api.service + edgeguard-scheduler.service
with hardening defaults
- Makefile: build / cross-compile (amd64+arm64) / deb / publish targets
- scripts/install.sh + scripts/apt-repo/build-package.sh stubs
2026-05-08 18:45:41 +02:00