Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Node.js aplikace musí být nasazeny se všemi požadovanými závislostmi npm. Modul nasazení služby App Service se automaticky spustí npm install --production , když nasadíte úložiště Git nebo když nasadíte balíček ZIPs povolenou automatizací sestavení. Pokud ale soubory nasadíte pomocí FTP/S, musíte požadované balíčky nahrát ručně.
Tento článek popisuje klíčové koncepty a poskytuje pokyny pro vývojáře Node.js, kteří nasazují službu App Service. Pokud jste službu Azure App Service nikdy nepoužívali, nejprve si pro kurz Node.js a Node.js s MongoDB .
Zobrazení verze Node.js
Pokud chcete zobrazit aktuální Node.js verzi, spusťte v Cloud Shellu následující příkaz:
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, spusťte v Cloud Shellu následující příkaz:
az webapp list-runtimes --os windows | grep NODE
Pokud chcete zobrazit aktuální Node.js verzi, spusťte v Cloud Shellu následující příkaz:
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 Shellu následující příkaz:
az webapp list-runtimes --os linux | grep NODE
Nastavení verze Node.js
Pokud chcete aplikaci nastavit na podporovanou Node.js verzi, spusťte v Cloud Shellu následující příkaz 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="~24"
Poznámka:
Tento příklad používá doporučenou syntaxi tilda k cílení na nejnovější dostupnou verzi modulu runtime Node.js 24 ve službě App Service.
Vzhledem k tomu, že modul runtime je pravidelně opravován a aktualizován platformou, nedoporučujeme cílit na konkrétní podverzi nebo opravu. Vzhledem k potenciálním rizikům zabezpečení nejsou tyto verze zaručené, že budou dostupné.
Poznámka:
V projektu package.jsonbyste měli nastavit verzi Node.js . Modul nasazení běží v samostatném procesu, který obsahuje všechny podporované verze Node.js.
Pokud chcete aplikaci nastavit na podporovanou Node.js verzi, spusťte v Cloud Shellu následující příkaz:
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "NODE|24-lts"
Toto nastavení určuje verzi Node.js, která se má použít, a to jak za běhu, tak během automatizovaného obnovení balíčku v Kudu.
Poznámka:
V projektu package.jsonbyste měli nastavit verzi Node.js . Modul nasazení běží v samostatném kontejneru, který obsahuje všechny podporované verze Node.js.
Co se stane se zastaralými runtimy ve službě App Service?
Zastaralé moduly runtime jsou zastaralá údržbou organizace nebo mají významná ohrožení zabezpečení. Proto se odeberou z vytváření a konfigurace stránek na portálu. Pokud je zastaralý modul runtime skrytý na portálu, všechny aplikace, které stále používají tento modul runtime, budou dál běžet.
Pokud chcete vytvořit aplikaci se zastaralou verzí modulu runtime, která se už na portálu nezobrazuje, použijte Azure CLI, šablonu ARM nebo Bicep. Tyto alternativy nasazení umožňují vytvářet zastaralé moduly runtime, které se odeberou z portálu, ale stále se podporují.
Pokud je modul runtime plně odebraný z platformy Služby App Service, obdrží vlastník předplatného Azure před odebráním e-mailové oznámení.
Nastavení čísla portu
Aplikace Node.js musí naslouchat správnému portu pro příjem příchozích požadavků.
Ve službě App Service ve Windows jsou aplikace Node.js 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 nastavit port 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 toto číslo portu. Pokud chcete přijímat požadavky, měla by vaše aplikace naslouchat portu zadanému process.env.PORT v proměnné. Následující příklad ukazuje, jak nastavit port 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 pomocí balíčků ZIP s povolenou automatizací sestavení, automatizace sestavení služby App Service provede následující kroky:
- Spusťte vlastní skript, pokud ho určí
PRE_BUILD_SCRIPT_PATH. - Spusťte
npm installbez příznaků. Tento krok zahrnuje npmpreinstallapostinstallskripty a také nainstalujedevDependencies. - Spusťte
npm run build, pokud je v souboru package.json zadaný skript sestavení. - Spusťte
npm run build:azure,build:azurepokud je v souboru package.json zadaný skript. - Spusťte vlastní skript, pokud ho určí
POST_BUILD_SCRIPT_PATH.
Poznámka:
Jak je uvedeno v dokumentaci npm, skripty pojmenované prebuild a postbuild se spouštějí před a po build v tomto pořadí, pokud jsou zadány. Skripty pojmenované preinstall a postinstall spouštěné před a za install, v uvedeném pořadí.
PRE_BUILD_COMMAND a POST_BUILD_COMMAND jsou proměnné prostředí, které jsou ve výchozím nastavení prázdné. Chcete-li spustit příkazy před sestavením, definujte PRE_BUILD_COMMAND. Chcete-li spustit příkazy po sestavení, definujte POST_BUILD_COMMAND.
Následující příklad používá dvě proměnné k určení řady příkazů, které jsou odděleny čá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"
Informace o dalších proměnných prostředí pro přizpůsobení automatizace sestavení naleznete v tématu Konfigurace Oryx.
Další informace o tom, jak App Service běží a sestavuje Node.js aplikace v Linuxu, najdete v dokumentaci k Oryxu: Jak se aplikace Node.js zjistí a sestaví.
Konfigurace Node.js serveru
Kontejnery Node.js mají manažera výrobních procesů PM2. Aplikaci můžete nakonfigurovat tak, aby začínala na PM2, pomocí npm startpříkazu nebo pomocí vlastního příkazu.
| Nástroj | Účel |
|---|---|
| Spustit pomocí PM2 | Doporučeno. Produkční nebo přípravné použití. PM2 poskytuje plnohodnotnou platformu pro správu aplikací. |
| Spusťte pomocí npm start | Pouze pro účely vývoje. |
| Spustit pomocí vlastního příkazu | Vývoj nebo příprava. |
Spuštění s PM2
Kontejner automaticky spustí aplikaci pm2, když se v projektu najde jeden z běžných Node.js souborů:
- bin/www
- server.js
- app.js
- index.js
- hostingstart.js
- Jeden z následujících souborů PM2: process.json nebo ecosystem.config.js
Můžete také nakonfigurovat vlastní spouštěcí soubor s následujícími příponami:
- Soubor .js
- A PM2 soubor , který má příponu .json, .config.js, .yaml nebo .yml
Poznámka:
U verzí Node.js po Node 14 LTS kontejner nespustí vaši aplikaci s PM2 automaticky. Pokud chcete aplikaci spustit pomocí 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 Shellu následující příkaz:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<filename-with-extension>"
Spusťte s vlastním příkazem
App Service může aplikaci spustit pomocí vlastního příkazu, například spustitelného souboru, jako je run.sh. Pokud chcete například spustit npm run start:prod, spusťte v Cloud Shellu následující příkaz:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "npm run start:prod"
Spusťte pomocí npm start
Pokud chcete aplikaci spustit , npm startstačí se ujistit, že start je skript v souborupackage.json . Příklad:
{
...
"scripts": {
"start": "gulp",
...
},
...
}
Pokud chcete ve svém projektu použít vlastní package.json , spusťte v Cloud Shellu 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í kódu
Aplikaci Node.js můžete vzdáleně ladit v editoru Visual Studio Code , pokud ji nakonfigurujete tak, aby běžela s pm2, s výjimkou případů, kdy ji spouštíte pomocí souboru.config.js, .yml nebo .yaml .
Ve většině případů se pro vaši aplikaci nevyžaduje žádná další konfigurace. Pokud je vaše aplikace spuštěná se souboremprocess.json (výchozí nebo vlastní), musí mít script vlastnost v kořenovém adresáři JSON. Příklad:
{
"name" : "worker",
"script" : "./index.js",
...
}
Pokud chcete nakonfigurovat Visual Studio Code 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 vyhledejte aplikaci, kterou chcete ladit, klikněte na ni pravým tlačítkem myši a vyberte Spustit vzdálené ladění. Pokud chcete povolit vzdálené ladění pro vaši aplikaci, vyberte Ano . App Service spustí proxy tunelový server a připojí ladicí program. Poté můžete provádět požadavky na aplikaci a vidět, jak se ladicí program zastaví na bodech přerušení.
Až budete s laděním hotovi, zastavte ladicí program tak, že vyberete Odpojit. Po zobrazení výzvy byste měli vybrat ano, pokud chcete zakázat vzdálené ladění. Pokud ho chcete později zakázat, klikněte znovu 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í
Ve službě App Service můžete nastavit nastavení aplikace mimo kód aplikace. K nim pak můžete přistupovat 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/Gulp
Ve výchozím nastavení se automatizace sestavení služby App Service spustí npm install --production , když rozpozná, že Node.js aplikace je 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 automatizačních nástrojů, jako je Grunt, Bower nebo Gulp, musíte k jeho spuštění zadat vlastní skript nasazení .
Pokud chcete úložišti povolit spouštění těchto nástrojů, musíte je přidat do závislostí v package.json. Například:
"dependencies": {
"bower": "^1.7.9",
"grunt": "^1.0.1",
"gulp": "^3.9.1",
...
}
V okně místního terminálu změňte adresář na kořenový adresář ú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 dva další soubory: .deployment a deploy.sh.
Otevřete deploy.sh a najděte Deployment oddíl, který vypadá takto:
#############################################################
# Deployment
# ----------
Na konci této části npm install --production se spustí. Přidejte oddíl kódu, který potřebujete ke spuštění požadovaného nástroje na konci oddílu Deployment :
Příklad najdete v ukázceMEAN.js. V této ukázce skript nasazení také spustí vlastní npm install příkaz.
Besídka
Tento fragment kódu se 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
Lok
Tento fragment kódu se 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 se spustí grunt.
if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/grunt
exitWithMessageOnError "Grunt failed"
cd - > /dev/null
fi
Zjištění relace HTTPS
Ve službě 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 dosáhnou vaší aplikace jako nešifrované požadavky HTTP. Pokud logika aplikace potřebuje zkontrolovat, jestli jsou požadavky uživatelů zašifrované, zkontrolujte hlavičku X-Forwarded-Proto .
Oblíbené webové architektury umožňují přístup k X-Forwarded-* informacím 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 kódu vaší 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, Infoa Verbose. Každá další úroveň zahrnuje předchozí úroveň. Například Error obsahuje pouze chybové zprávy.
Verbose obsahuje všechny zprávy.
Po zapnutí protokolování diagnostiky spuštěním následujícího příkazu zobrazte stream protokolu:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Pokud se protokoly konzoly nezobrazí okamžitě, zkontrolujte to znovu za 30 sekund.
Pokud chcete streamování protokolů kdykoli zastavit, vyberte Ctrl+C.
Můžete získat přístup k protokolům konzoly, které se generují z kontejneru.
Protokolování kontejneru zapnete 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 hodnoty <app-name> a <resource-group-name> názvy, které jsou vhodné pro vaši webovou aplikaci.
Po zapnutí protokolování kontejneru spusťte následující příkaz, abyste viděli stream protokolu:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Pokud se protokoly konzoly nezobrazí okamžitě, zkontrolujte to znovu za 30 sekund.
Pokud chcete streamování protokolů kdykoli zastavit, použijte klávesovou zkratku Ctrl+C.
Přepsání adresy URL
Při nasazování Node.js aplikací ve službě Aplikace Azure Service pro Linux možná budete muset zpracovávat přepisy adres URL přímo v aplikaci. Tato konfigurace je užitečná zejména pro zajištění přesměrování konkrétních vzorů adres URL na správné koncové body bez nutnosti spoléhat se na konfigurace webového serveru. Existuje několik způsobů, jak v Node.js přepsat adresy URL. Jedním z příkladů je použití balíčku express-urlrewrite .
Monitorování aplikace pomocí Application Insights
Application Insights umožňuje monitorovat výkon, výjimky a použití vaší aplikace, aniž byste museli provádět změny kódu. Pokud chcete připojit agenta Application Insights, přejděte na portálu k webové aplikaci, vyberte Application Insights v části Monitorování a pak vyberte Zapnout Application Insights. Dále vyberte existující prostředek Application Insights nebo vytvořte nový. Nakonec vyberte Použít v dolní části stránky. Pokud chcete webovou aplikaci instrumentovat pomocí PowerShellu, přečtě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 v tématu Povolení monitorování aplikací ve službě Azure App Service pro .NET, Node.js, Python a aplikace v Javě.
Řešení problému
Když se pracovní Node.js aplikace chová jinak ve službě App Service 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í vaše Node.js aplikace v produkčním režimu, takže musíte zajistit, aby váš projekt fungoval očekávaným způsobem v produkčním režimu místně. Příklad:
- V závislosti na package.jsonse můžou nainstalovat různé balíčky pro produkční režim (
dependenciesvs.devDependencies). - Některé webové architektury můžou v produkčním režimu nasazovat statické soubory jinak.
- Některé webové architektury můžou při spuštění v produkčním režimu používat vlastní spouštěcí skripty.
- V závislosti na package.jsonse můžou nainstalovat různé balíčky pro produkční režim (
- Spusťte aplikaci ve službě App Service v režimu vývoje. Například v MEAN.jsmůžete aplikaci nastavit na vývojový režim za běhu nastavením
NODE_ENVnastavení aplikace.
Nemáte oprávnění k zobrazení tohoto adresáře nebo stránky.
Po nasazení kódu Node.js do nativní aplikace pro Windows ve službě App Service se může při přechodu na adresu URL aplikace zobrazit zpráva You do not have permission to view this directory or page v prohlížeči. K této chybě pravděpodobně dochází, protož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í vygeneruje soubor web.config ve webovém kořenovém adresáři vaší aplikace (%HOME%\site\wwwroot) automaticky, pokud platí jedna z následujících podmínek:
- Kořenový adresář projektu obsahuje souborpackage.json , který definuje
startskript, který obsahuje cestu k souboru JavaScriptu. - Kořenový adresář projektu obsahuje souborserver.js nebo app.js .
Vygenerovaný soubor web.config je přizpůsobený zjištěnému spouštěcímu skriptu. Pro jiné metody nasazení přidejte soubor web.config ručně. Ujistěte se, že je soubor správně naformátovaný.
Pokud používáte nasazení ZIP (například přes Visual Studio Code), nezapomeňte povolit automatizaci sestavení. Ve výchozím nastavení není povolená.
az webapp up používá nasazení ve formátu ZIP s aktivovanou automatizací sestavení.
Ignorovat zprávu 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. Služba App Service ji používá ke kontrole, jestli kontejner dokáže obsluhovat požadavky. Chybová odpověď 404 značí, že cesta neexistuje, a signalizuje app Service, že kontejner je v pořádku a připravený reagovat na požadavky.