Konfigurace aplikace v Node.js pro službu Azure App Service

Node.js aplikace musí být nasazené se všemi požadovanými závislostmi NPM. Modul nasazení App Service se automaticky spustínpm install --production, když nasadíte úložiště Git nebo balíček Zips povolenou automatizací sestavení. Pokud ale nasazujete soubory pomocí ftp/S, musíte požadované balíčky nahrát ručně.

Tato příručka obsahuje klíčové koncepty a pokyny pro Node.js vývojáře, kteří nasazují App Service. Pokud jste Azure App Service nikdy nepoužívali, nejprve postupujte podle kurzu Rychlý start kNode.js a Node.js s MongoDB.

Zobrazit Node.js verzi

Aktuální verzi Node.js zobrazíte spuštěním následujícího příkazu v Cloud Shell:

az webapp config appsettings list --name <app-name> --resource-group <resource-group-name> --query "[?name=='WEBSITE_NODE_DEFAULT_VERSION'].value"

Pokud chcete zobrazit všechny podporované verze Node.js, přejděte na https://<sitename>.scm.azurewebsites.net/api/diagnostics/runtimeCloud Shell nebo spusťte následující příkaz:

az webapp list-runtimes --os windows | grep NODE

Aktuální verzi Node.js zobrazíte spuštěním následujícího příkazu v Cloud Shell:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

Pokud chcete zobrazit všechny podporované verze Node.js, spusťte v Cloud Shell následující příkaz:

az webapp list-runtimes --os linux | grep NODE

Nastavení Node.js verze

Pokud chcete aplikaci nastavit na podporovanou Node.js verzi, spusťte následující příkaz v Cloud Shell a nastavte WEBSITE_NODE_DEFAULT_VERSION ji na podporovanou verzi:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_NODE_DEFAULT_VERSION="~16"

Poznámka

Tento příklad používá doporučenou syntaxi tildy k cílení na nejnovější dostupnou verzi modulu runtime Node.js 16 na App Service.

Vzhledem k tomu, že modul runtime je pravidelně opravován a aktualizován platformou, nedoporučuje se cílit na konkrétní podverzi nebo opravu, protože kvůli potenciálním bezpečnostním rizikům není zaručeno, že budou dostupné.

Poznámka

Verzi Node.js byste měli nastavit v souboru projektu package.json. Modul nasazení běží v samostatném procesu, který obsahuje všechny podporované verze Node.js.

Pokud chcete aplikaci nastavit na podporovanou verzi Node.js, spusťte v Cloud Shell následující příkaz:

az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "NODE|14-lts"

Toto nastavení určuje Node.js verzi, která se má použít, a to jak za běhu, tak během automatizovaného obnovení balíčků v Kudu.

Poznámka

Verzi Node.js byste měli nastavit v souboru projektu package.json. Modul nasazení běží v samostatném kontejneru, který obsahuje všechny podporované verze Node.js.

Získání čísla portu

Aplikace Node.js musí naslouchat správnému portu, aby přijímala příchozí požadavky.

V App Service ve Windows jsou Node.js aplikace hostované pomocí modulu IISNode a vaše Node.js aplikace by měla naslouchat portu zadanému process.env.PORT v proměnné . Následující příklad ukazuje, jak to uděláte v jednoduché aplikaci Express:

App Service nastaví proměnnou PORT prostředí v kontejneru Node.js a přesměruje příchozí požadavky do kontejneru na daném čísle portu. Aby vaše aplikace přijímala požadavky, měla by naslouchat požadavkům na tento port pomocí příkazu process.env.PORT. Následující příklad ukazuje, jak to uděláte v jednoduché aplikaci Express:

const express = require('express')
const app = express()
const port = process.env.PORT || 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

Přizpůsobení automatizace sestavení

Pokud nasadíte aplikaci pomocí Gitu nebo balíčků ZIP s povolenou automatizací sestavení, App Service automatizace sestavení provede následující postup:

  1. Pokud je zadaný parametrem PRE_BUILD_SCRIPT_PATH, spusťte vlastní skript.
  2. Spusťte npm install příkaz bez příznaků, který zahrnuje npm preinstall a skripty, postinstall a také nainstaluje devDependencies.
  3. Pokud je v souboru package.json zadaný skript sestavení, spusťte npm run build ho.
  4. Pokud je v souboru package.json zadaný skript build:azure, spusťte npm run build:azure ho.
  5. Pokud je zadaný parametrem POST_BUILD_SCRIPT_PATH, spusťte vlastní skript.

