Architectuur

Vercel of zelf hosten: wat past bij jouw product?

Voor een klein Next.js-team is Vercel meestal de snelste weg naar productie. Zelf hosten in Docker loont bij constant verkeer of als je al servers en beheer hebt.

Serverkasten vol netwerkkabels
Foto: Taylor Vick via Unsplash

Voor een klein team met een Next.js-product, waarin niemand servers wil beheren, is Vercel meestal de snelste weg naar productie. Zelf hosten met Docker wordt interessant zodra je voorspelbare kosten wilt, je verkeer constant is of je al servers hebt en iemand die ze bijhoudt. Deze site hosten we zelf, in een Docker-container, en toch zou ik voor sommige klanten Vercel kiezen.

Wat je bij Vercel betaalt

Het gratis Hobby-plan valt voor een bedrijf af. Vercel beperkt Hobby in zijn eigen voorwaarden tot persoonlijk, niet-commercieel gebruik, dus voor een product waar je geld mee verdient zit je minimaal op Pro.

Pro kost 20 dollar per maand, met één seat die mag deployen en 20 dollar aan gebruikstegoed. Elke extra developer die deployt kost 20 dollar per maand, viewers zijn gratis. Met vijf developers die deployen betaal je dus 100 dollar per maand voordat er één request is verwerkt. Alle bedragen zijn exclusief btw.

Daarbovenop komt het gebruik. Functies rekenen af op actieve CPU-tijd en op geheugen. CPU telt alleen terwijl je code echt draait, niet terwijl hij wacht op een database of een externe API, maar geheugen loopt door zolang een instantie requests afhandelt. Een API die vooral wacht, is op Vercel dus relatief goedkoop. Beeldbewerking en zware berekeningen kosten meer.

Vercel stuurt standaard een melding bij 200 dollar per factuurperiode. Mijn advies is om op dag één een eigen grens en een automatische actie in te stellen, zodat je na een drukke maand niet schrikt van de rekening.

Waar je op moet letten bij Vercel

Nieuwe projecten draaien hun functies standaard in Washington D.C. (iad1). Voor een Europees product met een database in Frankfurt gaat dan elke databasequery de oceaan over en terug. Zet de regio in de projectinstellingen of in vercel.json dicht bij je database, bijvoorbeeld Frankfurt (fra1), Parijs (cdg1) of Dublin (dub1). Dat scheelt latency, en voor je AVG-documentatie is het ook prettiger als je functies in de EU draaien.

Functies hebben een maximale duur. Op Hobby is dat 300 seconden, op Pro is de standaard ook 300 seconden en kun je hem verhogen tot 800. Lange imports, rapportages of AI-taken die minuten duren, horen daarom in een queue met een aparte worker.

De afhankelijkheid zit minder in Next.js dan je misschien denkt. Volgens de Next.js-documentatie ondersteunen een gewone Node.js-server en een Docker-container alle functies van het framework. De lock-in zit in de diensten eromheen, zoals opslag (Blob), configuratie (Global Config) en firewallregels die je in het Vercel-dashboard instelt. Hoe meer je daarvan gebruikt, hoe meer werk een verhuizing wordt.

Wat zelf hosten met Docker betekent

Deze site is een Next.js-app met output: "standalone". Bij elke push naar main bouwt GitHub Actions er een Docker-image van en zet het in een container registry. Waar dat image daarna draait, maakt voor de app niet uit.

Wat je wel zelf regelt:

  • een reverse proxy voor de container (Next.js raadt dat zelf aan, voor rate limiting, limieten op de grootte van requests en trage verbindingen),
  • updates van het besturingssysteem en van de base image,
  • monitoring en logs,
  • backups van alles wat geen container is, zoals je database,
  • iemand die opneemt als het 's nachts misgaat.

