Lingkungan Runtime Node.js

Runtime Node.js adalah stack software yang bertanggung jawab untuk menginstal kode layanan web Anda dan dependensinya serta menjalankan layanan Anda.

Runtime Node.js untuk App Engine di lingkungan standar dideklarasikan dalam file app.yaml:

runtime: nodejsVERSION

VERSION adalah nomor versi MAJOR untuk Node.js. Misalnya, untuk menggunakan versi Node.js terbaru, Node.js 22, tentukan 22.

Untuk versi Node.js lain yang didukung, dan versi Ubuntu yang sesuai untuk versi Node.js Anda, lihat Jadwal dukungan runtime.

Versi Node.js

Runtime Node.js menggunakan rilis stabil terbaru dari versi yang ditentukan di file app.yaml Anda. App Engine otomatis diupdate ke versi patch dan rilis minor baru, tetapi tidak akan otomatis mengupdate versi utama.

Misalnya, aplikasi Anda mungkin di-deploy di Node.js 10.9.4 dan kemudian diupdate secara otomatis ke versi 10.10.0, tetapi tidak akan diupdate secara otomatis ke Node.js 12.xx

Karena versi minor dan patch otomatis diupdate, jika ada, properti engines.node dalam file package.json, file hanya dapat menentukan versi utama dan kompatibel dengan versi Node.js yang ditentukan dalam file app.yaml Anda.

Misalnya untuk 22:

  • 22.x.x
  • ^22.0.0
  • ~22
  • >=6

Jika Anda menentukan versi Node.js yang tidak kompatibel dalam file package.json, deployment Anda akan gagal disertai pesan error.

Dependensi

Selama deployment, runtime akan menginstal dependensi Anda menggunakan perintah npm install. Runtime ini juga mendukung pengelola paket Yarn (yarn.lock) dan Pnpm (pnpm-lock.yaml). Untuk mengetahui informasi selengkapnya, baca Menentukan Dependensi. Karena runtime menjalankan penginstalan baru, Anda tidak perlu mengupload folder node_modules.

Untuk mendukung paket Node.js yang memerlukan ekstensi native, runtime menyertakan paket sistem yang memungkinkan Anda menggunakan alat seperti ImageMagick, FFmpeg, dan Chrome headless. Lihat daftar lengkap paket di Paket Sistem yang Disertakan. Untuk meminta paket, ajukan masalah di pelacak masalah.

Skrip build NPM

Secara default, runtime Node.js akan mengeksekusi npm run build jika skrip build terdeteksi di package.json. Jika memerlukan kontrol tambahan pada langkah-langkah build sebelum memulai aplikasi, Anda dapat memberikan langkah build kustom dengan menambahkan skrip gcp-build ke file package.json.

Untuk mencegah build menjalankan skrip npm run build, Anda harus:

  • Menambahkan skrip gcp-build dengan nilai kosong di file package.json Anda: "gcp-build":"". Untuk detail tentang cara mengonfigurasi package.json, lihat konfigurasi buildpack Node.js.
  • Menambahkan variabel lingkungan build GOOGLE_NODE_RUN_SCRIPTS dengan nilai kosong di file app.yaml.

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
Untuk mengetahui detail tentang cara menentukan variabel lingkungan build, lihat bagian build_env_variables dalam file app.yaml.

Proses mulai aplikasi

Secara default, runtime memulai aplikasi Anda dengan menjalankan node server.js. Jika Anda menentukan skrip start dalam file package.json, runtime akan menjalankan skrip awal yang ditentukan. Contoh:

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

Agar aplikasi Anda dapat menerima permintaan HTTP, start skrip harus memulai server web yang mendengarkan di host 0.0.0.0 dan port yang ditentukan oleh variabel lingkungan PORT, yang dapat diakses di Node.js sebagai process.env.PORT.

Untuk performa terbaik, skrip start harus ringan dan tidak menyertakan langkah-langkah build, karena akan berjalan setiap kali instance baru aplikasi Anda dibuat.