Poznámka

Jak je popsáno v dokumentaci npm, skripty pojmenované prebuild a postbuild spouštěné před a za build, pokud jsou zadané. preinstall a postinstall spustit před a po install.

PRE_BUILD_COMMAND a POST_BUILD_COMMAND jsou proměnné prostředí, které jsou ve výchozím nastavení prázdné. Pokud chcete spouštět příkazy před sestavením, definujte PRE_BUILD_COMMAND. Pokud chcete spouštět příkazy po sestavení, definujte POST_BUILD_COMMAND.

Následující příklad určuje dvě proměnné pro řadu příkazů oddělených čárkami.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"

Další proměnné prostředí pro přizpůsobení automatizace sestavení najdete v tématu Konfigurace nástroje Oryx.

Další informace o tom, jak App Service spouštět a sestavovat Node.js aplikace v Linuxu, najdete v dokumentaci k nástroji Oryx: Jak se zjišťují a sestavují aplikace Node.js.

Konfigurace Node.js serveru

Kontejnery Node.js jsou dodávány s PM2, manažerem výrobních procesů. Aplikaci můžete nakonfigurovat tak, aby začínala s PM2, NPM nebo pomocí vlastního příkazu.

Nástroj Účel
Spuštění s PM2 Doporučené – použití v produkčním nebo přípravném prostředí. PM2 poskytuje kompletní platformu pro správu aplikací.
Spuštění npm start Pouze pro použití při vývoji.
Spuštění vlastního příkazu Vývoj nebo příprava.

Spuštění s PM2

Kontejner automaticky spustí aplikaci s PM2, když se ve vašem projektu najde jeden z běžných souborů Node.js:

  • bin/www
  • server.js
  • app.js
  • index.js
  • hostingstart.js
  • Jeden z následujících souborů PM2: process.json a ecosystem.config.js

Můžete také nakonfigurovat vlastní spouštěcí soubor s následujícími příponami:

  • Soubor.js
  • Soubor PM2 s příponou .json, .config.js, .yaml nebo .yml

Poznámka

Od verze Node 14 LTS kontejner automaticky nespustí vaši aplikaci s PM2. Pokud chcete aplikaci spustit s pm2, nastavte spouštěcí příkaz na pm2 start <.js-file-or-PM2-file> --no-daemon. Nezapomeňte použít argument , --no-daemon protože pm2 musí běžet v popředí, aby kontejner fungoval správně.

Pokud chcete přidat vlastní spouštěcí soubor, spusťte v Cloud Shell následující příkaz:

az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<filename-with-extension>"

Spuštění vlastního příkazu

App Service můžete aplikaci spustit pomocí vlastního příkazu, jako je například spustitelný soubor run.sh. Pokud například chcete spustit npm run start:prod, spusťte v Cloud Shell následující příkaz:

az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "npm run start:prod"

Spuštění npm start

Pokud chcete aplikaci spustit pomocí npm startpříkazu , stačí se ujistit, start že je skript v souboru package.json . Příklad:

{
  ...
  "scripts": {
    "start": "gulp",
    ...
  },
  ...
}

Pokud chcete v projektu použít vlastní soubor package.json, spusťte v Cloud Shell následující příkaz:

az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<filename>.json"

Vzdálené ladění

Poznámka

Vzdálené ladění je aktuálně ve verzi Preview.

Aplikaci Node.js můžete v editoru Visual Studio Code vzdáleně ladit, pokud ji nakonfigurujete tak, aby běžela s pm2, s výjimkou případů, kdy ji spustíte pomocí .config.js, .yml nebo .yaml.

Ve většině případů se pro vaši aplikaci nevyžaduje žádná další konfigurace. Pokud se vaše aplikace spouští se souborem process.json (výchozí nebo vlastní), musí mít vlastnost v kořenovém script adresáři JSON. Příklad:

{
  "name"        : "worker",
  "script"      : "./index.js",
  ...
}

Pokud chcete visual Studio Code nastavit pro vzdálené ladění, nainstalujte rozšíření App Service. Postupujte podle pokynů na stránce rozšíření a přihlaste se k Azure v editoru Visual Studio Code.