Met één instantie werkt Next.js direct. Zet je er twee of meer achter een load balancer, dan regel je een paar dingen zelf. De cache staat standaard op de lokale schijf van elke instantie, dus je hebt een gedeelde cache handler nodig, bijvoorbeeld op Redis. Alle instanties moeten dezelfde sleutel voor Server Functions gebruiken (NEXT_SERVER_ACTIONS_ENCRYPTION_KEY). Met een vaste deploymentId voorkom je bovendien dat browsers tijdens een uitrol bestanden van de oude versie opvragen.

Vast bedrag of betalen per gebruik

Een VPS of een VM bij een cloudprovider kost elke maand hetzelfde, of er nu tien of tienduizend bezoekers komen. Bij Vercel groeit de rekening mee met je verkeer en je team. Bij weinig of wisselend verkeer is Vercel daardoor vaak goedkoper, bij constant veel verkeer of veel rekenwerk wint meestal een eigen server.

Reken bij zelf hosten wel de uren mee. Een server die niemand bijhoudt, is goedkoop tot de dag dat hij omvalt. Ik zou elke maand een paar uur onderhoud inplannen, ook als er niets aan de hand lijkt, voor updates en om een restore te testen. Waar cloudkosten meestal weglekken, staat in cloudkosten onder controle.

Welke keuze bij welke situatie

SituatieMijn keuze
Nieuw product, klein team, niemand voor beheerVercel Pro, functies in een EU-regio, met een uitgavengrens
Constant verkeer, veel rekenwerk of lange takenDocker op een eigen VPS of in je eigen cloudaccount
Database, workers en queues draaien al in containersDocker, zodat alles op één plek staat
Frontend die vaak verandert, API apartFrontend op Vercel, API en workers in containers dicht bij de database

In elke situatie zou ik een werkende Dockerfile in de CI houden, ook als je op Vercel draait. Dan weet je dat je kunt verhuizen, en dat zegt meer dan een migratieplan op papier. Aleksa werkt de afweging tussen functies en eigen servers verder uit in serverless of eigen servers, en wanneer containers op een cluster horen in heb je Kubernetes nodig.

Hoe wij het doen

Voor onze eigen site kozen we Docker. Bij klanten werken onze developers op het platform dat de klant al gebruikt, zoals Azure, AWS, Google Cloud of eigen servers. Met welke stacks en platforms we werken, zie je op de pagina technologie.

Bronnen

Veelgestelde vragen

Mag je het gratis Hobby-plan van Vercel zakelijk gebruiken?

Nee. Vercel beperkt het Hobby-plan tot persoonlijk, niet-commercieel gebruik. Voor een product waar je geld mee verdient heb je minimaal het Pro-plan nodig.

Werkt Next.js zonder Vercel net zo goed?

Ja. Volgens de Next.js-documentatie ondersteunen een Node.js-server en een Docker-container alle functies. Draai je meer dan één instantie, dan regel je zelf een gedeelde cache en één encryptiesleutel voor Server Functions.

Wat kost Vercel Pro per maand?

Pro kost 20 dollar per maand, inclusief één seat die mag deployen en 20 dollar gebruikstegoed. Elke extra seat die deployt kost 20 dollar per maand. Gebruik boven het tegoed betaal je per eenheid, alles exclusief btw.

Over de auteur

Bas Leijder Havenstroom

Bas Leijder Havenstroom

Algemeen directeur

Bas richtte samen met Erik Schoorl ESBL op, een van de twee bedrijven achter Brainpower Group. Hij is algemeen directeur van ESBL B.V. en het eerste aanspreekpunt voor klanten.

Meer van Bas
Contact
Bas Leijder HavenstroomMaarten ter VeldeBarry Willems

Vertel ons wie je zoekt.

Een kennismaking duurt een half uur, online of op ons kantoor in Amsterdam. In de chat antwoorden we meestal binnen een paar minuten.

Of bel +31 20 210 1978hello@brainpowergroup.eu

Bas, Maarten en BarryNu live · antwoord binnen een paar minuten

Na het versturen gaat de chat open.