Die Node.js-Laufzeit ist das Softwarepaket, das für die Installation Ihres Anwendungscodes und der Abhängigkeiten sowie für die Ausführung dieser Anwendung in der flexiblen Umgebung verantwortlich ist.
Node.js-Versionen
Node.js 24 (Vorschau) verwendet Buildpacks. Die standardmäßige Node.js-Engine verwendet den neuesten LTS-Release. Eine vollständige Liste der unterstützten Node.js-Versionen und der entsprechenden Ubuntu-Versionen finden Sie im Laufzeitsupportzeitplan.
So verwenden Sie eine unterstützte Node.js-Version:
Installieren Sie die
gcloud CLI-Version 420.0.0 oder höher. Sie können die Befehlszeilentools mit dem Befehlgcloud components updateaktualisieren. Führen Sie den Befehlgcloud versionaus, um Ihre installierte Version aufzurufen.Fügen Sie die Einstellungen
runtime_configundoperating_systemin die Dateiapp.yamlein, um ein Betriebssystem anzugeben.Sie können optional eine Version angeben, indem Sie:
Die Einstellung
runtime_versionin die Dateiapp.yamleinfügen. Standardmäßig wird die neueste Node.js-Version verwendet, wenn die Einstellungruntime_versionnicht angegeben ist. Beispiel:So geben Sie Node.js 24 (Vorschau) auf Ubuntu 24 an:
runtime: nodejs env: flex runtime_config: operating_system: "ubuntu24" runtime_version: "24"Neueste unterstützte Node.js-Version unter Ubuntu 24 angeben:
runtime: nodejs env: flex runtime_config: operating_system: "ubuntu24"Die Einstellung
runtime_versionunterstützt semver.
Fügen Sie die neueste unterstützte Node.js-Version in der Datei
package.jsonIhrer Anwendung mithilfe des Feldsenginesein. Wenn Sie im Feldengineseine Version angeben, hat die Einstellungruntime_versionVorrang. Um unerwartete Fehler zu vermeiden, empfehlen wir, im Feldengineseine Node.js-Version sowie dasruntime_versionanzugeben. Beispiel:{ "engines": { "node": "24.x" } }Das Attribut
engines.nodekann ein semver-Bereich sein. Wenn Sie diese Eigenschaft angeben, lädt die Laufzeit die neueste Version von Node.js herunter, die dem semver-Bereich entspricht, und installiert sie. Wenn keine Übereinstimmung gefunden wird, kann die Anwendung nicht bereitgestellt werden und die Laufzeit gibt einen Fehler zurück.
Vorherige Laufzeitversionen
Geben Sie für die Node.js-Laufzeit Version 16 und früher eine Version in der Datei package.json Ihrer Anwendung mit dem Feld engines an.
Im folgenden Beispiel wird die Laufzeit konfiguriert, um den Release Node 9 zu verwenden.
{
"engines": {
"node": "9.x"
}
}
Das Attribut engines.node kann ein semver-Bereich sein.
Wenn Sie diese Eigenschaft angeben, lädt die Laufzeit die neueste Version von Node.js herunter, die dem semver-Bereich entspricht, und installiert sie. Wenn keine Übereinstimmung gefunden wird, kann die Anwendung nicht bereitgestellt werden und die Laufzeit gibt eine Fehlermeldung zurück.
Unterstützung für andere Node.js-Laufzeiten
Wenn Sie eine Node.js-Version verwenden müssen, die nicht unterstützt wird, können Sie eine benutzerdefinierte Laufzeit erstellen und ein gültiges Basis-Image mit der von Ihnen benötigten Node.js-Version auswählen.
Informationen zu von Google bereitgestellten Basis-Images oder Docker-Basis-Images für Node.js finden Sie unter Benutzerdefinierte Laufzeiten erstellen.
Paketmanager
Während der Bereitstellung verwendet die Laufzeit die npm oder "yarn" oder Pnpm, um Abhängigkeiten zu installieren und die Anwendung zu starten. Der Paketmanager wird mit der folgenden Logik festgelegt:
- Der Standardpaketmanager ist
npm. - Wenn sich eine
yarn.lock-Datei im Stammverzeichnis Ihrer Anwendung befindet, verwendet die Laufzeit stattdessen den Paketmanageryarn. - Nur für Node.js-Version 18 und höher verwendet die Laufzeit stattdessen den
Pnpm-Paketmanager, wenn sich die Dateipnpm-lock.yamlim Stammverzeichnis Ihrer Anwendung befindet. - Wenn
package-lock.jsonundyarn.lockoderpnpm-lock.yamlvorhanden sind, schlägt die Bereitstellung mit einem Fehler fehl. Wenn Sie diepackage-lock.jsonDatei benötigen, müssen Sie die anderen Paketmanagerdateien im Abschnittskip_filesIhrerapp.yamlDatei angeben, um zu ermitteln, welcher Paketmanager verwendet werden soll.
Version des Paketmanagers
Das Laufzeit-Image sollte den neuesten yarn-Release verwenden und den Release von npm, der im neuesten Node.js-LTS-Release verfügbar ist.
Sie können in der Datei package.json der Anwendung mithilfe des Felds engines eine andere Paketmanagerversion angeben, die verwendet werden soll. In diesem Fall sorgt die Laufzeit dafür, dass der für die Bereitstellung verwendete Paketmanager in der Version verwendet wird, die der im Feld engines aufgeführten Spezifikation entspricht.
Wenn sowohl eine yarn- als auch eine npm-Versionsspezifikation angegeben ist, wird bei Bedarf nur der für die Bereitstellung verwendete Paketmanager aktualisiert. Dies spart Installationszeit, da keine benutzerdefinierte Version eines Paketmanagers installiert wird, die nicht tatsächlich zum Bereitstellen der Anwendung verwendet wird.
Im folgenden Beispiel wird die Laufzeit dafür konfiguriert, eine benutzerdefinierte Version von npm zu verwenden:
{
"engines": {
"npm": "5.x"
}
}
Im nächsten Beispiel wird die Laufzeit dafür konfiguriert, eine benutzerdefinierte Version von yarn zu verwenden:
{
"engines": {
"yarn": ">=1.0.0 <2.0.0"
}
}
Die Attribute engines.npm und engines.yarn können jeweils ein semver-Bereich sein.
Abhängigkeiten
Während der Bereitstellung verwendet die Laufzeit entweder den Paketmanager npm oder den yarn-Paketmanager, um Abhängigkeiten durch Ausführung von npm install oder yarn install zu installieren. Weitere Informationen dazu, wie die Laufzeit den Paketmanager auswählt, der verwendet werden soll, finden Sie im Abschnitt Paketmanager.
Weitere Informationen zum Verwalten von Node.js-Paketen in Google App Engine finden Sie unter Node.js-Bibliotheken verwenden.
Damit Node.js-Pakete verwendet werden können, die native Erweiterungen erfordern, sind die folgenden Ubuntu-Pakete im Docker-Image vorinstalliert.
build-essentialca-certificatescurlgitimagemagicklibkrb5-devnetbasepython
Wenn Ihre Anwendung zusätzliche Abhängigkeiten auf Betriebssystemebene erfordert, müssen Sie eine auf dieser Laufzeit basierende benutzerdefinierte Laufzeit verwenden, um die entsprechenden Pakete zu installieren.
NPM-Build-Skript
Für die Node.js-Laufzeit Version 18 und höher führt die Laufzeitumgebung npm run build aus, wenn standardmäßig ein build-Skript in package.json erkannt wird. Wenn Sie vor dem Starten Ihrer Anwendung zusätzliche Kontrolle über die Build-Schritte benötigen, können Sie einen benutzerdefinierten Build-Schritt hinzufügen. Fügen Sie dazu der Datei package.json ein gcp-build-Skript hinzu.
Wenn Sie verhindern möchten, dass Ihr Build das Script npm run build ausführt, haben Sie folgende Möglichkeiten:
- Fügen Sie ein
gcp-build-Script mit einem leeren Wert in Ihrepackage.json-Datei ein:"gcp-build":"". Fügen Sie die Build-Umgebungsvariable
GOOGLE_NODE_RUN_SCRIPTSmit einem leeren Wert in die Dateiapp.yamlein.build_env_variables: GOOGLE_NODE_RUN_SCRIPTS: ''
app.yaml im Abschnitt build_env_variables.
Anwendungsstart
Die Laufzeit startet Ihre Anwendung mit npm start. Dabei wird der in package.json angegebene Befehl verwendet. Beispiel:
"scripts": {
"start": "node app.js"
}
Durch das Startskript sollte ein Webserver gestartet werden, der auf HTTP-Anfragen am durch die Umgebungsvariable PORT angegebenen Port antwortet, in der Regel Port 8080.
Laufzeit erweitern
Mit benutzerdefinierten Laufzeiten können Sie einer Node.js-Anwendung, die in der flexiblen App Engine-Umgebung ausgeführt wird, zusätzliche Funktionen hinzufügen. Zum Konfigurieren einer benutzerdefinierten Laufzeit ersetzen Sie die folgende Zeile in der Datei app.yaml:
runtime: nodejs
durch diese Zeile:
runtime: custom
Fügen Sie außerdem die Dateien Dockerfile und .dockerignore in das Verzeichnis ein, das die Datei app.yaml enthält.
Informationen zum Definieren eines Dockerfiles in einer benutzerdefinierten Laufzeit finden Sie in der Dokumentation zu benutzerdefinierten Laufzeiten.
HTTPS- und Weiterleitungs-Proxys
App Engine beendet die HTTPS-Verbindung am Load-Balancer und leitet die Anfrage zu Ihrer Anwendung weiter. Einige Anwendungen müssen die ursprüngliche Request-IP-Adresse und das Protokoll bestimmen. Die IP-Adresse des Nutzers ist im Standardheader X-Forwarded-For verfügbar. Bei Anwendungen, die diese Informationen erfordern, sollte das Web-Framework so konfiguriert werden, dass dem Proxy vertraut wird.
Verwenden Sie für Express.js die Einstellung trust proxy:
app.set('trust proxy', true);
Informationen zum Erzwingen von HTTPS-Verbindungen finden Sie unter Anfrageverarbeitung.
Umgebungsvariablen
Die folgenden Umgebungsvariablen werden durch die Laufzeitumgebung festgelegt:
| Umgebungsvariable | Beschreibung |
|---|---|
GAE_INSTANCE |
Der Name der aktuellen Instanz |
GAE_MEMORY_MB |
Die Größe des für den Anwendungsprozess verfügbaren Speichers |
GAE_SERVICE |
Der in der Datei app.yaml Ihrer Anwendung angegebene Dienstname. Wenn kein Dienstname angegeben ist, wird als Wert default festgelegt. |
GAE_VERSION |
Das Versionslabel der aktuellen Anwendung |
GOOGLE_CLOUD_PROJECT |
Die mit Ihrer Anwendung verknüpfte Projekt-ID, die in der Google Cloud -Konsole angezeigt wird |
NODE_ENV |
Wenn Ihre Anwendung bereitgestellt wird, lautet der Wert production. |
PORT |
Der Port, der HTTP-Anfragen empfängt Legen Sie 8080 fest.
|
Sie können mit app.yaml noch weitere Umgebungsvariablen festlegen.
Metadatenserver
Jede Instanz der Anwendung kann den Compute Engine-Metadatenserver verwenden, um Informationen über die Instanz abzufragen, einschließlich Hostname, externer IP-Adresse, Instanz-ID, benutzerdefinierter Metadaten und Dienstkontoinformationen. Sie können in App Engine nicht für jede einzelne Instanz benutzerdefinierte Metadaten festlegen. Sie haben aber die Möglichkeit, projektweite benutzerdefinierte Metadaten anzugeben und aus den App Engine- und Compute Engine-Instanzen zu lesen.
Diese Beispielfunktion ruft die externe IP-Adresse der Instanz über den Metadatenserver ab.