2026-08-06 17:10:04 -04:00
2026-08-03 12:12:12 -04:00
2026-08-03 12:12:12 -04:00
2026-08-03 12:12:12 -04:00
2026-08-03 12:12:12 -04:00

ntfy-bridge

Hub central de notifications pour homelab — agrège des sources multiples (Gitea, Docker, Uptime Kuma, health checks HTTP, scripts cron) et les transforme en notifications Ntfy intelligentes, formatées, avec priorités et contexte.

┌─────────────────┐
│  Gitea webhook  │──┐
├─────────────────┤  │
│  Uptime Kuma    │──┤
├─────────────────┤  │     ┌──────────────┐      ┌───────────┐      ┌──────────────┐
│  Docker events  │──┤────→│  ntfy-bridge │─────→│ Ntfy Srv  │─────→│   Ton phone  │
├─────────────────┤  │     └──────────────┘      └───────────┘      └──────────────┘
│  HTTP health    │──┤
├─────────────────┤  │
│  Scripts cron   │──┘
└─────────────────┘

Pourquoi ntfy-bridge ?

Dans un homelab avec 8+ hôtes Docker, Gitea, Uptime Kuma et des dizaines de services, les alertes arrivent de partout. ntfy-bridge centralise tout dans une seule file de notifications intelligentes — avec le bon niveau de priorité, le bon format, et le bon topic Ntfy.

Sans ntfy-bridge Avec ntfy-bridge
Webhook Gitea → email (noyé) Push = notif Ntfy formatée avec auteur, commit, message
Uptime Kuma → alerte brute "🚨 Gitea DOWN — 503 — since 14:32" avec priority=5
Container qui crashe → logs Docker "🐳 flowdeck exited OOMKilled on docker-prod-1"
Script cron → email perdu Résumé quotidien disque à 9h dans ta poche

Installation

Docker (recommandé)

# 1. Cloner le repo
git clone https://git.dracodev.net/bruno/ntfy-bridge.git
cd ntfy-bridge

# 2. Compiler le binaire Linux (cross-compilation depuis Windows/Mac)
v -os linux -prod -o ntfy-bridge .

#    Ou compiler directement sur Linux :
#    v -prod -o ntfy-bridge .

# 3. Configurer
cp ntfy-bridge.example.yaml ntfy-bridge.yaml
vim ntfy-bridge.yaml

# 4. Lancer avec docker compose
docker compose up -d

# 5. Vérifier
curl http://localhost:9090/health

Le docker-compose.yml inclus monte :

  • ntfy-bridge.yaml → /etc/ntfy-bridge/ntfy-bridge.yaml (read-only)
  • dashboard.html → /etc/ntfy-bridge/dashboard.html (read-only)
  • Port 9090 exposé sur localhost
  • Variables d'environnement NTFY_TOKEN et NTFY_HMAC_SECRET
  • Healthcheck intégré (/health)

Compilation manuelle

# Installer V (si pas déjà fait)
curl -s https://github.com/vlang/v/releases/latest/download/v_linux.zip -o /tmp/v.zip
unzip /tmp/v.zip -d /tmp && sudo /tmp/v/v symlink

# Compiler
git clone https://git.dracodev.net/bruno/ntfy-bridge.git
cd ntfy-bridge
v -prod .

# Configurer
cp ntfy-bridge.example.yaml ntfy-bridge.yaml
vim ntfy-bridge.yaml

# Lancer
./ntfy-bridge --config ntfy-bridge.yaml

Sources supportées

Source Type Description
Gitea Webhook Push, PR, issues, releases → notifs formatées
Uptime Kuma Webhook Statut up/down avec priorité critique
Docker Socket Container start/die/oom/health_status
HTTP Poll Polling Health checks périodiques
Cron Webhook Reçoit des notifs depuis des scripts shell
Generic Webhook Endpoint passe-partout pour tout script custom
Plugin Exec Exécutable externe appelé périodiquement (bash, python, …)

Features

  • ACLs — Restriction par IP (CIDR) ou Bearer token sur chaque webhook
  • Plugins — Scripts externes exécutés toutes les 60s, contrat JSON stdout
  • Dashboard — Interface web avec stats, statuts, historique temps réel
  • Filtres — Règles conditionnelles drop/set_priority/add_tag par source
  • Actions Ntfy — Boutons click, vues, broadcast intégrés
  • Prometheus — Endpoint /metrics pour Grafana
  • Outgoing webhooks — Forward vers Slack, Discord, JSON
  • Silence rules — Mute temporaire des notifs via API
  • Grouping — Regroupement intelligent des notifs identiques
  • State persistence — Sauvegarde de l'état up/down et silence sur disque

Exemple de config minimale

server:
  url: https://ntfy.dracodev.net
  listen: ":9090"

sources:
  gitea:
    - webhook_path: /webhooks/gitea
      topic: dev-notifs

Licence

MIT

S
Description
Hub central de notifications homelab — agrège Gitea, Docker, Uptime Kuma, health checks → notifications Ntfy intelligentes
Readme
319 KiB
Languages
V 84.4%
HTML 7%
Shell 4.3%
PowerShell 3.5%
Dockerfile 0.6%
Other 0.2%