Het onbewaakte deel was de zwakke plek: geplande taken draaiden 's nachts en een storing kwam alleen in het auditlog terecht. Meldingen (core/notify.py): - ntfy, webhook (Discord/Slack/Gotify) en e-mail, alle drie met de standaardbibliotheek. - Gebeurtenissen: mislukte backup, onleesbaar archief, vastgelopen taak, weinig schijfruimte, beschikbare update, gestopte container. - Eén bericht per ronde; bij schijfruimte en gestopte containers alleen bij de overgang, zodat je niet elk uur hetzelfde krijgt. - Testknop die eerst opslaat, zodat je test wat je net hebt ingevuld. - send() gooit nooit: het kanaal mag de taak die de melding veroorzaakte niet alsnog laten omvallen. Schijfruimte (core/diskspace.py): - Controle vóór elke backup; past het niet, dan weigeren in plaats van halverwege afbreken. - DISK_MIN_FREE_GB blijft gereserveerd, DISK_WARN_PCT kleurt de balk rood. - Per filesystem één regel in de backuplijst. Backups controleren: - Elk nieuw archief wordt helemaal uitgelezen (tar-structuur plus gzip-checksum, die aan het eind staat). - Diepe variant pakt echt uit naar een tijdelijke map, met dezelfde beperkingen als een echt herstel. - Resultaat staat in de metadata en als schildje in de lijst. Backups de deur uit: - Downloadknop. - BACKUP_OFFSITE_DIR kopieert elke nieuwe backup naar een gemounte schijf, NFS- of SMB-share, via .part zodat een afgebroken kopie herkenbaar onaf is. - Ruimtecontrole op de bestemming, want een weggevallen mount laat vaak een lege map op de systeemschijf achter. NOTIFY_TOKEN en NOTIFY_EMAIL_PASSWORD zijn write-only. Nieuw: docs/meldingen.md; docs/backups.md uitgebreid. Getest tegen een draaiende server met een echte ontvanger. 1064 tests groen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
4.2 KiB
Meldingen
Geplande backups, de updatecheck en de bewaking van je containers draaien in de achtergrond, meestal 's nachts. Zonder meldingen komt een storing alleen in het auditlog terecht — en dat lees je pas als je al een probleem hebt. Een backup die drie weken stilletjes faalt, ontdek je op het slechtst denkbare moment.
Instellen doe je onder Instellingen → Meldingen.
Kanalen
Alle drie werken met wat er al in Server Up zit; er komt geen extra software of account aan te pas.
ntfy
Het eenvoudigst als je iets op je telefoon wil. Installeer de ntfy-app, verzin een topicnaam die niet te raden is, en vul de URL in:
https://ntfy.sh/serverup-a7f3k9x2
Iedereen die de topicnaam kent kan meelezen én zelf berichten sturen, dus kies
iets willekeurigs. Draai je een eigen ntfy-server met toegangscontrole, vul dan
ook het token in; dat gaat mee als Authorization: Bearer ….
Webhook
Een POST met een JSON-body. Dezelfde instelling werkt voor Discord, Slack,
Gotify en zelfgebouwde ontvangers: de body bevat naast title en message ook
content (wat Discord leest) en text (wat Slack leest).
{
"title": "1 backup(s) mislukt",
"message": "De geplande backup is niet gelukt voor:\n\n• vaultwarden: …",
"content": "**1 backup(s) mislukt**\n…",
"text": "*1 backup(s) mislukt*\n…",
"priority": "hoog",
"source": "server-up"
}
Voor Discord gebruik je de webhook-URL uit Kanaalinstellingen → Integraties.
SMTP met STARTTLS (standaard), SSL/TLS of onversleuteld. Vul server, poort, gebruikersnaam, wachtwoord, afzender en ontvanger in.
Gebruik je Gmail of Microsoft 365, dan heb je een app-wachtwoord nodig; je gewone wachtwoord wordt geweigerd.
Waarover je bericht krijgt
| Gebeurtenis | Wanneer |
|---|---|
backup_failed |
Een geplande backup is voor een of meer stacks mislukt |
backup_verify |
Een archief bleek niet leesbaar bij de controle |
job_failed |
Een geplande taak liep vast |
disk_low |
Een schijf zakte onder de ingestelde drempel |
update_available |
Er staat een nieuwe versie klaar |
stack_down |
Een container die zou moeten draaien, draait niet meer |
Standaard staan alleen de storingen aan. "Update beschikbaar" is nuttig maar geen probleem, dus die vink je zelf aan.
Er komt één bericht per ronde, niet één per stack: bij een volle schijf faalt
alles tegelijk en dan wil je geen twintig meldingen. Voor disk_low en
stack_down wordt alleen de overgang gemeld — anders krijg je elk uur
hetzelfde bericht tot je het oplost.
Testen
Met Test versturen stuurt Server Up meteen een bericht via het ingestelde kanaal. De instellingen worden eerst opgeslagen, zodat je test wat je net hebt ingevuld en niet de vorige waarden.
Komt het niet aan, dan staat de foutmelding erbij: een HTTP-code bij ntfy en
webhooks, de SMTP-fout bij e-mail. Elke poging komt ook in het auditlog onder
bron notify, dus je kunt teruglezen of er gemeld is — en of dat lukte.
Wat er níét gebeurt
Een storing in het meldingskanaal mag nooit de taak omvergooien die de melding veroorzaakte. Mislukt het versturen, dan gaat de backup gewoon door en vind je het terug in het auditlog. Een onbereikbare ntfy-server maakt dus geen kapotte backup.
Instellingen
| Sleutel | Standaard | Betekenis |
|---|---|---|
NOTIFY_CHANNEL |
leeg | ntfy, webhook, email, of leeg voor uit |
NOTIFY_URL |
leeg | Topic- of webhook-URL |
NOTIFY_TOKEN |
leeg | Bearer-token; wordt nooit teruggegeven door de API |
NOTIFY_EVENTS |
storingen | Lijst met gebeurtenissen hierboven |
NOTIFY_EMAIL_HOST |
leeg | SMTP-server |
NOTIFY_EMAIL_PORT |
587 |
SMTP-poort |
NOTIFY_EMAIL_SECURITY |
starttls |
starttls, ssl of geen |
NOTIFY_EMAIL_USER |
leeg | Gebruikersnaam |
NOTIFY_EMAIL_PASSWORD |
leeg | Wachtwoord; wordt nooit teruggegeven |
NOTIFY_EMAIL_FROM |
leeg | Afzender |
NOTIFY_EMAIL_TO |
leeg | Ontvanger |
STACK_DOWN_CHECK |
true |
Containers bewaken die zouden moeten draaien |
Het token en het SMTP-wachtwoord zijn write-only: je kunt ze instellen, maar de API geeft ze nooit terug — alleen of ze gevuld zijn. Een leeg veld betekent bij het opslaan "niet wijzigen", net als bij de git-tokens.