de5c425f18c0e2662aa7ae0f65dbd851d4ebfeda
CI / build (push) Failing after 4m39s
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
9090exposé sur localhost - Variables d'environnement
NTFY_TOKENetNTFY_HMAC_SECRET - Healthcheck intégré (
/health)
Raspberry Pi / ARM64
# Option A : Binaire pré-compilé (CI) — pas besoin de V
# Télécharge l'artifact "ntfy-bridge-linux-arm64" depuis Gitea Actions :
# https://git.dracodev.net/bruno/ntfy-bridge/actions
# ou via API :
curl -s -o ntfy-bridge "https://git.dracodev.net/api/v1/repos/bruno/ntfy-bridge/actions/artifacts/latest/zip?name=binaires"
unzip binaires.zip ntfy-bridge-linux-arm64
mv ntfy-bridge-linux-arm64 ntfy-bridge
chmod +x ntfy-bridge
# Option B : Compiler soi-même (nécessite V)
# Installer V sur Debian 12 / Raspberry Pi OS (aarch64) :
git clone --depth 1 https://github.com/vlang/v ~/v
cd ~/v && make
sudo ln -sf ~/v/v /usr/local/bin/v
# Compiler ntfy-bridge
git clone https://git.dracodev.net/bruno/ntfy-bridge.git
cd ntfy-bridge
v -prod -o ntfy-bridge .
# Lancer
cp ntfy-bridge.example.yaml ntfy-bridge.yaml
vim ntfy-bridge.yaml
./ntfy-bridge --config ntfy-bridge.yaml
Compilation manuelle
# Installer V sur Linux x86_64 (Debian/Ubuntu)
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
/metricspour 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
Description
Hub central de notifications homelab — agrège Gitea, Docker, Uptime Kuma, health checks → notifications Ntfy intelligentes
319 KiB
Languages
V
84.4%
HTML
7%
Shell
4.3%
PowerShell
3.5%
Dockerfile
0.6%
Other
0.2%