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/runtime
Cloud 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:
- Pokud je zadaný parametrem
PRE_BUILD_SCRIPT_PATH
, spusťte vlastní skript. - Spusťte
npm install
příkaz bez příznaků, který zahrnuje npmpreinstall
a skripty,postinstall
a také nainstalujedevDependencies
. - Pokud je v souboru package.json zadaný skript sestavení, spusťte
npm run build
ho. - Pokud je v souboru package.json zadaný skript build:azure, spusťte
npm run build:azure
ho. - 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 start
pří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 --production
pří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.
- V závislosti na souboru package.json je možné nainstalovat různé balíčky pro produkční režim (
- 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_ENV
rež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í