V průzkumníku Azure najděte aplikaci, kterou chcete ladit, klikněte na ni pravým tlačítkem a vyberte Spustit vzdálené ladění. Kliknutím na Ano ji pro svou aplikaci povolíte. App Service za vás spustí proxy tunelu a připojí ladicí program. Potom můžete do aplikace zadat požadavky a zobrazit, jak se ladicí program pozastavuje v bodech přerušení.

Po dokončení ladění zastavte ladicí program výběrem možnosti Odpojit. Po zobrazení výzvy byste měli kliknutím na Ano vzdálené ladění zakázat. Pokud ho budete chtít později zakázat, znovu klikněte pravým tlačítkem na aplikaci v Průzkumníku Azure a vyberte Zakázat vzdálené ladění.

Přístup k proměnným prostředí

V App Service můžete nastavit nastavení aplikace mimo kód vaší aplikace. Pak k nim budete mít přístup pomocí standardního vzoru Node.js. Například pro přístup k aplikačnímu nastavení s názvem NODE_ENV použijete následující kód:

process.env.NODE_ENV

Spusťte Grunt, Bower nebo Gulp.

Ve výchozím nastavení se automatizace sestavení App Service spustínpm install --production, když rozpozná, že je aplikace Node.js nasazená prostřednictvím Gitu nebo prostřednictvím nasazení zip s povolenou automatizací sestavení. Pokud vaše aplikace vyžaduje některý z oblíbených nástrojů pro automatizaci, jako je Grunt, Bower nebo Gulp, musíte k jejímu spuštění zadat vlastní skript nasazení .

Pokud chcete v úložišti povolit spouštění těchto nástrojů, musíte je přidat do závislostí v souboru package.json. Příklad:

"dependencies": {
  "bower": "^1.7.9",
  "grunt": "^1.0.1",
  "gulp": "^3.9.1",
  ...
}

V místním okně terminálu přejděte do kořenového adresáře úložiště a spusťte následující příkazy:

npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt

Kořenový adresář úložiště teď obsahuje další dva soubory: .deployment a deploy.sh.

Otevřete deploy.sh a najděte Deployment oddíl, který vypadá takto:

##################################################################################################################################
# Deployment
# ----------

Tato část končí spuštěním npm install --productionpříkazu . Na konec oddílu přidejte část kódu, kterou potřebujete ke spuštění požadovaného Deployment nástroje:

Podívejte se na příklad v ukázce MEAN.js, kde skript nasazení spustí také vlastní npm install příkaz.

Bower

Tento fragment kódu spustí bower install.

