Skip to content

haproxy-manager 1.47

Choose a tag to compare

@avandeputte avandeputte released this 10 Aug 23:56
· 82 commits to main since this release

Web UI for HAProxy, Keepalived and acme.sh: publish services, obtain Let's
Encrypt certificates, and run a cluster on a shared virtual IP with settings
and certificates syncing between nodes.

Install

Debian / Ubuntu

sudo apt-get install -y ./haproxy-manager_1.47.0_all.deb

Fedora

sudo dnf install -y ./haproxy-manager-1.47.0-1.noarch.rpm

RHEL / Rocky / Almapython3-flask and python3-waitress come from EPEL:

sudo dnf install -y epel-release
sudo dnf install -y ./haproxy-manager-1.47.0-1.noarch.rpm

Docker — multi-architecture, linux/amd64 and linux/arm64:

docker pull ghcr.io/avandeputte/haproxy-manager:1.47

Install script, unchanged:

curl -fsSL https://raw.githubusercontent.com/avandeputte/haproxy-manager/main/install.sh | sudo bash

The packages carry acme.sh inside, so installing needs no network beyond your
own package mirrors. They install and start the service and print the generated
administrator password. Upgrading leaves the configuration, the login and
issued certificates alone; removing keeps /var/lib/haproxy-manager, and
apt-get purge clears it.

Each package is verified in CI by installing it on a real systemd host of the
family it targets — Debian 12, Ubuntu 24.04, Rocky 9, Fedora 41 — and signing
in.

In this release

  • Packages.deb and .rpm, built from one definition and laid out
    exactly like the install script.
  • Multi-architecture images on the GitHub Container Registry, checked on
    both architectures before publishing.
  • Watchdog — restarts HAProxy and Keepalived when they stop answering,
    not merely when they exit, and systemd restarts the app itself on the same
    basis. It refuses to restart against a configuration that cannot work, or a
    unit you disabled, and gives up rather than flapping.
  • Notifications — email, Pushover and JSON webhook, on transitions rather
    than conditions.
  • Logs — one timeline merging the UI, HAProxy, acme.sh and Keepalived.
  • Documentationinstalling on a server,
    running in Docker and
    configuration, with tools/check-docs.py verifying
    the checkable claims against the code.

Fixes

  • One slow cluster node could freeze the whole UI: a plain page load measured
    88 seconds during an Apply. Reads no longer queue behind writes, and the
    configuration push runs with the lock released. The same test now measures
    3 ms.
  • Peer timeouts applied to the connect and read phases separately, so a
    setting of 6 could take 12 seconds. They are explicit and tunable now, and
    node health is collected in the background so a page load never waits on the
    network.
  • Peer failures reported urllib3 exception text; they now say what happened and
    what to do.
  • The Watchdog and Notifications pages failed to render.
  • The installer survives a transient download failure, and falls back to
    fetching the files it needs from a second host.
  • The container image had two HEALTHCHECK instructions, so only the last took
    effect.