[{"data":1,"prerenderedAt":84},["ShallowReactive",2],{"seo-verification":3,"marketplace-app-en-ntfy":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"slug":7,"name":7,"description":8,"phase":9,"docsUrl":10,"logo":11,"github":11,"tagline":12,"longDescription":13,"features":14,"useCases":23,"steps":33,"faq":49,"specs":68,"compatibleOs":76,"relatedApps":77,"relatedPosts":78,"category":79},"ntfy","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,"https:\u002F\u002Fservorbit.com\u002Fblog\u002Fself-host-ntfy-vps",null,"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.",[15,16,17,18,19,20,21,22],"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.",[24,27,30],{"title":25,"body":26},"CI\u002FCD pipeline alerts","Send a notification when a build passes or fails: `curl -d \"Build #$BUILD_NUMBER failed\" http:\u002F\u002Fvps:8080\u002Fbuilds`. 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":28,"body":29},"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":31,"body":32},"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.",[34,37,40,43,46],{"title":35,"body":36},"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":38,"body":39},"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":41,"body":42},"Send your first notification","From any device with curl: `curl -d \"Hello from my VPS\" http:\u002F\u002Fyour-vps-ip:8080\u002Fmy-topic`. Open the ntfy web UI in your browser at the same address, navigate to the `my-topic` channel and you will see your message appear live. Topics are created on first publish — no prior setup needed.",{"title":44,"body":45},"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":47,"body":48},"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.",[50,53,56,59,62,65],{"q":51,"a":52},"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":54,"a":55},"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":57,"a":58},"How do I send a notification from a cron job or script?","One line: `curl -d \"Job done\" http:\u002F\u002Fyour-vps:8080\u002Fyour-topic`. 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":60,"a":61},"Does the ntfy mobile app work with a self-hosted server?","Yes. The official ntfy apps for Android (F-Droid \u002F Google Play) and iOS (App Store) let you add any self-hosted ntfy server. Enter your server URL (e.g. `http:\u002F\u002Fyour-vps:8080`) and subscribe to any topic. 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":63,"a":64},"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":66,"a":67},"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":69,"cpu":70,"stack":71,"port":75},"512 MB","1 vCPU",[72,73,74],"Docker","Go","SQLite","8080",[],[],[],{"key":80,"slug":80,"name":81,"objective":82,"icon":80,"color":83},"monitoring","Monitoring & Observability","Monitor your infrastructure.","text-amber-400 bg-amber-500\u002F10",1785714050143]