[{"data":1,"prerenderedAt":138},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":24,"featuredImage":26,"bgImage":27,"posterImage":28,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":80,"ctaBody":81,"ctaButton":82,"ctaUrl":83,"relatedPosts":84},194,"self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd",{"fr":10,"en":8,"ar":11},"self-host-ntfy-vps","استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd","Self-host ntfy on a VPS: push notifications for scripts and CI\u002FCD","Deploy ntfy on your VPS and send push notifications from any script, cron job or CI\u002FCD pipeline with a plain curl — no SaaS, no API key, no subscription.",4,0,false,"2026-07-28T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},8,"Security & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[25],{"id":19,"name":20,"slug":21,"color":22,"icon":23},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":30,"appSlug":31},"monitoring-observability","ntfy","Slack charges per seat. Emails get lost in noise. ntfy (Apache 2.0, ~32k ⭐, v2.26.3) takes a different approach: an HTTP pub\u002Fsub server you self-host on your VPS, where any script sends an alert with `curl -d`. The mobile app receives the push notification in real time. Single Docker container, \u003C 30 MB RAM, no account required.",[34,38,50,53,76],{"type":35,"title":36,"body":37},"h2","The problem: too many monitoring tools, too many notification channels","Uptime Kuma monitors your services, Beszel monitors your VPS metrics, Changedetection.io monitors your web pages, and your cron jobs go silent at night — except when they fail. Each has its own notification channel: Slack, email, webhook, Telegram. The result: five different integrations to maintain and no unified view when something breaks at 3 AM. ntfy solves this from the other direction: you host the notification hub, and every tool or script sends alerts to it over plain HTTP.",{"type":39,"title":40,"items":41},"ul","What ntfy gives you out of the box",[42,43,44,45,46,47,48,49],"Send a notification with a plain curl — `curl -d \"Build failed\" http:\u002F\u002Fyour-vps\u002Fci-alerts` — zero SDK, zero library.","Receive notifications on Android (F-Droid \u002F Play Store), iOS (App Store), desktop browser and the ntfy web UI — all subscribe to the same topic via WebSocket or SSE.","Notification actions — buttons in the push notification that trigger HTTP callbacks, open URLs or run commands on the subscriber device.","Scheduled notifications — delayed delivery (`X-Delay: 30min`) to schedule reminders from scripts.","Priority levels (min \u002F low \u002F default \u002F high \u002F urgent) with DND bypass on mobile for urgent alerts.","Attachments — images or files up to 15 MB via the `X-Attach` header or multipart upload.","Access control — add users, passwords and per-topic ACLs via `ntfy user` and `ntfy access` CLI.","\u003C 30 MB RAM, SQLite, single container — the lightest self-hosted push notification server in its class.",{"type":35,"title":51,"body":52},"Architecture: single-container HTTP pub\u002Fsub","ntfy is a Go binary that runs in a single Docker container. It exposes a simple HTTP interface: `PUT` or `POST` to `\u002Fyour-topic` publishes a message; any client listening to that topic (via WebSocket, SSE or the mobile app) receives it instantly. Messages are cached in SQLite (`\u002Fvar\u002Flib\u002Fntfy\u002Fcache.db`) with configurable retention (12 hours by default). `NTFY_BEHIND_PROXY=true` tells ntfy it is behind a reverse proxy (nginx) and should read the real client IP from `X-Forwarded-For`.",{"type":54,"title":55,"items":56,"steps":72},"steps","Deploy and use ntfy in 5 steps",[57,60,63,66,69],{"title":58,"body":59},"Deploy ntfy from the ServOrbit marketplace","Open your ServOrbit dashboard → Marketplace → Monitoring → ntfy → Deploy. Docker pulls `binwiederhier\u002Fntfy:latest`, starts ntfy on port 8080, and the web UI is accessible within 5 seconds. No configuration file required to get started.",{"title":61,"body":62},"Send your first notification","From any terminal with curl:\n```bash\ncurl -d \"Hello from my VPS\" http:\u002F\u002Fyour-vps-ip:8080\u002Fmy-topic\n```\nOpen the ntfy web UI at the same address, navigate to `my-topic` and your message appears live. Topics are created on first publish — no prior setup needed.",{"title":64,"body":65},"Subscribe on your phone","Install the ntfy app (Android: F-Droid or Play Store; iOS: App Store). Tap +, enter your server URL and topic name. You will receive push notifications as soon as anything is published to that topic — even with the app in the background, via UnifiedPush (Android F-Droid), FCM (Android Play) or APNs (iOS).",{"title":67,"body":68},"Connect your monitoring tools","In Uptime Kuma: Settings → Notifications → ntfy → enter server URL and topic. Repeat for Beszel, Changedetection.io and Grafana — each points to the same ntfy server with a distinct topic name. All your monitoring alerts arrive in a unified hub on your phone.",{"title":70,"body":71},"Alert from scripts and cron jobs","Add one line to each critical script:\n```bash\n# On success\ncurl -H \"Title: Nightly backup\" -H \"Priority: high\" -d \"Backup completed at $(date)\" http:\u002F\u002Fyour-vps:8080\u002Fcron-jobs\n\n# On failure\ncurl -H \"Tags: warning\" -d \"Backup FAILED: exit code $?\" http:\u002F\u002Fyour-vps:8080\u002Fcron-jobs\n```\nSilence becomes the anomaly signal; the push notification confirms normal execution.",[73],{"title":74,"body":75},"Logging in for the first time","ntfy starts WITHOUT any account or password: the URL opens straight onto the interface, and anyone who knows the address can read AND publish on any topic. If your server is reachable from the internet, enable authentication before using it in earnest.",{"type":77,"title":78,"body":79},"tip","Tip: use topic names as namespaces","Organise your alerts by source: `ci-builds` for GitHub Actions\u002FGitLab CI, `server-alerts` for Uptime Kuma\u002FBeszel, `cron-jobs` for batch scripts. The ntfy app lets you mute specific topics at night (e.g., `cron-jobs`) while keeping `server-alerts` at maximum priority. No server-side configuration — just the topic name in the curl command.","Your notification hub under your control","Deploy ntfy on a ServOrbit VPS and centralise all your monitoring, CI\u002FCD and cron alerts in one self-hosted notification hub — no SaaS, no subscription.","Deploy ntfy","\u002Fmarketplace\u002Fmonitoring-observability\u002Fntfy",[85,101,122],{"id":86,"slug":87,"slugs":88,"title":91,"excerpt":92,"readTime":93,"views":15,"isPinned":16,"publishedAt":94,"category":95,"categories":96,"featuredImage":26,"bgImage":27,"posterImage":98,"relatedSolution":99},133,"self-host-beszel-multi-server-monitoring-hub-on-your-vps",{"fr":89,"en":87,"ar":90},"self-host-beszel-vps","استضف-beszel-على-vps-مركز-مراقبة-متعدد-الخوادم","Beszel on VPS: multi-server monitoring, alerts and security","Deploy Beszel on a VPS, monitor your entire fleet from one hub, set up Telegram\u002Femail alerts, enable 2FA and fix silent agents, TLS errors and blocked ports.",10,"2026-02-14T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[97],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fself-host-beszel-vps-poster.svg",{"categorySlug":30,"appSlug":100},"beszel",{"id":102,"slug":103,"slugs":104,"title":107,"excerpt":108,"readTime":14,"views":109,"isPinned":16,"publishedAt":110,"category":111,"categories":117,"featuredImage":26,"bgImage":27,"posterImage":119,"relatedSolution":120},167,"how-to-self-host-dozzle-on-a-vps-real-time-docker-log-viewer",{"fr":105,"en":103,"ar":106},"self-host-dozzle-vps","استضافة-dozzle-على-vps-عارض-سجلات-docker-لحظيا","How to Self-Host Dozzle on a VPS: Real-Time Docker Log Viewer","Deploy Dozzle on your VPS — a stateless, open-source Docker log viewer. Stream, search and tail logs from all your containers in the browser, without SSH or log storage.",1,"2026-07-06T00:00:00+00:00",{"id":112,"name":113,"slug":114,"color":115,"icon":116},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[118],{"id":112,"name":113,"slug":114,"color":115,"icon":116},"\u002Fblog\u002Fcovers\u002Fself-host-dozzle-vps-poster.svg",{"categorySlug":30,"appSlug":121},"dozzle",{"id":123,"slug":124,"slugs":125,"title":128,"excerpt":129,"readTime":130,"views":15,"isPinned":16,"publishedAt":131,"category":132,"categories":133,"featuredImage":26,"bgImage":27,"posterImage":135,"relatedSolution":136},182,"self-host-changedetectionio-on-a-vps-monitor-any-website",{"fr":126,"en":124,"ar":127},"self-host-changedetection-vps","استضافة-changedetectionio-على-vps-مراقبة-تغييرات-المواقع","Self-Host Changedetection.io on a VPS: Monitor Any Website","Deploy Changedetection.io on your VPS: open-source website change detection with CSS\u002FXPath filters, 80+ notification channels and optional Playwright support.",5,"2026-07-17T00:00:00+00:00",{"id":112,"name":113,"slug":114,"color":115,"icon":116},[134],{"id":112,"name":113,"slug":114,"color":115,"icon":116},"\u002Fblog\u002Fcovers\u002Fself-host-changedetection-vps-poster.svg",{"categorySlug":30,"appSlug":137},"changedetection",1787581014602]