Node.js-Anwendungen
Node.js, entwickelt und betrieben neben Ihrem PHP.
Wir bauen APIs, serverseitig gerenderte Websites, Echtzeit-Services und Worker in Node und betreiben sie auf denselben Servern wie Ihre PHP-Websites, hinter einem Nginx.
Was wir in Node bauen
Fünf Arten von Arbeit, jede davon hier, weil Node zu ihr passt.
-
01
Express
Kleine, direkte APIs und Backends: wenige Routen, klare Middleware, nichts Verstecktes.
APIs und Backends -
02
NestJS
Größere Services mit Modulen, Dependency Injection und typisierten Schnittstellen in TypeScript, für Code, den ein Team über Jahre weiterentwickelt.
Strukturierte Services -
03
Next.js · Nuxt
Serverseitiges Rendering für React und Vue: Seiten kommen fertig für Suchmaschinen und eine schnelle erste Ansicht an und verhalten sich danach wie eine App.
Serverseitig gerenderte Websites -
04
Socket.IO · WebSockets
Chat, Benachrichtigungen, Live-Dashboards und Tracking, die sich in dem Moment aktualisieren, in dem sich etwas ändert - über eine einzige offene Verbindung.
Echtzeit -
05
Worker und Queues
Hintergrundjobs, geplante Aufgaben und Queue-Consumer auf Redis, die langsame Arbeit aus der Anfrage heraushalten.
Hintergrundarbeit
Warum Node gut im Warten ist
Ein Node-Prozess führt Ihr JavaScript auf einem Thread aus und überlässt das Warten - auf Festplatte, Netzwerk, Datenbank - dem System. So hält ein einziger Prozess viele Verbindungen gleichzeitig offen.
- Ihr Code läuft auf dem Call Stack, eine Funktion nach der anderen.
- Langsame Arbeit verlässt den Thread: Dateien, DNS und Hashing gehen an den libuv-Pool, Sockets überwacht das Betriebssystem.
- Ist die Arbeit erledigt, wartet ihr Callback in der Task-Queue.
- Vor dem nächsten Task laufen alle Promise-Callbacks aus der Microtask-Queue.
- Der Loop durchläuft seine Phasen und nimmt den nächsten Task.
PHP und Node auf einem Server
Nginx nimmt jede Anfrage an und schickt jeden Pfad an den Prozess, dem er gehört. Ihre PHP-Website und Ihr Node-Service teilen sich die Maschine, die Datenbank und das Zertifikat - nicht aber den Arbeitsspeicher des anderen.
Was für welche Aufgabe
Wir entwickeln in beiden, also ergibt sich die Antwort aus der Aufgabe, nicht aus Gewohnheit.
Greifen Sie zu PHP, wenn
- die Website vor allem aus Seiten, Formularen und einem Adminbereich besteht: Shops, Content-Websites, Geschäftssysteme.
- Sie WordPress, WooCommerce oder Laravel wollen und alles, was es dafür bereits gibt.
- jede Anfrage für sich steht und schnell fertig ist.
- die Menschen, die sie pflegen werden, PHP bereits kennen.
Greifen Sie zu Node, wenn
- Verbindungen offen bleiben: Chat, Live-Dashboards, Benachrichtigungen, Tracking.
- React- oder Vue-Seiten mit Next.js oder Nuxt auf dem Server gerendert werden.
- der Service meist auf andere APIs wartet und Daten durchströmen lässt.
- eine Sprache im Browser und auf dem Server Ihrem Team hilft.
Oft lautet die Antwort: beides
PHP behält die Website, den Shop und den Adminbereich; ein kleiner Node-Service übernimmt daneben den Live-Teil. Beide lesen dieselbe Datenbank und stehen hinter demselben Nginx.
Releases ohne Lücke
Ein neues Release startet neben dem alten, beweist, dass es gesund ist, und übernimmt erst dann den Traffic. Die alten Worker beenden die Anfragen, die sie bereits haben, bevor sie stoppen.
- Bediente Besucher
- Aktuelles Release
- Neues Release
-
01
Holen und installieren
git pull && npm ciExakt die Versionen aus der Lockfile, nichts Neueres als Überraschung.
-
02
Bauen
npm run buildTypeScript und Assets werden kompiliert, bevor irgendetwas neu startet.
-
03
Neben dem alten starten
pm2 reload appDas neue Release fährt neben dem hoch, das noch ausliefert.
-
04
Warten, bis es bereit ist
wait_ready: trueEs muss seinen Health Check bestehen, bevor es einen Besucher bekommt.
-
05
Den Traffic übernehmen
cluster → new workersNeue Verbindungen gehen an das neue Release.
-
06
Das alte leerlaufen lassen
SIGINT → server.close()Die alten Worker beenden ihre laufenden Anfragen und fahren dann herunter.
Der Server rund um den Code
Was einen Node-Service am Laufen hält, steht auf dem Server - in Dateien, die wir pflegen und die Sie lesen können.
-
/etc/nginx/sites-enabled/app.confReverse Proxy
TLS, Komprimierung, zwischengespeicherte statische Dateien und WebSocket-Upgrades, vor jedem Prozess.
-
/srv/app/ecosystem.config.jsProzessmanager
PM2 hält den Prozess am Leben, startet ihn nach einem Absturz neu und nutzt im Cluster-Modus jeden Kern. Wo ein Prozess genügt, erledigt eine systemd-Unit dieselbe Aufgabe.
-
/srv/app/.env (0600)Umgebung und Geheimnisse
Schlüssel und Passwörter liegen außerhalb des Codes und außerhalb von git, lesbar nur für den eigenen Benutzer der Anwendung.
-
/srv/app/package-lock.jsonAbhängigkeitsprüfung
npm audit bei jedem Release; Upgrades werden gelesen und getestet, bevor sie in die Produktion gehen.
-
/srv/app/.nvmrcUpgrades zwischen Node-LTS-Versionen
Die Anwendung läuft auf einer Long-Term-Support-Version, und wir heben sie auf die nächste, bevor die alte aus dem Support fällt.
-
/var/log/app/Logs und Monitoring
Strukturierte, rotierte Logs, mit einer Warnung, wenn der Prozess neu startet, der Speicher steigt oder Fehler zunehmen.

Sagen Sie uns, was Ihre Node-Anwendung leisten muss
Ein neuer Service, eine Next.js-Website oder eine Anwendung, die schon irgendwo läuft und ein ordentliches Zuhause braucht. Wir sehen sie uns an und erstellen nach einem kurzen Gespräch ein Angebot.