Container images re-resolved against their registries today; each pin is the manifest-list digest the tag answers now, so no container is served from a build that upstream has already replaced. Version-tag moves: authentik 2026.8.3 -> 2026.8.5 (server/worker/outpost and the ldap image, which now carries the tag instead of a bare digest so the pair can never drift apart), seerr v3.4.1 -> v3.5.1, calibre 9.15.0 -> 9.17.0, calibre-web 0.6.27-ls402 -> ls407, plex ls329 -> ls330, tautulli v2.18.1-ls245 -> v2.18.2-ls250. Digest-only moves inside the same stream: postgres 16-alpine, mariadb 11, redis 7-alpine, valkey 9-alpine, grafana, alertmanager, gluetun, searxng, open-webui, jellyfin, romm, chromedp/headless-shell, lightpanda/browser. Rollback is the previous digest on the same Image= line.
55 lines
2.2 KiB
INI
55 lines
2.2 KiB
INI
# Quadlet unit: alertmanager (rootless, boot-persistent).
|
|
#
|
|
# Install path on dankclaw: ~/.config/containers/systemd/alertmanager.container
|
|
# Unit name: alertmanager.service (container name: alertmanager)
|
|
#
|
|
# The delivery half of the LLM alert rules. Until 2026-09-17 the rules in
|
|
# shared/prometheus/rules/llm-fleet.yml evaluated and reached nobody — a
|
|
# firing alert was visible in Prometheus and on the Grafana dashboard and
|
|
# nowhere else, and an undelivered alert looks identical to a quiet one.
|
|
# This unit closes that gap: Prometheus pushes to alertmanager:9093 over the
|
|
# dankclaw_default network, and the single receiver webhooks the host-side
|
|
# signal-relay user unit, which hands the text to signal-cli under Frank's
|
|
# existing Signal account.
|
|
#
|
|
# PUBLISHING. 127.0.0.1 only, like every other observability unit: the
|
|
# unauthenticated Alertmanager API (lifecycle endpoints are always on in
|
|
# this binary — there is no flag to gate them) has no business on a host
|
|
# interface, and no off-host consumer needs it. Caddy gains no vhost for
|
|
# it; the homepage timer probes loopback.
|
|
#
|
|
# CONFIG. /opt/alertmanager/config/alertmanager.yml is installed from
|
|
# shared/prometheus/alertmanager.yml by deploy-remote.sh on every deploy, so
|
|
# the repo copy is the source of truth. STATE lives in /opt/alertmanager/data.
|
|
#
|
|
# Rootless: container root maps to the invoking user (dank) in this user
|
|
# namespace and dank owns /opt/alertmanager/data. The image's default user
|
|
# (nobody) maps to a subuid that cannot write it — same User=0:0 as prometheus.
|
|
|
|
[Unit]
|
|
Description=Alertmanager alert delivery (Dankclaw)
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Container]
|
|
ContainerName=alertmanager
|
|
Image=docker.io/prom/alertmanager:latest@sha256:39d8bb3966c694a124428a3a88fbcffd40bd069129ecd47c059f8a3f17c55f3b
|
|
Network=dankclaw_default
|
|
User=0:0
|
|
Exec=--config.file=/etc/alertmanager/alertmanager.yml --storage.path=/alertmanager
|
|
PublishPort=127.0.0.1:9093:9093
|
|
Volume=/opt/alertmanager/config:/etc/alertmanager
|
|
Volume=/opt/alertmanager/data:/alertmanager
|
|
HealthCmd=wget --spider -q http://localhost:9093/-/healthy
|
|
HealthInterval=30s
|
|
HealthTimeout=10s
|
|
HealthRetries=3
|
|
HealthStartPeriod=30s
|
|
|
|
[Service]
|
|
Restart=always
|
|
RestartSec=10
|
|
|
|
[Install]
|
|
WantedBy=default.target
|