[{"data":1,"prerenderedAt":109},["ShallowReactive",2],{"seo-verification":3,"marketplace-app-en-ntfy":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"slug":7,"slugs":8,"categorySlugs":9,"name":7,"description":13,"phase":14,"unavailableReason":15,"docsUrl":16,"logo":15,"github":15,"tagline":17,"longDescription":18,"features":19,"useCases":28,"steps":38,"faq":54,"specs":73,"compatibleOs":81,"relatedApps":82,"relatedPosts":103,"category":107},"ntfy",{"fr":7,"en":7,"ar":7},{"fr":10,"en":11,"ar":12},"monitoring","monitoring-observability","المراقبة-وقابلية-الرصد","Self-hosted push notification server: send alerts from any script, CI\u002FCD pipeline or monitoring tool with a plain HTTP PUT\u002FPOST — no API key, no subscription, no rate limits.",1,null,"https:\u002F\u002Fservorbit.com\u002Fblog\u002Fself-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd","Self-hosted push notifications — send alerts from scripts, CI\u002FCD and monitoring tools with a plain HTTP PUT\u002FPOST. Under 30 MB RAM, no database.","ntfy (pronounced \"notify\") is an open-source HTTP-based pub\u002Fsub notification service (~32 k GitHub stars, Apache 2.0, v2.26.3). You publish a message to a topic with a plain HTTP PUT or POST request — `curl -d \"Build passed\" http:\u002F\u002Fyour-vps\u002Fbuilds` — and any subscriber (ntfy mobile app, web app, or any HTTP client) receives the notification instantly.\n\nSelf-hosting ntfy on a ServOrbit VPS gives you private, unlimited topics with no rate limits, no account creation and no monthly fee. The single Go binary runs in a single Docker container using under 30 MB of RAM with a SQLite message cache — no PostgreSQL, no Redis, no complex setup. Access control, user accounts and token auth can be added incrementally via the ntfy CLI, or kept open for a private VPS where only your scripts connect.\n\nntfy integrates with every monitoring and automation tool that can make HTTP calls: Uptime Kuma, Beszel, Changedetection.io, Grafana, Home Assistant, GitHub Actions, GitLab CI, AWX, cron jobs, Bash scripts, Python, Go — anywhere you can run curl. A multi-platform mobile app (Android + iOS) and a web UI let you subscribe to any topic and receive push notifications in real time, whether the VPS is on a private network or a public IP.",[20,21,22,23,24,25,26,27],"Send a notification with a plain HTTP PUT\u002FPOST — `curl -d \"Hello\" http:\u002F\u002Fyour-vps\u002Fyour-topic` — zero SDK, zero library dependency.","Receive notifications on Android, iOS, 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 (e.g., `X-Delay: 30min`) to schedule reminders from scripts.","Message priority levels (min \u002F low \u002F default \u002F high \u002F urgent) with DND bypass on mobile for urgent alerts.","Attachments — include images or files up to 15 MB via the `X-Attach` header or multipart upload.","Access control — add usernames, passwords and per-topic ACLs via `ntfy user` and `ntfy access` CLI; publish-only or subscribe-only tokens.","Under 30 MB RAM, SQLite, single container — the lightest self-hosted push notification server in its class.",[29,32,35],{"title":30,"body":31},"CI\u002FCD pipeline alerts","Send a notification when a build passes or fails: `curl -d \"Build #$BUILD_NUMBER failed\" https:\u002F\u002Fyour-domain.com\u002Fbuilds`. A CI runner is a third-party machine, so it needs your server's public address — attach a domain to the VPS and ntfy answers on it over HTTPS; without one it only listens on the VPS loopback and no runner can reach it. Works natively in GitHub Actions, GitLab CI, AWX, Jenkins — any CI that can run curl. No Slack workspace, no email thread, instant push to your phone the moment the pipeline finishes.",{"title":33,"body":34},"Server monitoring hooks","Uptime Kuma, Beszel, Changedetection.io and Grafana all support ntfy as a notification channel. Point them at your self-hosted ntfy instance and every monitoring alert — service down, disk full, price changed — goes to the same ntfy app on your phone in real time. One notification server, every monitoring tool.",{"title":36,"body":37},"Cron job success\u002Ffailure notifications","Wrap long-running cron scripts: `0 3 * * * \u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh && curl -d \"Backup OK\" http:\u002F\u002Fvps\u002Fnightly-backup`. Silence means the backup failed; a push notification confirms it ran. Zero cron-monitoring SaaS required — a single curl call at the end of each job is enough.",[39,42,45,48,51],{"title":40,"body":41},"Order a ServOrbit VPS","Any plan with 512 MB RAM is more than sufficient — ntfy idles under 30 MB RAM and has no GPU or heavy dependency requirements. Co-locate it alongside Beszel or Uptime Kuma on any existing VPS to build a complete self-hosted alerting stack at no extra cost.",{"title":43,"body":44},"One-click deploy from the marketplace","Open your ServOrbit dashboard → Marketplace → Monitoring → ntfy → Deploy. Docker pulls `binwiederhier\u002Fntfy:latest`, starts the ntfy server on port 8080, and the web UI is accessible within 5 seconds. No configuration file required to get started.",{"title":46,"body":47},"Send your first notification","With a domain attached, publish from any device with curl: `curl -d \"Hello from my VPS\" https:\u002F\u002Fyour-domain.com\u002Fmy-topic`, then open the ntfy web UI at `https:\u002F\u002Fyour-domain.com` — no port number in a public URL — and select the `my-topic` channel to watch your message appear live. Without a domain there is no public address: open an SSH tunnel with `ssh -L 8080:127.0.0.1:8080 root@your-vps-ip`, publish with `curl -d \"Hello from my VPS\" http:\u002F\u002Flocalhost:8080\u002Fmy-topic` and browse to `http:\u002F\u002Flocalhost:8080`, using the port shown on your app's card in the ServOrbit client area (8080 is the catalogue default and another one is allocated if it is already taken). Topics are created on first publish — no prior setup needed.",{"title":49,"body":50},"Subscribe on your phone","Install the ntfy app (Android: F-Droid or Google Play; iOS: App Store). Tap the + button, enter your server URL and topic name. You will receive push notifications the moment anything publishes to that topic. Topics can be any string — use names like `ci-builds`, `server-alerts` or `cron-jobs` to organise by source.",{"title":52,"body":53},"Connect your monitoring tools","In Uptime Kuma: Settings → Notifications → ntfy → set 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 services now send to one self-hosted notification hub, routed to your phone in real time.",[55,58,61,64,67,70],{"q":56,"a":57},"What is ntfy and why self-host it?","ntfy is an open-source HTTP pub\u002Fsub notification service — you publish a message to a topic with a plain HTTP PUT or POST, and any subscriber receives it as a push notification instantly. Self-hosting on a ServOrbit VPS gives you unlimited private topics with no rate limits, no third-party account and no monthly fee. You own the notification channel completely.",{"q":59,"a":60},"Do I need a domain name to use ntfy?","No. ntfy works over plain HTTP without a domain — scripts and monitoring tools can send notifications to the VPS IP address directly. A domain name adds HTTPS (recommended for notifications sent over the public internet) and enables browser Web Push API support, but the core use case — scripts and monitoring tools sending notifications to the ntfy mobile app — works on HTTP without a domain.",{"q":62,"a":63},"How do I send a notification from a cron job or script?","One line, from any machine: `curl -d \"Job done\" https:\u002F\u002Fyour-domain.com\u002Fyour-topic` — that public address requires a domain attached to the VPS. From the VPS itself, `curl -d \"Job done\" http:\u002F\u002F127.0.0.1:8080\u002Fyour-topic` works, with the port shown on your app's card in the client area (8080 is only an example). Add a title with `-H \"Title: Nightly backup\"` and set priority with `-H \"Priority: high\"`. No SDK, no library, no API key required — works in any shell environment where curl is available: cron, GitHub Actions, GitLab CI, AWX, Docker entrypoints, Python subprocess.",{"q":65,"a":66},"Does the ntfy mobile app work with a self-hosted server?","Yes, provided the server has a public address to point the phone at. The official ntfy apps for Android (F-Droid \u002F Google Play) and iOS (App Store) let you add any self-hosted ntfy server: attach a domain to your VPS and enter `https:\u002F\u002Fyour-domain.com` as the server URL, then subscribe to any topic. Without a domain this cannot work — the port is bound to the VPS loopback, and an SSH tunnel only exists on the machine that opened it, so a phone has nothing to connect to. Notifications arrive as push notifications even when the app is in the background — Android uses the UnifiedPush protocol via F-Droid or FCM via Google Play; iOS uses APNs.",{"q":68,"a":69},"How do I protect my ntfy instance with access control?","For a private VPS accessible only to your scripts, no auth is needed. For additional security, run `docker exec \u003Ccontainer> ntfy user add admin` to create an admin user, then set `NTFY_AUTH_DEFAULT_ACCESS=deny-all` so only authenticated users can publish\u002Fsubscribe. Each monitoring tool or script gets its own access token via `ntfy token add`.",{"q":71,"a":72},"How much RAM and storage does ntfy need?","ntfy idles under 30 MB RAM with the default SQLite message cache. Disk usage depends on retention settings — by default messages expire after 12 hours and attachments are not stored server-side. A VPS with 512 MB RAM is more than sufficient for a personal or small-team ntfy instance handling thousands of notifications per day.",{"ram":74,"cpu":75,"stack":76,"port":80},"512 MB","1 vCPU",[77,78,79],"Docker","Go","SQLite","8080",[],[83,91,97],{"name":84,"slug":85,"categorySlug":11,"categoryName":86,"categoryColor":87,"logo":88,"tagline":89,"description":90},"Grafana","grafana","Monitoring & Observability","text-amber-400 bg-amber-500\u002F10","https:\u002F\u002Fcdn.simpleicons.org\u002Fgrafana","Visualize your infrastructure and application metrics — customizable dashboards and alerts.","Visualize the metrics of your infrastructure and applications. Customizable dashboards, multi-channel alerts, multiple sources.",{"name":92,"slug":93,"categorySlug":11,"categoryName":86,"categoryColor":87,"logo":94,"tagline":95,"description":96},"Prometheus","prometheus","https:\u002F\u002Fcdn.simpleicons.org\u002Fprometheus","Real-time metric collection and querying — the de facto standard for modern monitoring.","Real-time metric collection and querying. The de facto standard for monitoring Kubernetes, Docker and microservices.",{"name":98,"slug":99,"categorySlug":11,"categoryName":86,"categoryColor":87,"logo":100,"tagline":101,"description":102},"Uptime Kuma","uptime-kuma","https:\u002F\u002Fcdn.simpleicons.org\u002Fuptimekuma","Self-hosted uptime monitoring with beautiful status pages — unlimited monitors, no SaaS bill.","Simple, visual availability monitoring. Watch your HTTP, TCP and DNS endpoints and receive instant alerts.",[104,105,106],"self-host-ntfy-vps","monitoring-vps-grafana-prometheus","installer-prometheus-vps",{"key":10,"slug":11,"name":86,"objective":108,"icon":10,"color":87},"Monitor your infrastructure.",1787581043078]