Node.js: Erste Schritte

Erfahren Sie, wie Sie einen Node.js-Service schnell und sicher auf Stackhero bereitstellen

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Node.js Cloud Lösung, die zahlreiche Vorteile bietet, darunter:

  • Deployen Sie Ihre Anwendung in Sekundenschnelle mit einem einfachen git push.
  • Nutzen Sie Ihren eigenen Domainnamen und profitieren Sie von der automatischen Konfiguration von HTTPS-Zertifikaten für erhöhte Sicherheit.
  • Genießen Sie sorgenfreie automatische Backups, Ein-Klick-Updates und eine einfache, transparente und vorhersehbare Preisgestaltung.
  • Erhalten Sie optimale Performance und robuste Sicherheit dank einer privaten und dedizierten VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Node.js Cloud Hosting Lösung von Stackhero auszuprobieren!

Das Bereitstellen Ihres Node.js-Services auf Stackhero ist darauf ausgelegt, schnell, effizient und zuverlässig zu sein. In dieser Anleitung führen wir Sie durch die wichtigsten Schritte, um Ihre Anwendung in wenigen Minuten zum Laufen zu bringen – mit Fokus auf Sicherheit und Performance.

Beginnen wir damit, einen Node.js-Service auf Stackhero zu erstellen. Dies bildet die Grundlage für Ihre Anwendungsbereitstellung und verschafft Ihnen Zugang zu allen Vorteilen des Stackhero Cloud Hostings.

Bevor Sie starten, stellen Sie sicher, dass Sie folgende Tools bereit haben:

  1. Git: Sie können es unter https://git-scm.com/downloads herunterladen.
  2. Windows-Nutzer: Für ein reibungsloseres Arbeiten empfiehlt es sich, das Windows Terminal aus dem Microsoft Store zu verwenden.

Der wichtigste Konfigurationsschritt ist das Aktualisieren Ihres SSH Public Keys. Dieser Schlüssel ermöglicht Stackhero den sicheren Zugriff auf Ihr Code-Repository.

Um Ihren Public Key zu finden, führen Sie einen der folgenden Befehle im Terminal aus:

cat ~/.ssh/id_rsa.pub

oder

cat ~/.ssh/id_ed25519.pub

Falls Sie noch kein SSH-Schlüsselpaar besitzen, können Sie eines mit ssh-keygen unter Linux oder macOS oder mit ssh-keygen.exe unter Windows erzeugen.

Sobald Sie Ihren Public Key haben, melden Sie sich im Stackhero-Dashboard an, wählen Sie Ihren Node.js-Service, gehen Sie in den Konfigurationsbereich und fügen Sie Ihren Schlüssel in das vorgesehene Feld ein.

Tip: Wenn Sie möchten, dass Ihr SSH Public Key für alle zukünftigen Services verfügbar ist, können Sie ihn global hinterlegen. Gehen Sie dazu einfach ins Stackhero-Dashboard, klicken Sie auf Ihr Profilbild (oben rechts), wählen Sie "Ihr Profil" und fügen Sie dort Ihren SSH Public Key ein.

Um Ihnen den Einstieg zu erleichtern, stellen wir eine Beispielanwendung für Node.js bereit, die zeigt, wie das Deployment auf Stackhero funktioniert. Sie können das Repository mit folgenden Befehlen klonen:

git clone https://github.com/stackhero-io/nodejsGettingStarted.git stackhero-nodejs-getting-started
cd stackhero-nodejs-getting-started

Das Deployment Ihrer Anwendung via Git auf Stackhero ist unkompliziert. Auf der Hauptseite Ihres Services finden Sie einen Befehl, um ein Git-Remote hinzuzufügen. Dieser sieht beispielsweise so aus:

git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Kopieren Sie diesen Befehl und fügen Sie ihn in Ihr Terminal ein, um das Remote einzurichten.

Um zu deployen, pushen Sie Ihren Code einfach mit:

git push stackhero main

Beim ersten Push werden Sie aufgefordert, den Key-Fingerprint zu bestätigen. Geben Sie einfach "yes" ein, um fortzufahren.

