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 u 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 u 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 u Node.js 20 LTS of 22 LTS, afhankelijk van wat u 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 uw apt-bronnen en installeert zowel `nodejs` als `npm`. De `-E`-flag bij sudo zorgt dat uw eigen omgevingsvariabelen behouden blijven, wat NodeSource nodig heeft om de juiste repository te selecteren.

Kiest u 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; u 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 kunt u 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 wilt u 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

U ziet de regel tekst die het script teruggeeft. De server draait — maar alleen zolang uw SSH-sessie open is. Sluit u de terminal, dan sterft de server. Voor een echte deployment wilt u een procesmanager of een systemd-service.

De applicatie als systemd-service draaien

systemd is het standaard init-systeem op vrijwel elke moderne Linux-distributie. Het herstart uw 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 uw eigen gebruikersnaam. Het `User=`-veld is belangrijk: draai de service niet als root. Als uw 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

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

Verificatie

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

De eerste geeft de tekst van uw 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 u zou moeten zien na een verse installatie via NodeSource.

Veelgestelde problemen

Poort 3000 is al bezet. U ziet een foutmelding `EADDRINUSE`. Zoek het proces dat de poort bezet houdt met `sudo lsof -i :3000` en stop dat, of verander de poort in uw 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 uw Node.js-installatie staat en pas `ExecStart` aan. Bij een NodeSource-installatie is dat meestal `/usr/bin/node`, maar als u 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 uw JavaScript, dan ziet u die hier. De `Restart=always`-instelling blijft de service namelijk opnieuw starten, ook bij een syntaxfout — de logs vertellen u wat er mis is.

Wat dit u kost

Deze opzet is eenvoudig en robuust, maar niet volledig. Er staat geen reverse proxy voor, geen HTTPS, geen procesmanager met clustering. Voor een publieke server plaatst u 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, heeft u 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 u een draaiende Node.js-server in tien minuten. Schaalbare architectuur bouwt u daarna, als de eerste versie het bewijst. Zelf hosten klinkt prachtig, tot er iets omvalt op zondagavond half twaalf. Dan bent u geen klant die op de helpdesk wacht. Dan bént u de helpdesk — en dan is het fijn dat u weet waarom de service zo staat als hij staat.

← Terug naar kennisbank
← Terug naar kennisbank