SaaS

Как я построил SaaS-мониторинг сайтов за один день

03.07.2026  · 

Идея

Сервис, где любой регистрируется, добавляет свои сайты и получает уведомления, когда что-то падает — аналог UptimeRobot, но на собственной инфраструктуре. Заодно — первый полноценный SaaS-кейс: мультитенантность, биллинг-готовность, публичные статус-страницы.

Архитектура

Приложение (Nuxt 3 + PostgreSQL) живёт в LXC-контейнере Proxmox на домашнем сервере, наружу опубликовано через nginx с TLS на облачном узле по WireGuard-туннелю. Проверки сайтов выполняет отдельный воркер в облаке — намеренно не из дома: мониторинг должен идти из стабильной сети, иначе сбой домашнего провайдера дал бы ложные алерты всем пользователям. Алерты уходят в Telegram через прокси-слой (Telegram API из России напрямую недоступен).

Мультитенантность и безопасность

Вход через Telegram Login с проверкой подписи по HMAC. Каждый пользователь видит только свои сайты — изоляция на уровне запросов. Критичная деталь для сервиса, который ходит по чужим URL: защита от SSRF — сервис отклоняет попытки добавить внутренние адреса (приватные диапазоны, метадата-эндпоинты облака, localhost), чтобы через него нельзя было просканировать внутреннюю сеть. Плюс rate-limiting по пользователю и лимиты тарифа.

Что умеет

Проверки доступности, HTTP-кода, времени ответа и срока SSL-сертификата каждые 5 минут. Инциденты с защитой от «дребезга» (алерт только после двух подряд сбоев). Дашборд с uptime за 24 часа и 30 дней, графиком латентности и историей инцидентов. Публичные статус-страницы с динамическим SVG-бейджем «uptime 99.9%» для встраивания.

Эксплуатация

Код в собственном Gitea с CI/CD: push собирает и атомарно деплоит с автооткатом. База бэкапится ночью с репликацией на второй узел и проверкой восстановимости; отдельный сторож шлёт алерт, если бэкап не пришёл. Сервис под мониторингом Zabbix и Grafana наравне с остальной инфраструктурой.

Итог

За один день — от пустого контейнера до работающего SaaS в проде: регистрация, мультитенантность, воркеры, публичные страницы, бэкапы, мониторинг. Стек: Nuxt 3, PostgreSQL, Node.js, nginx, WireGuard, Proxmox LXC, Gitea CI/CD, Telegram Bot API.

← Свой мессенджер на Matrix: Synapse, федерация и видеозвонкиTelegram-боты и их применения: обзор на реальных примерах →