Nach wenigen Augenblicken sollte Ihre Anwendung live sein. Sie können den Status überprüfen, indem Sie die im Stackhero-Dashboard angezeigte Website-URL aufrufen (zum Beispiel https://<XXXXXX>.stackhero-network.com).

Das war's – Ihre Anwendung ist jetzt bereitgestellt.

Wenn Sie Änderungen vornehmen möchten, aktualisieren Sie einfach Ihre app.js, committen und pushen Sie Ihre Änderungen:

git add -A .
git commit -m "Update app.js"
git push stackhero main

Wenn Sie bereits eine Node.js-Anwendung haben, können Sie das Stackhero-Remote wie oben beschrieben hinzufügen und Ihren Code mit folgendem Befehl deployen:

git push stackhero main

Falls Sie diesen Fehler erhalten:

error: failed to push some refs to '[...]'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
(e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

bedeutet das, dass Ihr lokales Repository nicht mit dem Remote synchronisiert ist. Sie können das Pushen erzwingen mit:

git push -f stackhero main

Wenn Sie beim Pushen Folgendes sehen:

error: src refspec main does not match any
error: failed to push some refs to 'ssh://<XXXXXX>.stackhero-network.com:222/project.git'

bedeutet das in der Regel, dass der Branch main nicht existiert. Versuchen Sie stattdessen, den Branch master zu pushen:

git push stackhero master

Wenn Git meldet "Everything up-to-date", Ihre Änderungen aber nicht bereitgestellt werden, haben Sie vermutlich vergessen, Ihre Änderungen zu committen. Versuchen Sie Folgendes:

git add -A .
git commit -m "Ihr Commit-Text"
git push stackhero main

Falls Sie keine Änderungen vorgenommen haben, aber dennoch ein Deployment auslösen möchten, können Sie einen leeren Commit erzwingen:

git commit --allow-empty -m "Force update"
git push stackhero main

Wenn Sie einen anderen Branch als main deployen möchten, zum Beispiel production, können Sie Folgendes verwenden:

git push stackhero production:main

Wenn Sie Tags verwenden und einen bestimmten Tag (z. B. v1.0) deployen möchten, führen Sie aus:

git push stackhero 'v1.0^{}:main'

Das ^{} sorgt dafür, dass der Commit, der mit dem Tag verknüpft ist, gepusht wird.

Wenn Sie einen bestimmten Commit deployen möchten, ermitteln Sie zunächst den Commit-Hash mit git log. Anschließend deployen Sie ihn mit:

git push -f stackhero <HASH>:main

Sie möchten vielleicht separate Umgebungen für Produktion und Staging. Um das aktuelle Remote von stackhero in stackhero-staging umzubenennen, führen Sie aus:

git remote rename stackhero stackhero-staging

Erstellen Sie anschließend im Stackhero-Dashboard einen neuen Node.js-Service und fügen Sie ihn als stackhero-production hinzu:

git remote add stackhero-production ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Sie können dann in die jeweilige Umgebung deployen mit:

git push stackhero-production main

oder

git push stackhero-staging main

Unter macOS kann es sein, dass Sie bei jedem Push nach dem Passwort Ihres SSH-Keys gefragt werden. Für mehr Komfort und Sicherheit können Sie das Passwort im macOS-Schlüsselbund speichern, indem Sie Folgendes ausführen:

/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa

Mit diesem Befehl wird das Passwort gespeichert, sodass Sie bei zukünftigen Deployments nicht erneut gefragt werden.

Wenn Sie mit Staging- und Produktionsumgebungen arbeiten, ist es wichtig, Secrets wie Tokens oder Passwörter sicher zu verwalten. Anstatt Secrets im Repository zu speichern, nutzen Sie besser Umgebungsvariablen für zusätzliche Sicherheit.

Sie können Umgebungsvariablen im Stackhero-Dashboard hinzufügen und in Ihrem Node.js-Code darauf zugreifen. Wenn Sie beispielsweise eine Variable namens mySecret definieren, greifen Sie in Ihrer App so darauf zu:

process.env.mySecret

Falls Ihre Anwendung andere Protokolle als HTTP benötigt, können Sie zusätzliche TCP- oder UDP-Ports öffnen. Dies können Sie direkt im Stackhero-Dashboard tun, indem Sie den öffentlichen Eingangsport, den Zielport auf Ihrem Node.js-Service und das Protokoll (TCP oder UDP) angeben.

Für das Speichern von Benutzerdaten wie Fotos empfiehlt sich eine Object Storage-Lösung. Damit können Sie Dateien zwischen mehreren Services und Instanzen teilen und Ihren Code von den Daten trennen. Wir empfehlen MinIO als schnelle, einfache und leistungsfähige Lösung, die mit dem Amazon S3-Protokoll kompatibel ist.

Wenn Sie lokalen Speicher bevorzugen, können Sie den persistenten Speicher Ihrer Node.js-Instanz nutzen. Dieser befindet sich unter /persistent/storage/.

ACHTUNG: Speichern Sie Ihre Daten immer im Ordner /persistent/storage/.

Daten außerhalb dieses Ordners können verloren gehen, wenn Ihre Instanz neu startet oder Sie Codeänderungen pushen.

Wenn Sie eine neue Version Ihrer App deployen, erhält die vorherige Version vor dem Herunterfahren ein Terminationssignal. So hat Ihre Anwendung Zeit, Datenbankverbindungen und andere Dienste sauber zu schließen.

Das Terminationssignal SIGTERM wird an Ihre App gesendet. Sie können dieses Signal in Ihrem Code wie folgt behandeln:

process.on('SIGTERM', () => {
  // Dieses Log erscheint im Stackhero-Dashboard im Tab "logs"
  console.info('SIGTERM signal received.');

  // Schließen Sie hier offene Datenbankverbindungen oder andere Services
  // ...
});

Standardmäßig nutzt Node.js nur einen Kern und einen Thread. Um alle verfügbaren CPU-Kerne zu nutzen, empfiehlt sich die Node.js-cluster-API. Die offizielle Dokumentation finden Sie hier: https://nodejs.org/api/cluster.html.

Hier ein einfaches Beispiel, das einen HTTP-Server mit allen verfügbaren CPUs erstellt:

const cluster = require('cluster');
const http = require('http');
const cpusCount = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers
  for (let i = 0; i < cpusCount; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // Worker teilen sich jede TCP-Verbindung, hier einen HTTP-Server
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}