Node.js

Node.js-App in Deutschland hosten.

Lege Node 22 in package.json fest, lausche auf process.env.PORT und füge eine run-zero.yaml hinzu. Das Buildpack installiert alles und startet npm start auf Servern in Nürnberg.

Braucht den Tarif Entwickler, kostenlos gibt es nur Websites. Preise · Grenzen vorab prüfen

  • Express getestet
  • npm start als Startbefehl
  • HTTPS ab dem ersten Deploy
claude · run-zero-examples/node-express

> Deploye den Ordner node-express auf run.zero.

runzero_create_appfertigexample-node-express

runzero_push_filesfertigein Commit

runzero_deployfertigDienste angelegt

runzero_wait_for_buildfertiglive

live unter https://web-example-node-express-2311463c.run-zero.de

Die Sitzung, mit der die Live-Demo entstanden ist, mit den echten MCP-Tools.
Ablauf

In vier Schritten live.

Getestet mit dem Beispiel, das live läuft.

  1. 01

    Node 22 festlegen

    Trage "engines": {"node": "22.x"} in package.json ein. Node 23 und neuer stürzen auf dem Build-Stack ab, offene Bereiche wie >=18 landen dort.

  2. 02

    Auf $PORT lauschen

    Der Server liest den Port aus process.env.PORT. Ein fester Port wie 3000 ist von außen nicht erreichbar.

  3. 03

    run-zero.yaml anlegen

    Ein Dienst reicht. Der Name wird Teil der Adresse, hier web.

    run-zero.yaml
    version: "1"services:  web:    port: 8080
  4. 04

    Konto anlegen und deployen

    Lege ein Konto an, verbinde deinen Agenten mit dem Befehl und melde dich in Claude Code mit /mcp und Authenticate an.

    • Dann schreibst du dem Agenten: Deploye dieses Repo auf run.zero.
    Ohne Agent

    Lege die App im Dashboard an und verbinde dein GitHub-Repo. Jeder Push baut neu.

    Claude Code verbinden
    claude mcp add --transport http \  -s user run-zero \  https://api.run-zero.de/mcp \  --client-id runzero-cli \  --callback-port 53761

Nach 1 bis 3 Minuten läuft die App unter https://web-<app>.run-zero.de. Prüfe eine Route deiner App, im Beispiel /api/health. Ist der Build rot, nennt runzero_get_build_logs den Grund.

Dateien

Zwei Dateien plus Konfiguration.

Genau so liegen sie im Beispiel, das live läuft.

Lauscht auf process.env.PORT, ohne gesetzten Port auf 8080.

Beispiel auf GitHub(öffnet in neuem Tab)
node-express/server.js
// Minimal Express app for run.zero. The platform sets PORT, default 8080.const express = require('express');const app = express();const port = process.env.PORT || 8080;app.get('/', (req, res) => {  res.type('html').send(`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Express on run.zero</title></head><body style="font-family:system-ui,sans-serif;max-width:640px;margin:64px auto;padding:0 24px"><h1>Express on run.zero</h1><p>This Node.js app was built by a Paketo buildpack and listens on port ${port}.</p><p><a href="/api/health">/api/health</a></p></body></html>`);});app.get('/api/health', (req, res) => {  res.json({ status: 'ok', runtime: `node ${process.version}`, platform: 'run.zero' });});app.listen(port, () => console.log(`listening on ${port}`));

engines legt die Version fest, start startet den Server.

Beispiel auf GitHub(öffnet in neuem Tab)
node-express/package.json
{  "name": "run-zero-example-node-express",  "version": "1.0.0",  "private": true,  "engines": { "node": "22.x" },  "scripts": { "start": "node server.js" },  "dependencies": { "express": "^4.21.2" }}
Grenzen

Was heute nicht geht.

Damit der erste Build durchläuft.

  • Braucht den Tarif Entwickler

    Free hat keine Apps mit Server und kein Postgres, der Deploy bricht dort ab.

    Preise ansehen
  • Build-Werkzeuge in dependencies

    Das Buildpack entfernt devDependencies. Was der Build braucht, gehört in dependencies.

  • Kein Build im start-Skript

    npm run build läuft schon beim Image-Build. Zur Laufzeit ist das Verzeichnis schreibgeschützt.

  • Dateien brauchen ein Volume

    Ohne volumes: sind Uploads nach einem Neustart weg. Mit Volume nur ab Tarif Entwickler, getestet haben wir es mit dem PocketBase-Image.

Betrieb

Was du nicht mehr selbst machst.

Build, HTTPS, Datenbank und Backups laufen auf der Plattform.

  • Daten bleiben in Deutschland

    Server und Backups bei Hetzner in Nürnberg. Mit Auftragsverarbeitungsvertrag.

  • HTTPS automatisch

    Jeder Dienst bekommt eine Adresse unter run-zero.de, eigene Domains ein Zertifikat von Let’s Encrypt.

  • Postgres als Add-on

    Ein Eintrag in run-zero.yaml, DATABASE_URL kommt als Umgebungsvariable.

  • Kein Lock-in

    Dein Code bleibt in deinem Repo, die Datenbank gibt es als Dump zum Download.

Fragen.

Zu Node.js.

Brauche ich ein Procfile?

Nein, wenn package.json ein start-Skript hat. Das Buildpack startet dann npm start. Ein Procfile brauchst du nur für einen anderen Startbefehl.

Welche Node-Version läuft?

Die, die du in engines festlegst. Die Live-Demo meldet die genaue Version unter /api/health.

Wie hänge ich eine Datenbank an?

Mit einem Postgres-Add-on in run-zero.yaml. Mit node-postgres übergibst du ssl: { rejectUnauthorized: false } und entfernst sslmode aus DATABASE_URL, das Compose-Beispiel zeigt beides.

Geht das auch mit NestJS, Fastify oder Hono?

Das Buildpack erkennt jede App mit package.json. Getestet ist hier nur Express, wichtig sind die Version, $PORT und ein start-Skript.

Weitere Anleitungen

Alle Anleitungen

Dein Code. Live auf run.zero.

Kostenlos gibt es eine Website, ohne Kreditkarte. Apps mit Server, Datenbank und eigene Domain gibt es ab dem Tarif Entwickler.