Uptime monitoring for Hetzner VPS with Coolify
Hetzner plus Coolify is a popular indie stack: cheap VPS, Git deploys, Traefik or Caddy in front, Docker containers without running your own PaaS control plane. Coolify’s UI shows container state on your server; it does not replace an external check on the same HTTPS URL customers curl, and it cannot alert you when the whole VPS or upstream network fails.
StillOnline probes from outside your Hetzner network, hosts a status page, and sends owner alerts via the StillOnline Telegram bot, Slack, or email when checks fail.
Quick answer
Self-hosted stacks on Hetzner Cloud plus Coolify still need a public GET /health on the production domain where Traefik or Caddy terminates TLS — returning 200 in under two seconds. Register that URL in StillOnline (not an internal Docker hostname); Free runs checks every five minutes on one URL (pricing). Brief red periods during container restarts are common — post scheduled maintenance or use a lightweight health route.
Why external checks matter behind Coolify
Coolify knows when a container restarts on the VPS. Customers only see your public HTTPS endpoint. Network issues, DNS mistakes, certificate problems, or a reverse-proxy misroute can leave Coolify “green” while the internet gets 502 or connection refused.
| Coolify shows | StillOnline adds |
|---|---|
| Container running on VPS | Customer-facing HTTPS truth |
| Deploy logs | Status page link for buyers |
| — | Telegram/Slack before your inbox fills |
Compare hosted vs self-managed monitoring: open-source vs hosted status page.
Step 1 — Health URL behind the reverse proxy
Add /health in your app image. Coolify proxy docs route traffic through the same domain as production — not localhost or an internal service name.
curl -sS -o /dev/null -w "%{http_code}\n" https://api.yourproduct.com/health
Verify from a machine outside the VPS. SSHing into Hetzner and curling localhost does not match what StillOnline sees.
Typical false positives:
| Problem | Solution |
|---|---|
| Container restart during deploy | Short red window — normal; wait for recovery or post maintenance |
| Health checks DB on every probe | Noisy — lightweight liveness on /health |
| Wrong Traefik label / domain | External check fails while Coolify UI looks fine — fix routing first |
| Only monitoring Coolify dashboard URL | Dashboard may be up while app domain is down — monitor app hostname |
Step 2 — Register in StillOnline
- Sign in.
- New project → product name.
- HTTP check → public HTTPS
/health, GET, 200, five-minute interval (Free). - Share status page in docs — public status page guide.
You do not install an agent on Hetzner; StillOnline only HTTP-gets the URL you paste.
Step 3 — Owner alerts
Coolify does not replace on-call pings. Settings → Connect Telegram → StillOnline bot → Start — Telegram guide.
Free: one owner channel. Pro / Ultimate: all three — pricing.
Related guides
- Health check URL quickstart
- Docker Compose on VPS
- Open-source vs hosted status page
- Telegram owner alerts
FAQ
Does StillOnline install on my Hetzner VPS or Coolify?
No. StillOnline runs external HTTP probes only. Your Coolify deploy flow stays the same — register the public health URL after curl works from the internet.
Why does StillOnline go red during Coolify redeploys?
Container restarts briefly drop the public route. That is expected unless you use zero-downtime deploys. Post maintenance or tune expectations — see health endpoint design.
Should I monitor the Coolify admin UI URL?
Monitor the app domain customers use, not the Coolify panel alone. The panel can load while your product hostname fails.
Can I replace Uptime Kuma on the same VPS with StillOnline?
Many teams move the customer-facing status page to hosted StillOnline while keeping Coolify on Hetzner — Kuma time cost vs hosted · status page without Kuma.