[{"data":1,"prerenderedAt":145},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-gatus-on-a-vps-config-as-code-status-page-and-checks-ma-en":6,"promo-bar-likely":144},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-gatus-on-a-vps-config-as-code-status-page-and-checks-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":81,"ctaBody":82,"ctaButton":83,"ctaUrl":84,"relatedPosts":85},209,"self-host-gatus-on-a-vps-config-as-code-status-page-and-checks",{"fr":12,"en":10,"ar":13,"es":14},"self-host-gatus-vps","استضافة-gatus-على-vps-صفحة-حالة-بالكود-ومراقبة-شاملة","alojar-gatus-en-un-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,1,false,"2026-08-02T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-gatus-vps-poster.svg",{"categorySlug":34,"appSlug":35},"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.",[38,42,51,54,77],{"type":39,"title":40,"body":41},"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":43,"title":44,"items":45},"ul","What Gatus monitors — and Uptime Kuma can't",[46,47,48,49,50],"**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":39,"title":52,"body":53},"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":55,"title":56,"items":57,"steps":73},"steps","Self-hosting Gatus on a VPS in 6 steps",[58,61,64,67,70],{"title":59,"body":60},"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":62,"body":63},"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":65,"body":66},"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":68,"body":69},"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":71,"body":72},"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.",[74],{"title":75,"body":76},"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":78,"title":79,"body":80},"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","\u002Fapplications\u002Fmonitoring-observability\u002Fgatus",[86,109,127],{"id":87,"slug":88,"slugs":89,"title":93,"excerpt":94,"readTime":95,"views":96,"isPinned":19,"noindex":19,"publishedAt":97,"updatedAt":21,"category":98,"categories":104,"featuredImage":30,"bgImage":31,"posterImage":106,"relatedSolution":107},194,"self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd",{"fr":90,"en":88,"ar":91,"es":92},"self-host-ntfy-vps","استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd","autoalojar-ntfy-en-un-vps","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.",16,2,"2026-07-28T00:00:00+00:00",{"id":99,"name":100,"slug":101,"color":102,"icon":103},8,"Security & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[105],{"id":99,"name":100,"slug":101,"color":102,"icon":103},"\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":34,"appSlug":108},"ntfy",{"id":110,"slug":111,"slugs":112,"title":116,"excerpt":117,"readTime":99,"views":118,"isPinned":19,"noindex":19,"publishedAt":119,"updatedAt":120,"category":121,"categories":122,"featuredImage":30,"bgImage":31,"posterImage":124,"relatedSolution":125},105,"monitoring-your-vps-with-uptime-kuma",{"fr":113,"en":111,"ar":114,"es":115},"superviser-vps-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","supervisar-vps-con-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.",0,"2026-03-07T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":99,"name":100,"slug":101,"color":102,"icon":103},[123],{"id":99,"name":100,"slug":101,"color":102,"icon":103},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":34,"appSlug":126},"uptime-kuma",{"id":128,"slug":129,"slugs":130,"title":134,"excerpt":135,"readTime":99,"views":96,"isPinned":19,"noindex":19,"publishedAt":136,"updatedAt":137,"category":138,"categories":139,"featuredImage":30,"bgImage":31,"posterImage":141,"relatedSolution":142},133,"self-host-beszel-multi-server-monitoring-hub-on-your-vps",{"fr":131,"en":129,"ar":132,"es":133},"self-host-beszel-vps","استضف-beszel-على-vps-مركز-مراقبة-متعدد-الخوادم","alojar-beszel-hub-monitorizacion-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.","2026-02-14T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":99,"name":100,"slug":101,"color":102,"icon":103},[140],{"id":99,"name":100,"slug":101,"color":102,"icon":103},"\u002Fblog\u002Fcovers\u002Fself-host-beszel-vps-poster.svg",{"categorySlug":34,"appSlug":143},"beszel",true,1794270485511]