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 filepackage.json
Anda:"gcp-build":""
. Untuk detail tentang cara mengonfigurasipackage.json
, lihat konfigurasi buildpack Node.js. Menambahkan variabel lingkungan build
GOOGLE_NODE_RUN_SCRIPTS
dengan nilai kosong di fileapp.yaml
.build_env_variables: GOOGLE_NODE_RUN_SCRIPTS: ''
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
.