Een ontwikkelaar stuurt zijn Express-applicatie via FTP naar gedeelde PHP-hosting. Er start niets: geen permanente node server.js, geen poort 3000 zichtbaar, geen reverse proxy geconfigureerd. Het is niet Node.js dat "ingewikkeld" is - het is Node.js gehost als PHP, waarbij elk verzoek een tolk zou lanceren die onmiddellijk sterft.
Als u uw eerste Node.js-applicatie host, betekent dit dat u een ander uitvoeringsmodel accepteert. PHP-FPM handelt korte verzoeken af; Node.js onderhoudt een levend proces dat de status in het geheugen bijhoudt, naar een HTTP-poort luistert en op verbindingen wacht. Zonder procesmanager, proxy en automatische herstart beëindigt de eerste golf van verkeer (of de eerste crash van het proces) uw ‘go live’.
PHP en Node.js: twee uitvoeringsmodellen
| Uiterlijk | Klassieke PHP (FPM) | Knooppunt.js |
|---|---|---|
| Proces | Kort, op aanvraag | Lang, aanhoudend |
| Luister | Via Apache of nginx naar FPM | Eigen HTTP-poort |
| Staat in geheugen | Beperkt | Sessies, applicatiecache mogelijk |
| Implementatie | Bestanden + OP-cache | npm ci, build, herstart proces |
| Opschalen | Meer FPM-werknemers | PM2-cluster, meerdere exemplaren |
Node.js behandelen als PHP is hetzelfde als aan een restaurant vragen om de oven voor elke bestelling opnieuw op te warmen.
Op een gedeelde PHP weet de webserver hoe .php-bestanden moeten worden uitgevoerd. Het weet niet hoe een Node.js-proces actief moet blijven tussen twee verzoeken. Zelfs als je server.js uploadt, start niemand het op - en start niemand het opnieuw op als het om 3 uur 's nachts crasht.
Minimale stapel voor een eerste productie
1. Continue integratie-build. npm ci, geautomatiseerde tests, npm run build als een frontend is gecompileerd. De productie krijgt een getest artefact, geen geïmproviseerde 'git pull'.
2. Procesmanager. PM2-ecosysteembestand of systeemeenheid met Herstart=altijd. Het proces moet niet-opgevangen fouten overleven en opnieuw opstarten bij het opstarten van de server.
3. Reverse proxy. nginx met proxy_pass naar 127.0.0.1:POORT. Node.js stelt poort 3000 niet rechtstreeks bloot aan internet; de proxy verwerkt TLS, headers en compressie.
4. TLS-versleuteling. Laten we versleutelen op nginx, niet in Node.js, tenzij specifiek beperkt. Geautomatiseerde verlenging en gedocumenteerde nginx-herlading.
5. Omgevingsvariabelen. NODE_ENV=productie, geheimen via omgevingsvariabelen — nooit vastgelegd in de repository. Een .env-bestand op de server, beperkte rechten.
6. Logboeken. geaggregeerde stdout en stderr; rotatie bij schrijven naar schijf. Zonder gecentraliseerde logs blijft een nachtelijke crash tot maandagochtend onzichtbaar.
7. Health check. Route /health voor monitoring en load-balancing. Zonder dit kan een zombieproces "online" blijven zonder verzoeken te behandelen.
Kies de juiste host
| Opties | Voor wie |
|---|---|
| PaaS-knooppunt (spoorweg, slimme cloud, Heroku-achtig) | Eerste toepassing, weinig gebruik |
| VPS + PM2 | Volledige controle, voorspelbare kosten |
| Container (Docker, Kubernetes) | Team al gecontaineriseerd |
Vermijd “gedeelde PHP onbeperkt” aanbiedingen zonder expliciete vermelding van Node.js – dit is het verkeerde product. Vergelijk PaaS- en VPS-aanbiedingen in onze overzicht en de vergelijking. Voor de langlopende implementatiecultuur, zie ook Django in productie en PM2 en implementatie — andere stapels, dezelfde principes.
Klassieke fouten bij de eerste productie
node_modulesgeüpload van Windows naar Linux zonder de oorspronkelijke modules opnieuw op te bouwen — bcrypt, Sharp en sqlite3 crashen geruisloos.- Applicatie die luistert naar
0.0.0.0zonder firewall: de Node.js-poort wordt direct zichtbaar, waarbij nginx wordt omzeild. - Geen geheugenlimiet — een JavaScript-lek doodt de hele server na een paar uur.
- Vergeten WebSockets in nginx-configuratie — De headers 'Upgrade' en 'Connection' ontbreken, realtime werkt niet.
- Implementatie = git pull zonder PM2-herstart — de oude code draait nog steeds in het geheugen.
Elke fout is voorspelbaar. Geen enkele is onvermijdelijk als je de volledige cyclus test voordat je de release aankondigt.
De bovenkant: Node.js vraagt om een host die een proces laat leven
Dit is wat de tutorials voor ‘implementeren in vijf minuten’ vergeten te zeggen.
Beslis en ga vooruit zonder blinde vlek
In één dag kunt u de basis leggen voor echte Node.js-productie:
- Valideren een Node.js-, PaaS- of VPS-aanbieding met root-toegang.
- Configureer PM2 of systemd en vervolgens nginx als reverse proxy.
- Automatiseer de implementatie door het proces bij elke release opnieuw te starten.
- Test crashherstel — beëindig het proces handmatig en controleer het opnieuw opstarten.
- Monitor geheugen en aantal PM2-herstarts.
Begin met het valideren dat uw host een persistent proces toestaat; dit is een niet-onderhandelbare voorwaarde. Documenteer vervolgens wie de configuratie wijzigt, hoe u nginx opnieuw opstart na TLS-vernieuwing en waar u de logboeken kunt lezen in geval van een crash. Voor meer informatie over geheugenlekken, zie Node.js memory lek.
Veelgestelde vragen
Kunnen we Node.js hosten op een gedeeld PHP-platform?
Zelden. Een gedeelde PHP onderhoudt geen persistent Node.js-proces, stelt geen aangepaste poort beschikbaar of configureert geen omgekeerde proxy voor uw applicatie. Zoek naar een speciaal Node.js-aanbod, PaaS of VPS.
PM2 of systeem in productie?
Beide werken. PM2 vereenvoudigt de clustermodus en naadloos herladen; systemd integreert native met het Linux-systeemlogboek. In beide gevallen is automatisch opnieuw opstarten na een crash en bij het opstarten van de server verplicht.
Moet nginx vóór Node worden gebruikt?
Ja in de praktijk: nginx beheert TLS-encryptie, HTTP/2, statische bestanden en snelheidsbeperking. Node.js luistert lokaal op een interne poort, nginx routeert openbaar verkeer ernaartoe.
Hoe implementeren zonder serviceonderbreking?
Gebruik PM2-herladen, een blauwgroene implementatie of twee instanties achter een load balancer. Bouw altijd met npm ci in continue integratie, nooit handmatig op de productieserver.
Node.js in productie is geen geüpload bestand; het is een proces dat iemand in leven moet houden.
