[{"data":1,"prerenderedAt":134},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-gatus-on-a-vps-config-as-code-status-page-and-checks-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":77,"ctaBody":78,"ctaButton":79,"ctaUrl":80,"relatedPosts":81},209,"self-host-gatus-on-a-vps-config-as-code-status-page-and-checks",{"fr":10,"en":8,"ar":11},"self-host-gatus-vps","استضافة-gatus-على-vps-صفحة-حالة-بالكود-ومراقبة-شاملة","Self-host Gatus on a VPS: config-as-code status page and checks","Deploy Gatus on your ServOrbit VPS: a public status page plus HTTP, TCP, DNS, ICMP and TLS-expiry checks from one YAML file, with 40+ alert integrations.",4,0,false,"2026-08-02T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[25],{"id":19,"name":20,"slug":21,"color":22,"icon":23},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-gatus-vps-poster.svg",{"categorySlug":30,"appSlug":31},"monitoring-observability","gatus","Uptime Kuma tells you your service is responding. Gatus tells you it's responding correctly: the exact HTTP status code, response time under a threshold, body content, TLS certificate expiry, DNS resolution to the right IP. And it publishes everything on a status page ready to share with your customers — all driven by a versionable YAML file, with no UI to configure.",[34,38,47,50,73],{"type":35,"title":36,"body":37},"h2","Why Gatus rather than a classic ping monitor","An HTTP ping tells you your server is responding. Gatus tells you it's responding *correctly*: you define the exact conditions — `[STATUS] == 200`, `[RESPONSE_TIME] \u003C 800`, `[BODY] contains \"ok\"`, `[CERTIFICATE_EXPIRATION] > 14d` — and Gatus raises an alert the moment a condition is no longer met.\n\nThe practical difference: you discover that an API is silently returning 500, that a certificate expires in 10 days, or that a DNS record points to the wrong IP — before your customers do. All driven by a YAML file you version alongside the rest of your infrastructure.",{"type":39,"title":40,"items":41},"ul","What Gatus monitors — and Uptime Kuma can't",[42,43,44,45,46],"**Rich HTTP conditions**: exact status code, response time in ms, body content by regex, JSON field value — in a single endpoint definition.","**TLS certificate expiry**: `[CERTIFICATE_EXPIRATION] > 14d` triggers an alert when fewer than 14 days remain before the certificate expires.","**TCP, ICMP, DNS, WebSocket**: monitor a database (`tcp:\u002F\u002Fdb:5432`), a network ping (`icmp:\u002F\u002Fgateway`), a DNS resolution (`dns:\u002F\u002Fns1.example.com`) or a WebSocket echo from the same config.","**Public status page**: one URL to give customers so they can check your service health without emailing you.","**40+ alert channels**: Slack, PagerDuty, OpsGenie, Discord, Teams, ntfy, Pushover, Telegram, email, webhook — with configurable thresholds to avoid flap noise.",{"type":35,"title":48,"body":49},"Architecture: a single Go container, under 256 MB RAM","Gatus is a Go binary distributed in a distroless image (under 20 MB). A single container, no external runtime dependency: check history is stored in a SQLite database in a Docker volume. On ServOrbit, an alpine:3.20 init container generates a starter `config.yaml` on first launch — you then edit it over SSH to add your own endpoints.\n\nIdle memory footprint is under 80 MB. A 512 MB VPS is more than sufficient, even if you co-locate Gatus with the application it monitors.",{"type":51,"title":52,"items":53,"steps":69},"steps","Self-hosting Gatus on a VPS in 5 steps",[54,57,60,63,66],{"title":55,"body":56},"Order a ServOrbit VPS","Any plan from 512 MB RAM is sufficient — Gatus idles under 80 MB RAM. For reliable monitoring, place Gatus on a separate VPS from the application it monitors: if the application VPS goes down, the monitoring VPS keeps sending alerts.",{"title":58,"body":59},"Deploy from the Marketplace in one click","ServOrbit dashboard → Marketplace → Monitoring → Gatus → Deploy. An init container writes a sample `config.yaml`, then Gatus starts. The status page is accessible at `http:\u002F\u002Fyour-vps-ip:8080` within seconds.",{"title":61,"body":62},"Edit the configuration file","SSH into your VPS and edit `\u002Fopt\u002Fstacks\u002Fgatus\u002Fconfig\u002Fconfig.yaml`. Replace the sample endpoint with your real services. A minimal HTTP endpoint looks like:\n\n```yaml\nendpoints:\n  - name: \"My API\"\n    url: \"https:\u002F\u002Fapi.your-domain.com\u002Fhealth\"\n    interval: 1m\n    conditions:\n      - \"[STATUS] == 200\"\n      - \"[RESPONSE_TIME] \u003C 1000\"\n```\n\nRestart with `cd \u002Fopt\u002Fstacks\u002Fgatus && docker compose restart gatus` — new endpoints appear on the status page within seconds.",{"title":64,"body":65},"Configure alerts","Add an `alerting:` block to your config. Example with ntfy (another Marketplace app):\n\n```yaml\nalerting:\n  ntfy:\n    url: \"http:\u002F\u002Fyour-ntfy-vps:8080\"\n    topic: \"gatus-alerts\"\n    priority: 3\n    failure-threshold: 2\n    success-threshold: 3\n\nendpoints:\n  - name: \"My API\"\n    url: \"https:\u002F\u002Fapi.example.com\u002Fhealth\"\n    interval: 1m\n    alerts:\n      - type: ntfy\n    conditions:\n      - \"[STATUS] == 200\"\n```\n\nGatus only alerts after 2 consecutive failures (avoids false positives) and sends a recovery alert after 3 consecutive successes.",{"title":67,"body":68},"Share the status page","The status page on port 8080 is ready to share immediately. Point a subdomain (`status.your-domain.com`) to your VPS IP and configure nginx to proxy port 8080 — or enable `requireDomain: true` in the Marketplace to get a full nginx vhost generated by ServOrbit.",[70],{"title":71,"body":72},"Logging in for the first time","Gatus has no accounts: the URL takes you straight to the status page, which is public by default. Your real first step is configuration — edit config.yaml to replace the sample endpoint with your own services, then restart it with docker compose restart gatus",{"type":74,"title":75,"body":76},"tip","Tip: version-control your config.yaml in a private repository","The Gatus `config.yaml` file is your source of truth for monitoring. Initialize a git repository in `\u002Fopt\u002Fstacks\u002Fgatus\u002F`, commit your config on every change, and you have a complete history of your monitored endpoints, alert thresholds and their evolution over time — just like your infrastructure code.","Your status page, your server","Deploy Gatus on a ServOrbit VPS and get config-as-code health monitoring with 40+ alert channels — no third party, no subscription, no heavy database.","Deploy Gatus","\u002Fmarketplace\u002Fmonitoring-observability\u002Fgatus",[82,102,118],{"id":83,"slug":84,"slugs":85,"title":88,"excerpt":89,"readTime":14,"views":15,"isPinned":16,"publishedAt":90,"category":91,"categories":97,"featuredImage":26,"bgImage":27,"posterImage":99,"relatedSolution":100},194,"self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd",{"fr":86,"en":84,"ar":87},"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.","2026-07-28T00:00:00+00:00",{"id":92,"name":93,"slug":94,"color":95,"icon":96},8,"Security & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[98],{"id":92,"name":93,"slug":94,"color":95,"icon":96},"\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":30,"appSlug":101},"ntfy",{"id":103,"slug":104,"slugs":105,"title":108,"excerpt":109,"readTime":110,"views":15,"isPinned":16,"publishedAt":111,"category":112,"categories":113,"featuredImage":26,"bgImage":27,"posterImage":115,"relatedSolution":116},105,"monitoring-your-vps-with-uptime-kuma",{"fr":106,"en":104,"ar":107},"superviser-vps-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","Monitoring your VPS with Uptime Kuma","Deploy Uptime Kuma on your VPS to monitor your sites and services self-hosted, with alerts and a public status page.",3,"2026-03-07T00:00:00+00:00",{"id":92,"name":93,"slug":94,"color":95,"icon":96},[114],{"id":92,"name":93,"slug":94,"color":95,"icon":96},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":30,"appSlug":117},"uptime-kuma",{"id":119,"slug":120,"slugs":121,"title":124,"excerpt":125,"readTime":126,"views":15,"isPinned":16,"publishedAt":127,"category":128,"categories":129,"featuredImage":26,"bgImage":27,"posterImage":131,"relatedSolution":132},133,"self-host-beszel-multi-server-monitoring-hub-on-your-vps",{"fr":122,"en":120,"ar":123},"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":92,"name":93,"slug":94,"color":95,"icon":96},[130],{"id":92,"name":93,"slug":94,"color":95,"icon":96},"\u002Fblog\u002Fcovers\u002Fself-host-beszel-vps-poster.svg",{"categorySlug":30,"appSlug":133},"beszel",1787581012124]