u/ScaleMysterious1296

I created HAProxy Cluster Manager — a web UI for HAProxy with Let's Encrypt and multi-node failover (Keepalived)

I created HAProxy Cluster Manager — a web UI for HAProxy with Let's Encrypt and multi-node failover (Keepalived)

I wanted a web UI for HAProxy the way Nginx Proxy Manager is one for nginx — and I wanted the proxy itself to stop being a single point of failure. So I created one, and I've just released it (GPL-3.0):

https://github.com/avandeputte/haproxy-manager

  • Publish a service from two lines — the public URL and the backend address. It generates the frontend, backend, ACLs, certificate, and HTTP→HTTPS redirect, and shows the exact haproxy.cfg before anything is written.
  • Recipes turn the complex setups into a dropdown. Pick Jellyfin and the port, health check and timeouts are filled in. Pick Patroni and you get the config people usually spend an evening on: TCP to Postgres on 5432 while an HTTP check asks each node's API on 8008 which one is the primary, source-IP stickiness, and alerting that understands "1 of 3 up" is this pool's healthy state. MariaDB Galera and raw TCP work the same way.
  • Let's Encrypt via acme.sh — HTTP-01 and DNS-01. Renewals run automatically, HAProxy is reloaded, and certs are pushed to the other nodes so a failover never serves a stale one.
  • Any number of nodes with Keepalived on a shared virtual IP. Config and certificates sync, offline nodes catch up on their own, and the overview calls out split brain, nobody holding the VIP, or a node stuck on an old config.
  • Optional sign-in per service: basic auth or OIDC SSO (Authentik, Keycloak, Authelia, Google, Entra) — enforced by HAProxy itself, no Lua, so unauthenticated requests never reach your apps.
  • Monitoring built in: live stats, per-service traffic history, a watchdog that knows stopped vs hung, once-a-minute probes of every published URL the way a browser would ask, alerts by email/Pushover/webhook, Home Assistant via MQTT discovery, Prometheus /metrics.

Implementation: one Python app, all state in a single JSON file, no database. The config stays generated — validated with haproxy -c before writing, and Apply rolls back if HAProxy doesn't come back up. Install via .deb/.rpm, an install script, or an all-in-one Docker image (amd64/arm64).

Every screenshot in the README is the real app driven against a three-node cluster.

I'd love feedback!

u/ScaleMysterious1296 — 5 days ago