Zum Inhalt springen

VPS aufsetzen – Node, PM2 und Apache Reverse Proxy

Ein Virtual Private Server (VPS) bietet volle Kontrolle über die Serverumgebung — kein Vendor Lock-in, keine Plattform-Einschränkungen, DSGVO-konformes Hosting auf deutschen oder europäischen Servern. Für Node.js-Anwendungen wie Astro SSR ist ein VPS mit Apache Reverse Proxy und PM2 das bewährte Production-Setup. Diese Anleitung beschreibt das Setup auf Ubuntu 24.04 — dem aktuellen LTS-Standard für Produktionsserver.

Voraussetzungen

Benötigt wird ein VPS mit Ubuntu 24.04 (oder 22.04 LTS), Root- oder sudo-Zugriff per SSH, ein Domain-Name der auf die Server-IP zeigt und grundlegende Linux-Kenntnisse (Navigation, Dateieditor, Dienste starten). Empfohlene VPS-Anbieter mit deutschen Rechenzentren: IONOS, Hetzner Cloud, netcup. Alle DSGVO-konform, gute Performance, faire Preise.

Node.js installieren

Node.js wird über den offiziellen NodeSource-Repository installiert — das garantiert aktuelle Versionen statt der veralteten Ubuntu-Repository-Version. Für Astro wird Node 22 LTS oder Node 24 empfohlen. Nach der Installation mit node --version und npm --version verifizieren. Die Versionsnummer sollte 22.x oder 24.x zeigen.

PM2 — Prozess-Manager für Node.js

PM2 ist der Standard-Prozessmanager für Node.js in Production. Er startet Anwendungen automatisch neu wenn sie abstürzen, kümmert sich um Auto-Start beim Server-Neustart und bietet Logging, Monitoring und Clustering.

PM2 installieren und Anwendung starten

PM2 installieren und Anwendung starten

PM2 global installieren: npm install -g pm2. Astro-Anwendung starten: pm2 start dist/server/entry.mjs --name digitalherrmann. Status prüfen: pm2 status. Logs abrufen: pm2 logs digitalherrmann.

Auto-Start beim Systemstart

Auto-Start beim Systemstart

PM2 startet nach Server-Neustart nicht automatisch — das muss konfiguriert werden: pm2 startup generiert einen Systemd-Befehl. Diesen Befehl ausführen, dann pm2 save um den aktuellen Prozess-Status zu speichern.

Zero-Downtime Deployment

Zero-Downtime Deployment

Bei Updates die Anwendung mit pm2 reload digitalherrmann neu starten — das führt einen graceful reload durch ohne Downtime. Alternativ pm2 restart für einen harten Neustart wenn nötig.

PM2 Monitoring

PM2 Monitoring

pm2 monit zeigt CPU- und RAM-Auslastung in Echtzeit. pm2 logs zeigt die letzten Log-Einträge. Für erweiterte Überwachung bietet PM2 Plus (kostenpflichtig) ein Web-Dashboard.

Apache als Reverse Proxy

Apache nimmt HTTP/HTTPS-Anfragen entgegen und leitet sie an den Node.js-Prozess weiter. Die Vorteile: Apache kümmert sich um SSL-Terminierung, HTTP/2, Kompression und statische Dateien — Node.js muss nur die dynamischen Anfragen bearbeiten.

Apache Module aktivieren

Apache Module aktivieren

Für den Reverse Proxy werden drei Module benötigt: a2enmod proxy, a2enmod proxy_http, a2enmod proxy_wstunnel (für WebSockets). Danach Apache neu starten: systemctl restart apache2.

VirtualHost konfigurieren

VirtualHost konfigurieren

In der Apache-Konfiguration (z.B. /etc/apache2/sites-available/digitalherrmann.conf) wird der ProxyPass und ProxyPassReverse definiert. ProxyPass / http://localhost:3000/ leitet alle Anfragen an den Node-Prozess weiter.

SSL mit Let's Encrypt

SSL mit Let's Encrypt

Certbot installieren: apt install certbot python3-certbot-apache. Zertifikat beantragen: certbot --apache -d digitalherrmann.de -d www.digitalherrmann.de. Certbot konfiguriert Apache automatisch für HTTPS und richtet Auto-Renewal ein.

HTTP/2 aktivieren

HTTP/2 aktivieren

HTTP/2 verbessert Performance durch Multiplexing: a2enmod http2, dann in der SSL-VirtualHost-Konfiguration 'Protocols h2 http/1.1' ergänzen. Spürbare Verbesserung bei Seiten mit vielen Ressourcen.

Deployment-Workflow

Code auf Server übertragen

Code auf Server übertragen

Git pull im Projektverzeichnis oder rsync/scp für Dateiübertragung. Git ist empfohlen: sauberere Historie, einfaches Rollback.

Dependencies installieren

Dependencies installieren

npm ci (nicht npm install) für reproduzierbare Installs. npm ci nutzt package-lock.json und ist schneller und zuverlässiger als npm install.

Build ausführen

Build ausführen

npm run build generiert dist/. Bei Astro SSR entsteht dist/server/ mit dem Node-Entry-Point.

Anwendung neu starten

Anwendung neu starten

pm2 reload digitalherrmann für Zero-Downtime Reload. pm2 save um den neuen Status zu persistieren.

Häufig gestellte Fragen

Welchen Port verwendet Astro SSR standardmäßig?

Astro SSR mit @astrojs/node läuft standardmäßig auf Port 4321 im Dev-Modus und Port 3000 im Production-Build. Der Port kann über die HOST- und PORT-Umgebungsvariablen konfiguriert werden.

Wie sichere ich den VPS ab?

Grundlegende Maßnahmen: SSH-Passwort-Login deaktivieren (nur SSH-Keys), Fail2ban gegen Brute-Force, UFW Firewall (nur Port 22, 80, 443 offen), regelmäßige System-Updates (apt upgrade), Node.js und npm auf aktuellem Stand halten.

Wie viel RAM braucht ein Astro SSR-Prozess?

Ein Astro SSR-Prozess benötigt typischerweise 100–300 MB RAM. Für eine kleine bis mittelgroße Website reicht ein VPS mit 2 GB RAM problemlos aus. PM2 Clustering (mehrere Prozess-Instanzen) erlaubt horizontale Skalierung bei höherem Traffic.

Kann ich mehrere Websites auf einem VPS betreiben?

Ja — Apache Virtual Hosts ermöglichen beliebig viele Websites auf einem Server. Jede Website bekommt einen eigenen VirtualHost-Eintrag, einen eigenen Node-Prozess (PM2) und einen eigenen Port. Apache routet basierend auf dem Domain-Namen zum richtigen Prozess.