Kennisbank › Nodejs › Node.js installeren
nodejs starter 08 September 2026

Node.js installeren

Node.js is een server-side JavaScript-runtime die gebruikmaakt van de V8-engine uit Google Chrome. Dit artikel legt uit hoe je Node.js installeert op een

Node.js is een server-side JavaScript-runtime die gebruikmaakt van de V8-engine uit Google Chrome. Dit artikel legt uit hoe je Node.js installeert op een Linux-server, een eerste applicatie draait en het geheel als een systeemservice beheert — voor ontwikkelaars die een backend of API in JavaScript willen draaien.

Vereisten

  • Een Linux-server (Ubuntu 22.04 of 24.04, Debian 12, of een andere distributie met systemd)
  • Toegang tot de server via SSH met een gebruiker die `sudo`-rechten heeft
  • Geen bestaande Node.js-installatie die conflicteert (controleer met `node --version`)

Node.js installeren

De snelste route is de NodeSource-repository. Die biedt recentere versies dan de standaard distro-pakketten. Ubuntu 22.04 levert bijvoorbeeld Node.js 12 uit de doos — die is al sinds april 2022 end-of-life. NodeSource geeft je Node.js 20 LTS of 22 LTS, afhankelijk van wat je kiest.

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs

Dit voegt de NodeSource-repository toe aan je apt-bronnen en installeert zowel `nodejs` als `npm`. De `-E`-flag bij sudo zorgt dat je eigen omgevingsvariabelen behouden blijven, wat NodeSource nodig heeft om de juiste repository te selecteren.

Kies je voor Node.js 20 in plaats van 22, vervang dan `setup_22.x` door `setup_20.x`. Node 20 is LTS tot april 2026, Node 22 tot april 2027. Voor een nieuwe server is 22 de verstandigste keuze; je hoeft minder snel te migreren.

Een eerste applicatie draaien

Maak een projectmap en een minimaal HTTP-script:

mkdir ~/node-app && cd ~/node-app
npm init -y

Het `npm init -y`-commando maakt een `package.json` aan met standaardwaarden. Die kun je later aanpassen; voor nu is het genoeg om dependencies te kunnen installeren.

Maak een bestand `server.js`:

const http = require('http');</p><p>const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Node.js draait op Pixzo\n');
});</p><p>server.listen(3000, () => {
  console.log('Server luistert op poort 3000');
});

Dit is bewust de kale `http`-module, geen Express. Voor een eerste test wil je zien dat de runtime werkt, niet dat een framework het netjes verpakt. Express komt later wel.

Start de server:

node server.js

Open een tweede SSH-sessie en test:

curl http://localhost:3000

Je ziet de regel tekst die het script teruggeeft. De server draait — maar alleen zolang je SSH-sessie open is. Sluit de terminal en de server sterft. Voor een echte deployment wil je een procesmanager of een systemd-service.

De applicatie als systemd-service draaien

systemd is de standaard init-systeem op vrijwel elke moderne Linux-distributie. Het herstart je applicatie bij een crash, start hem op bij het opstarten van de server en logt netjes naar journald.

Maak een servicebestand aan:

sudo nano /etc/systemd/system/node-app.service

[Unit]
Description=Node.js applicatie
After=network.target</p><p>[Service]
ExecStart=/usr/bin/node /home/gebruikersnaam/node-app/server.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production
User=gebruikersnaam</p><p>[Install]
WantedBy=multi-user.target

Vervang `gebruikersnaam` door je eigen gebruikersnaam. Het `User=`-veld is belangrijk: draai de service niet als root. Als je Node.js-applicatie wordt gecompromitteerd, heeft de aanvaller dan alleen rechten van die ene gebruiker, niet van het hele systeem.

sudo systemctl daemon-reload
sudo systemctl enable --now node-app

`enable` zorgt dat de service bij het opstarten wordt gestart, `--now` start hem direct. Controleer de status:

sudo systemctl status node-app

Je ziet `active (running)` en de laatste logregels. De server draait nu onafhankelijk van je SSH-sessie.

Verificatie

curl http://localhost:3000
node --version
npm --version

De eerste geeft de tekst van je applicatie terug. De tweede en derde tonen respectievelijk de Node.js- en npm-versies. Node.js 22.x en npm 10.x zijn de versies die je zou moeten zien na een verse installatie via NodeSource.

Veelgestelde problemen

Poort 3000 is al bezet. Je ziet een foutmelding `EADDRINUSE`. Zoek de proces die de poort bezet houdt met `sudo lsof -i :3000` en stop die, of verander de poort in je script naar bijvoorbeeld 3001.

`node` wordt niet gevonden in de systemd-service. De service gebruikt een absoluut pad naar het binary. Controleer met `which node` waar je Node.js-installatie staat en pas `ExecStart` aan. Bij een NodeSource-installatie is dat meestal `/usr/bin/node`, maar als je Node.js via nvm of een andere versiebeheerder hebt geïnstalleerd, staat het ergens anders en werkt het pad niet.

De service start maar blijft herstarten. Bekijk de logs met `sudo journalctl -u node-app -n 50`. Staat er een fout in je JavaScript, dan zie je die hier. De `Restart=always`-instelling blijft de service namelijk opnieuw starten, ook bij een syntaxfout — de logs vertellen je wat er mis is.

Wat dit je kost

Deze opzet is eenvoudig en robuust, maar niet compleet. Er zit geen reverse proxy voor, geen HTTPS, geen procesmanager met clustering. Voor een publieke server zet je er Nginx of Caddy voor, die de TLS-terminatie afhandelt en verkeer doorstuurt naar poort 3000. Voor een applicatie die meerdere CPU-kernen wil benutten, heb je de cluster-module van Node.js of een procesmanager als PM2 nodig — systemd kan maar één proces per service draaien.

Dat is de afweging: dit artikel geeft je een draaiende Node.js-server in tien minuten. Schaalbare architectuur bouw je daarna, als de eerste versie het bewijst. Zelf hosten klinkt prachtig, tot er iets omvalt op zondagavond half twaalf. Dan ben je geen klant die op de helpdesk wacht. Dan bén je de helpdesk — en dan is het fijn dat je weet waarom de service zo staat als hij staat.

← Terug naar kennisbank
← Terug naar kennisbank