Anda dapat mengganti perilaku ini dengan menentukan skrip di kolom entrypoint pada app.yaml. Bukannya menjalankan node server.js atau skrip awal, runtime memulai aplikasi dengan perintah yang Anda tentukan di entrypoint.

Variabel lingkungan

Variabel lingkungan berikut ditetapkan oleh runtime:

Variabel lingkungan Deskripsi
GAE_APPLICATION ID aplikasi App Engine Anda. ID ini diawali dengan 'region code~' seperti 'e~' untuk aplikasi yang di-deploy di Eropa.
GAE_DEPLOYMENT_ID ID deployment saat ini.
GAE_ENV Lingkungan App Engine. Tetapkan ke standard.
GAE_INSTANCE ID instance di mana layanan Anda saat ini berjalan.
GAE_MEMORY_MB Jumlah memori yang tersedia untuk proses aplikasi, dalam MB.
GAE_RUNTIME Runtime yang ditentukan dalam file app.yaml Anda.
GAE_SERVICE Nama layanan yang ditentukan dalam file app.yaml Anda. Jika tidak ada nama layanan yang ditentukan, nama akan ditetapkan ke default.
GAE_VERSION Label versi layanan Anda saat ini.
GOOGLE_CLOUD_PROJECT ID project Google Cloud yang terkait dengan aplikasi Anda.
PORT Port yang menerima permintaan HTTP.
NODE_ENV (Hanya tersedia di runtime Node.js) Tetapkan ke production saat layanan Anda di-deploy.

Anda dapat menentukan variabel lingkungan tambahan dalam file app.yaml, tetapi nilai di atas tidak dapat diganti, kecuali untuk NODE_ENV.

HTTPS dan proxy penerusan

App Engine menghentikan koneksi HTTPS di load balancer dan meneruskan permintaan ke aplikasi Anda. Beberapa aplikasi perlu menentukan IP dan protokol permintaan asli. Alamat IP pengguna tersedia di header X-Forwarded-For standar. Aplikasi yang memerlukan informasi ini harus mengonfigurasi framework webnya agar memercayai proxy.

Dengan Express.js, gunakan setelan trust proxy:

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

Perhatikan bahwa menyetel trust proxy ke true dapat membuka properti req.ip terhadap kerentanan spoofing IP.

Filesystem

Runtime ini meliputi sistem file lengkap. Sistem file bersifat hanya baca, kecuali untuk lokasi /tmp, yang merupakan disk virtual yang menyimpan data di RAM instance App Engine Anda.

Server metadata

Setiap instance aplikasi Anda dapat menggunakan server metadata App Engine untuk mengkueri informasi tentang instance dan project Anda.

Anda dapat mengakses server metadata melalui endpoint berikut:

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

Permintaan yang dikirim ke server metadata harus menyertakan header permintaan Metadata-Flavor: Google. Header ini menunjukkan bahwa permintaan dikirim dengan tujuan mengambil nilai metadata.

Tabel berikut mencantumkan daftar endpoint tempat Anda dapat membuat permintaan HTTP untuk metadata tertentu:

Endpoint metadata Deskripsi
/computeMetadata/v1/project/numeric-project-id Nomor project yang ditetapkan ke project Anda.
/computeMetadata/v1/project/project-id Project ID yang ditetapkan ke project Anda.
/computeMetadata/v1/instance/region Region di mana instance berjalan.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email Email akun layanan default yang ditetapkan ke project Anda.
/computeMetadata/v1/instance/service-accounts/default/ Mencantumkan semua akun layanan default untuk project Anda.
/computeMetadata/v1/instance/service-accounts/default/scopes Mencantumkan semua cakupan yang didukung untuk akun layanan default.
/computeMetadata/v1/instance/service-accounts/default/token Menampilkan token autentikasi yang dapat digunakan untuk mengautentikasi aplikasi Anda ke Google Cloud API lain.

Misalnya, untuk mengambil project ID Anda, kirim permintaan ke http://metadata.google.internal/computeMetadata/v1/project/project-id.