Ugrás a tartalomhoz
Vissza a bloghoz
·11 perc olvasás
Multi-tenant SaaS Next.js-szel: sablontól a termelésig
WebSaaSNext.jsMulti-tenant

Multi-tenant SaaS Next.js-szel: sablontól a termelésig

Egy multi-tenant Next.js SaaS referenciaarchitektúrája 2026-ból: custom domain, RLS, per-tenant feature flag és billing. Nincs lufi.

Legutóbb ellenőrizve
Mező Dezső
Szerző Mező DezsőAlapító, DField Solutions
MegosztásXLinkedIn#

Szakmai ellenőrzés:Mező Dezső· Alapító · Mérnök, DField Solutions· 2026. márc. 10.

Ha a te SaaS-ed 10+ tenant fölé skálázik, a multi-tenant architektúra nem luxus, hanem túlélés. Itt az általunk használt referencia-stack Next.js-szel és Postgres Row-Level Security-vel. Ugyanezt szállítjuk a Web és webalkalmazás szolgáltatásunk keretében.

1. Tenant-felismerés: subdomain vs custom domain

A subdomain (acme.app.com) a default. A custom domain (app.acme.com) szerepel a Growth csomagban. Next.js middleware-ben feloldjuk a tenant-et és hozzá-csapjuk a request-hez.

// middleware.ts — tenant resolution
import { NextResponse, type NextRequest } from "next/server";

export async function middleware(req: NextRequest) {
  const host = req.headers.get("host") || "";
  const subdomain = host.replace(/\.app\.com$/, "");
  const tenant = await resolveTenantBySubdomain(subdomain);
  if (!tenant) return NextResponse.redirect(new URL("/404", req.url));

  const res = NextResponse.next();
  res.headers.set("x-tenant-id", tenant.id);
  return res;
}

2. Adatizoláció: Row-Level Security vs schema-per-tenant

Postgres RLS (PolicyScope) jól működik ~500 tenant-ig. Efölött schema-per-tenant (vagy cluster-per-tenant nagy ügyfeleknek). Mi default RLS-t használunk, kritikus ügyfeleknek dedikált schema-t.

3. Feature flag per-tenant

A Growth csomag más feature-t lát, mint az Enterprise. Ezt NEM if-elseif-ben csináljuk — PostHog feature flag + tenant group. A kód tiszta marad.

4. Billing: Stripe + per-seat + usage

  • Stripe Subscription per-tenant, customer = tenant.
  • Metered billing a usage-alapú termékekhez.
  • Webhook → Postgres → cache invalidation.

5. Background job per-tenant

Ne egy globál queue-ban fussanak a tenant-job-ok. BullMQ per-tenant queue vagy Temporal namespace. Így egy csapkodó tenant nem dönti be a többit.

Összefoglaló

Ez az architektúra 2–8 hét alatt felállítható. Ha most indítasz SaaS-t, kezdettől multi-tenant legyen — később átállni sokkal többe kerül.

MegosztásXLinkedIn#
Mező Dezső

Szerző

Mező Dezső

Alapító, DField Solutions

Fintechtől kreátor-toolingig építek produkciós termékeket — startupoknak és vállalatoknak egyaránt, Budapesttől San Franciscóig.

Folytatás

Inkább építenénk együtt?

Beszéljünk a projektedről. 30 perc, nincs kötelezettség.

Beszéljünk