All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m22s
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
120 lines
4.2 KiB
Markdown
120 lines
4.2 KiB
Markdown
# 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).
|
|
|
|
```json
|
|
{
|
|
"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**.
|
|
|
|
### E-mail
|
|
|
|
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.
|