Sentinella: the monitor that watches over my server and alerts me on Telegram

The tool that watches over the server where my websites and apps run: every minute it checks sites, certificates, DNS, containers and services, backups, memory and deployments, and when something breaks it messages me on Telegram, once, and again when it recovers. It only reads, with no privileges. The dashboard can be tried on a made-up server.

About twenty websites and apps run on my server: client sites, demo sites and my own apps. **Sentinella** (Italian for "sentinel") watches over them, and I really use it: it isn't a demo for a made-up business, even though from here you try it on a made-up server.

**What it does**

- **Sites**, every minute: status code, response time and content of their health page, and from the same connection the certificate, with reminders at 30, 14 and 7 days. - **DNS**, asked of the provider's own servers: every name must lead to the server, with no stray IPv6 address, a failure I had already run into. - The Docker **containers** the apps run in, and the server's **services and timers**: what has stopped, what keeps restarting or runs out of memory, and the nightly database backups, succeeded or late, and which apps have no backup at all. - **Memory, swap, disks and load**, and each container's memory, read from the system without installing anything. - **Deployments** from GitHub Actions, which become markers on each site's response-time chart.

When something breaks it messages me on Telegram once, and again when it recovers, with the duration. Failures that start together become a single message; at night messages arrive silently, and during an update they can be paused.

**The hard part: security.** A tool that sees the whole server must not become a map for anyone attacking it. Sentinella **only reads**: it runs in an unprivileged, read-only container and can't restart anything; it sees Docker through a proxy that lets the container list and its events through, never the inspection that would reveal the other apps' passwords. The dashboard sits behind a password and an authenticator-app code. The **public status page** has a closed list of fields: it only says whether each site works and its 30-day uptime, and an automated test fails if a port or a path ever ends up in it. And since a monitor on the same server can't report that the server is down, every minute it sends a heartbeat to Healthchecks.io, which alerts me from outside.

The server's memory is shared with about twenty apps: Sentinella has a 160 MB cap, and stores checks in one row per site per hour.

The dashboard demo runs in the browser, on a made-up server with nine sites: after a minute and a half one site stops responding, and you see the incident and the Telegram message it would have sent.

Vue 3 and TypeScript with Nuxt UI, Fastify and PostgreSQL, in Docker containers on Debian. Every change goes through 402 automated tests; a release builds the image on the server, backs up the database first and rolls back on its own if the new version doesn't respond.

Design, full-stack development and deployment · 2026

Vue.js, Fastify, PostgreSQL, Docker

View the site

Andrea Coppetta