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 startals Startbefehl- HTTPS ab dem ersten Deploy
> 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
- Live-DemoLäuft auf run.zero(öffnet in neuem Tab)
- Beispiel-CodeMIT, auf GitHub(öffnet in neuem Tab)
- BuildpacksNode, Python, Go, PHP, Java
- Gehostet in DeutschlandHetzner, Nürnberg
In vier Schritten live.
Getestet mit dem Beispiel, das live läuft.
- 01
Node 22 festlegen
Trage
"engines": {"node": "22.x"}inpackage.jsonein. Node 23 und neuer stürzen auf dem Build-Stack ab, offene Bereiche wie>=18landen dort. - 02
Auf $PORT lauschen
Der Server liest den Port aus
process.env.PORT. Ein fester Port wie 3000 ist von außen nicht erreichbar. - 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 - 04
Konto anlegen und deployen
Lege ein Konto an, verbinde deinen Agenten mit dem Befehl und melde dich in Claude Code mit
/mcpund 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.
Zwei Dateien plus Konfiguration.
Genau so liegen sie im Beispiel, das live läuft.
Lauscht auf process.env.PORT, ohne gesetzten Port auf 8080.
// 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.
{ "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" }}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 ansehenBuild-Werkzeuge in dependencies
Das Buildpack entfernt
devDependencies. Was der Build braucht, gehört independencies.Kein Build im start-Skript
npm run buildlä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.
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_URLkommt 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.