// hosting · Web Platform Advent #14
Eine Node.js-App hosten: VPS, PaaS und Serverless
Die praktischen Wege, eine Node.js-Anwendung zu deployen — VPS, Managed PaaS oder Serverless — plus PM2, ein Reverse Proxy, Umgebungsvariablen und ein vernünftiger Deployment-Ablauf.
Eine Node.js-App zu hosten unterscheidet sich vom Hosten einer statischen Site oder einer PHP-Seite. Node betreibt einen langlebigen Prozess, der seinen eigenen HTTP-Server besitzt, also muss der Host diesen Prozess am Leben halten, ihn nach einem Absturz neu starten und den öffentlichen Traffic dorthin leiten. Dieser Leitfaden führt durch die drei realistischen Optionen und die Bausteine, die Sie unabhängig von Ihrer Wahl brauchen.
Drei Wege, Node.js zu hosten
Fast jedes Deployment fällt in eines dieser Modelle. Die richtige Wahl hängt davon ab, wie viel vom Server Sie verwalten möchten und wie sich Ihr Traffic verhält.
- VPS (selbst verwaltet) — Sie erhalten eine Linux-Maschine und vollen Root-Zugriff. Maximale Kontrolle und planbare Kosten, aber Sie installieren und warten Node, den Prozessmanager, den Reverse Proxy und TLS selbst.
- PaaS (Platform-as-a-Service) — Sie pushen Code (oft über Git) und die Plattform baut, betreibt und skaliert den Prozess für Sie. Weniger Kontrolle, schneller einsatzbereit, meist nach Verbrauch abgerechnet.
- Serverless / Functions — Sie deployen einzelne Handler statt eines laufenden Servers. Die Plattform startet sie bei Bedarf. Hervorragend für sprunghafte oder traffic-arme Workloads, aber zustandslos und Cold Starts unterworfen.
Den Prozess mit PM2 am Leben halten
Auf einem VPS stoppt node server.js in Ihrer Shell genau in dem Moment, in dem Sie sich abmelden, und nichts startet es nach einem Absturz neu. Ein Prozessmanager löst beides. PM2 ist die gängige Wahl:
npm install -g pm2
# start the app and name it
pm2 start server.js --name web
# restart automatically after a server reboot
pm2 startup
pm2 save
# useful day-to-day commands
pm2 list
pm2 logs web
pm2 restart web PM2 betreibt Ihre App auch im Cluster-Modus, um jeden CPU-Kern zu nutzen — der einfachste Weg, eine einzelne Maschine zu skalieren:
pm2 start server.js --name web -i max
Ein Reverse Proxy vor Node
Stellen Sie Node nicht direkt auf Port 80/443 bereit. Setzen Sie einen Reverse Proxy wie Nginx davor: Er terminiert TLS, liefert statische Dateien effizient aus und kann mehrere Apps auf einer Maschine routen. Ein minimaler Nginx-Server-Block, der Traffic an eine Node-App auf Port 3000 weiterleitet:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
} Die Header Upgrade und Connection sind wichtig, wenn Ihre App WebSockets nutzt. Für HTTPS ist der übliche Weg ein kostenloses Zertifikat von Let's Encrypt via certbot, das diese Konfiguration für Sie bearbeitet.
Umgebungsvariablen und Konfiguration
Schreiben Sie Geheimnisse (Datenbank-URLs, API-Keys) niemals fest in Ihren Quellcode. Lesen Sie sie aus der Umgebung mit process.env und lassen Sie die Plattform sie einschleusen:
const port = process.env.PORT || 3000;
const dbUrl = process.env.DATABASE_URL;
app.listen(port, () => {
console.log(`listening on ${port}`);
}); Auf einem VPS können Sie diese in einer .env-Datei halten (von einer Bibliothek geladen und aus Git ausgeschlossen) oder über die Ecosystem-Datei von PM2 übergeben. Auf einer PaaS setzen Sie sie im Dashboard. Lesen Sie immer process.env.PORT — Managed-Plattformen weisen Ihnen den Port zu.
Ein vernünftiger Deployment-Ablauf
Wie auch immer Sie hosten, streben Sie einen wiederholbaren Deploy an, statt Dateien von Hand auf dem Server zu bearbeiten:
- Den neuen Code holen (
git pulloder ein CI-Artefakt). - Nur Produktionsabhängigkeiten installieren:
npm ci --omit=dev. - Den Build-Schritt ausführen, falls vorhanden (
npm run build). - Den Prozess ohne Ausfallzeit neu laden:
pm2 reload web.
Auf einer PaaS wird diese ganze Abfolge durch einen git push ausgelöst; auf einem VPS können Sie sie skripten oder an einen CI-Runner koppeln.
Welche Option passt?
| Option | Sie verwalten | Am besten, wenn |
|---|---|---|
| VPS | OS, Node, PM2, Nginx, TLS | Sie Kontrolle und planbare Kosten wollen |
| PaaS | Nur Ihren Code + Umgebungsvariablen | Sie schnell ausliefern und leicht skalieren wollen |
| Serverless | Einzelne Handler | Sprunghafter oder geringer Traffic, zustandslose Arbeit |
Wenn Sie gerade anfangen, betreibt ein einzelner, gut konfigurierter VPS mit PM2 und Nginx die meisten Node-Apps bequem und lehrt Sie, was die Managed-Plattformen automatisieren. Wechseln Sie zu einer PaaS oder Serverless, wenn Skalierung oder Betriebsaufwand zum Engpass werden — nicht vorher.