← Блог

Мониторинг health check в Next.js для SaaS

Next.js (App Router на Vercel, Railway или self-hosted) — дефолтный стек многих indie SaaS. Нужен /api/health Route Handler, который внешний мониторинг вызывает без session cookie — и нужно решить, что значит «здоров», не сливая секреты и не долбя Postgres на каждую внешнюю проверку.

StillOnline выполняет HTTP GET с этого маршрута снаружи хоста, публикует страницу статуса и шлёт алерты через бота StillOnline, Slack или email.

Краткий ответ

Route Handlers в Next.js позволяют добавить app/api/health/route.ts с 200 + { "status": "ok" } быстрее двух секунд на production HTTPS. Зарегистрируйте URL в StillOnline — на Free один проект, один URL, проверка каждые пять минут (тарифы). По умолчанию liveness; DB ping — только если «up» = «БД доступна»; без секретов в JSON.

Шаблон Route Handler (App Router)

Для Vercel Edge держите handler edge-compatible — или runtime = 'nodejs', если нужны Prisma и native drivers.

// app/api/health/route.ts
import { NextResponse } from "next/server";

export const dynamic = "force-dynamic"; // не кэшировать проверку

export async function GET() {
  return NextResponse.json({ status: "ok" }, { status: 200 });
}

Опциональный DB ping с коротким timeout на serverless — только если готовы к более шумным проверкам.

Трейдоффы: дизайн health URL.

Что не светить публично

Не возвращатьПочему
URL БД и API keysУтечка на публичном маршруте
Версии зависимостей детальноПоверхность атаки
Счётчики пользователей и выручкиПриватность и шум
Stack trace при ошибке{ "status": "error" } + 503

StillOnline смотрит код и время ответа — но /api/health читают и сканеры.

Кэш и CDN

ПроблемаРешение
/api/health закэширован как staticdynamic = "force-dynamic" или revalidate = 0
Middleware редиректит без authИсключите /api/health
Cold start VercelМинимальный handler — гайд Vercel

Снаружи:

curl -sS https://yourdomain.com/api/health

StillOnline

  1. Вход.
  2. Новый проект.
  3. /api/health, GET, 200, 5 мин (Free).
  4. Страница статуса в API docs — быстрый старт.

Настройкибот StillOnlineTelegram.

Связанные материалы

FAQ

Health в Next.js должен пинговать Postgres или Supabase?

Только если «up» = «БД доступна». Liveness-only снижает ложные срабатывания при миграциях — дизайн health · Neon/PlanetScale.

StillOnline работает с Next.js на Vercel Edge Runtime?

Да, если /api/health отдаёт 200 по публичному HTTPS. Edge не тянет некоторые Node DB drivers — проектируйте health или используйте nodejs runtime для DB ping.