← Blog

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 showsStillOnline adds
Container running on VPSCustomer-facing HTTPS truth
Deploy logsStatus 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:

ProblemSolution
Container restart during deployShort red window — normal; wait for recovery or post maintenance
Health checks DB on every probeNoisy — lightweight liveness on /health
Wrong Traefik label / domainExternal check fails while Coolify UI looks fine — fix routing first
Only monitoring Coolify dashboard URLDashboard may be up while app domain is down — monitor app hostname

Step 2 — Register in StillOnline

  1. Sign in.
  2. New project → product name.
  3. HTTP check → public HTTPS /health, GET, 200, five-minute interval (Free).
  4. 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. SettingsConnect TelegramStillOnline botStartTelegram guide.

Free: one owner channel. Pro / Ultimate: all three — pricing.

Related guides

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.