Node.js 執行階段環境

Node.js 執行階段是一個軟體堆疊,負責安裝網路服務的程式碼和其依附元件,並執行服務。適用於 App Engine 標準環境的 Node.js 執行階段會在 app.yaml 檔案中宣告:

Node.js 8

runtime: nodejs8

Node.js 10 (Beta 版)

runtime: nodejs10

Node.js 版本

Node.js 執行階段使用的是最新且最穩定的 Node.js 以及 npm 的對應版本。App Engine 會在部署時自動更新到最新的次要修訂版本,但是不會自動更新主要版本。

舉例來說,您先前已在 Node.js 10.9.4 部署應用程式,則後續會自動更新至 10.10.0 版,但是不會自動更新至 Node.js 12.x.x。

因為次要版本和修補程式版本會自動更新,engines.node 檔案中的 package.json 屬性只能指定主要版本:

Node.js 8

{
  "engines": {
    "node": "8.x.x"
  }
}

Node.js 10 (Beta 版)

{
  "engines": {
    "node": "10.x.x"
  }
}

engines.node 屬性為選用項目,如果使用此屬性,該值必須與您在 app.yaml 檔案所指定的 Node.js 相容。例如:

Node.js 8

  • 8.x.x
  • ^8.0.0
  • ~8
  • >=6

Node.js 10 (Beta 版)

  • 10.x.x
  • ^10.0.0
  • ~10
  • >=6

如果您在 package.json 檔案中指定不相容的 Node.js 版本,您的部署將會失敗並出現錯誤訊息。

依附元件

在部署期間,執行階段會使用 npm install 指令安裝依附元件,或者如果已有 yarn.lock 檔案,則會使用 yarn install 指令。詳情請參閱指定依附元件。由於執行階段會執行全新安裝,因此您不需要上傳 node_modules 資料夾。

為了支援需要原生擴充功能的 Node.js 套件,執行階段包含多項系統套件,可讓您使用 ImageMagickFFmpegChrome headless 等工具。如需套件的完整清單,請參閱包含的系統套件。如要索取套件,請在問題追蹤工具中提交要求

啟動應用程式

此執行階段會使用 package.json 檔案中指定的 start 指令碼,透過 npm start 來啟動您的應用程式。例如:

"scripts": {
  "start": "node app.js"
}

為了讓應用程式接收 HTTP 要求,start 指令碼應啟動在主機 0.0.0.0 上聆聽的網路伺服器,以及 PORT 環境變數指定的連接埠。您可在 Node.js 中存取這個以 process.env.PORT 形式顯示的環境變數。

如要獲得最佳效能,應使用輕量的 start 指令碼並排除建構步驟,因為每次當您建立新的應用程式執行個體時,都會執行該指令碼。

環境變數

下列為執行階段設定的環境變數:

環境變數 說明
GAE_APPLICATION App Engine 應用程式的 ID。
GAE_DEPLOYMENT_ID 目前部署的 ID。
GAE_ENV App Engine 環境。設定為 standard
GAE_INSTANCE 服務目前正在執行的執行個體 ID。
GAE_MEMORY_MB 應用程式程序可用的記憶體量,以 MB 為單位。
GAE_RUNTIME app.yaml 檔案中指定的執行階段。Node.js 適用的值為 nodejs 8nodejs10
GAE_SERVICE app.yaml 檔案中指定的服務名稱。如果未指定服務名稱,則會設為 default
GAE_VERSION 服務目前的版本標籤。
GOOGLE_CLOUD_PROJECT 與應用程式相關聯的 GCP 專案 ID。
NODE_ENV 在部署服務時設定為 production
PORT 接受 HTTP 要求的通訊埠。

您可以app.yaml 檔案中定義環境變數,但是除了 NODE_ENV 以外,無法覆寫上述的其他值。

HTTPS 和轉送 Proxy

App Engine 會在負載平衡器上終止 HTTPS 連線,並將要求轉送至您的應用程式。部分應用程式需要判斷原始要求 IP 和通訊協定。您可以在標準 X-Forwarded-For 標頭中找到使用者的 IP 位址。需要這項資訊的應用程式應將其網路架構設定為「信任 Proxy」。

如使用 Express.js,請使用 trust proxy 設定:

app.set('trust proxy', true);

檔案系統

執行階段包含完整的檔案系統。檔案系統為唯讀狀態,但位置 /tmp 除外。這個位置是在 App Engine 執行個體的 RAM 中儲存資料的虛擬磁碟。

中繼資料伺服器

應用程式的每個執行個體都可以使用 App Engine 中繼資料伺服器來查詢與執行個體和專案相關的資訊。

您可以透過以下端點存取中繼資料伺服器:

  • http://metadata
  • http://metadata.google.internal

下表列出可讓您針對特定中繼資料發出 HTTP 要求的端點:

中繼資料端點 說明
/computeMetadata/v1/project/numeric-project-id 指派給專案的專案編號。
/computeMetadata/v1/project/project-id 指派給專案的專案 ID。
/computeMetadata/v1/instance/zone 執行個體執行的區域。
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email 指派給專案的預設服務帳戶電子郵件。
/computeMetadata/v1/instance/service-accounts/default/ 列出專案的所有預設服務帳戶。
/computeMetadata/v1/instance/service-accounts/default/scopes 列出預設服務帳戶的所有支援範圍。
/computeMetadata/v1/instance/service-accounts/default/token 傳回可用來向其他 Google Cloud API 驗證應用程式的驗證憑證。

例如,如要擷取專案 ID,請將要求傳送至 http://metadata.google.internal/computeMetadata/v1/project/project-id

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
App Engine standard environment for Node.js docs