if [ -e "$DEPLOYMENT_TARGET/bower.json" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/bower install
  exitWithMessageOnError "bower failed"
  cd - > /dev/null
fi

Gulp

Tento fragment kódu spustí gulp imagemin.

if [ -e "$DEPLOYMENT_TARGET/gulpfile.js" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/gulp imagemin
  exitWithMessageOnError "gulp failed"
  cd - > /dev/null
fi

Grunt

Tento fragment kódu spustí grunt.

if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/grunt
  exitWithMessageOnError "Grunt failed"
  cd - > /dev/null
fi

Detekce relace HTTPS

V App Service dochází k ukončení protokolu TLS/SSL v nástrojích pro vyrovnávání zatížení sítě, takže všechny požadavky HTTPS dorazí do vaší aplikace jako nešifrované požadavky HTTP. Pokud logika vaší aplikace potřebuje zkontrolovat, jestli jsou požadavky uživatelů šifrované, nebo ne, zkontrolujte hlavičku X-Forwarded-Proto .

Oblíbené webové architektury umožňují přístup k informacím X-Forwarded-* ve standardním vzoru aplikace. V Expressu můžete použít důvěryhodné proxy servery. Příklad:

app.set('trust proxy', 1)
...
if (req.secure) {
  // Do something when HTTPS is used
}

Přístup k diagnostickým protokolům

Pokud chcete získat přístup k protokolům konzoly vygenerovaným v rámci kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Možné hodnoty pro --level jsou: Error, Warning, Info a Verbose. Každá další úroveň zahrnuje předchozí úroveň. Například Error zahrnuje jenom chybové zprávy a Verbose zahrnuje všechny zprávy.

Jakmile je aktivované protokolování diagnostiky, spusťte následující příkaz pro zobrazení streamu protokolů:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Poznámka

Soubory protokolu můžete také zkontrolovat v prohlížeči na https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Streamování protokolů můžete kdykoli zastavit zadáním Ctrl+C.

Můžete získat přístup k protokolům konzoly vygenerovaným uvnitř kontejneru.

Nejprve zapněte protokolování kontejneru spuštěním následujícího příkazu:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Nahraďte <app-name> a <resource-group-name> názvy vhodnými pro vaši webovou aplikaci.

Jakmile je protokolování kontejneru zapnuté, spuštěním následujícího příkazu zobrazte stream protokolu:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Pokud chcete streamování protokolů kdykoli zastavit, stiskněte Ctrl+C.

Soubory protokolu můžete také zkontrolovat v prohlížeči na adrese https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Monitorování pomocí Application Insights

Application Insights umožňuje monitorovat výkon, výjimky a využití vaší aplikace, aniž byste museli měnit kód. Pokud chcete připojit agenta App Insights, přejděte na portálu do své webové aplikace, v části Nastavení vyberte Application Insights a pak vyberte Zapnout Application Insights. Dále vyberte existující prostředek App Insights nebo vytvořte nový. Nakonec dole vyberte Použít . Pokud chcete instrumentovat webovou aplikaci pomocí PowerShellu, projděte si tyto pokyny.

Tento agent bude monitorovat Node.js aplikaci na straně serveru. Pokud chcete monitorovat JavaScript na straně klienta, přidejte do projektu sadu JavaScript SDK.

Další informace najdete ve zprávě k vydání verze rozšíření Application Insights.

Řešení potíží

Pokud se pracovní aplikace Node.js chová v App Service odlišně nebo obsahuje chyby, zkuste následující:

  • Přístup ke streamu protokolu.
  • Otestujte aplikaci místně v produkčním režimu. App Service spouští aplikace Node.js v produkčním režimu, takže se musíte ujistit, že projekt funguje v produkčním režimu místně podle očekávání. Příklad:
    • V závislosti na souboru package.json je možné nainstalovat různé balíčky pro produkční režim (dependencies vs. devDependencies).
    • Některá webová rozhraní můžou v produkčním režimu nasazovat statické soubory odlišně.
    • Některá webová rozhraní můžou při spuštění v produkčním režimu používat vlastní spouštěcí skripty.
  • Spusťte aplikaci v App Service ve vývojovém režimu. Například v MEAN.jsmůžete aplikaci nastavit do vývojového NODE_ENVrežimu v modulu runtime tak, že nastavíte aplikaci.

Nemáte oprávnění k zobrazení tohoto adresáře nebo stránky.

Po nasazení kódu Node.js do nativní aplikace pro Windows v App Service se při přechodu na adresu URL vaší aplikace může v prohlížeči zobrazit zprávaYou do not have permission to view this directory or page.. Nejpravděpodobnější je, že nemáte web.config soubor (viz šablona a příklad).

Pokud nasadíte soubory pomocí Gitu nebo pomocí nasazení ZIP s povolenou automatizací sestavení, modul nasazení automaticky vygeneruje web.config v kořenovém adresáři webové aplikace (%HOME%\site\wwwroot), pokud platí jedna z následujících podmínek:

  • Kořen projektu obsahuje soubor package.json , který definuje start skript, který obsahuje cestu k souboru JavaScriptu.
  • Kořen projektu má server.js nebo app.js.

Vygenerovaný web.config je přizpůsobený zjištěnému spouštěcímu skriptu. Pro další metody nasazení přidejte tento web.config ručně. Zkontrolujte, jestli je soubor správně naformátovaný.

Pokud používáte nasazení ZIP (například prostřednictvím editoru Visual Studio Code), nezapomeňte povolit automatizaci sestavení , protože ve výchozím nastavení není povolená. az webapp up používá nasazení ZIP s povolenou automatizací sestavení.

robots933456 v protokolech

V protokolech kontejneru se může zobrazit následující zpráva:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Tuto zprávu klidně ignorujte. /robots933456.txt je fiktivní cesta URL, kterou App Service používá ke kontrole, jestli kontejner dokáže obsloužit požadavky. Odpověď 404 jednoduše indikuje, že příslušná cesta neexistuje, ale dá službě App Service vědět, že kontejner je v pořádku a je připravený reagovat na požadavky.

Další kroky

Nebo si projděte další zdroje informací:

Referenční informace k proměnným prostředí a nastavením aplikací