Vytvoření virtuálního počítače Express.js pomocí Azure CLI
V tomto kurzu vytvořte virtuální počítač s Linuxem pro aplikaci Express.js. Virtuální počítač je nakonfigurovaný s konfiguračním souborem cloud-init a zahrnuje NGINX a úložiště GitHub pro aplikaci Express.js. Připojte se k virtuálnímu počítači pomocí SSH, změňte webovou aplikaci na protokolování trasování a zobrazte veřejnou serverovou aplikaci Express.js ve webovém prohlížeči.
Tento kurz sestává z následujících úloh:
- Přihlášení k Azure pomocí Azure CLI
- Vytvoření prostředku virtuálního počítače Azure s Linuxem pomocí Azure CLI
- Otevření veřejného portu 80
- Instalace ukázkové webové aplikace Express.js z úložiště GitHub
- Instalace závislostí webové aplikace
- Spuštění webové aplikace
- Vytvoření prostředku monitorování Azure pomocí Azure CLI
- Připojení k virtuálnímu počítači pomocí SSH
- Instalace klientské knihovny Sady Azure SDK pomocí npm
- Přidání kódu klientské knihovny Application Insights pro vytvoření vlastního trasování
- Zobrazení webové aplikace z prohlížeče
- Vyžádání
/trace
trasy pro generování vlastního trasování v protokolu Application Insights - Zobrazení počtu trasování shromážděných v protokolu pomocí Azure CLI
- Zobrazení seznamu trasování pomocí webu Azure Portal
- Vyžádání
- Odebrání prostředků pomocí Azure CLI
Požadavky
- Uživatelský účet a předplatné Azure: Vytvořte bezplatné předplatné.
- Připojení k virtuálnímu počítači přes SSH: Použijte Azure Cloud Shell nebo moderní terminál, jako je prostředí Bash, které zahrnuje SSH.
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
1. Vytvoření prostředku Application Insights pro webové stránky
Vytvořte skupinu prostředků Azure pro všechny prostředky Azure a prostředek monitoru, abyste mohli shromažďovat soubory protokolů vaší webové aplikace do cloudu Azure. Vytvoření skupiny prostředků vám umožní snadno najít prostředky a po dokončení je odstranit. Azure Monitor je název služby Azure, zatímco Application Insights je název klientské knihovny, která kurz používá.
Volitelné, pokud máte více než jedno předplatné, před dokončením zbývajících příkazů nastavte výchozí předplatné pomocí příkazu az account set .
az account set \ --subscription "ACCOUNT NAME OR ID"
Vytvořte skupinu prostředků Azure pomocí příkazu az group create. Použijte název
rg-demo-vm-eastus
:az group create \ --location eastus \ --name rg-demo-vm-eastus
Vytvoření prostředku Azure Monitoru pomocí Azure CLI
Nainstalujte rozšíření Application Insights do Azure CLI.
az extension add -n application-insights
Pomocí následujícího příkazu vytvořte monitorovací prostředek pomocí příkazu az monitor app-insights component create:
az monitor app-insights component create \ --app demoWebAppMonitor \ --location eastus \ --resource-group rg-demo-vm-eastus \ --query instrumentationKey --output table
Zkopírujte výsledek z výstupu. Tuto hodnotu budete potřebovat později
instrumentationKey
.Nechte terminál otevřený, použijete ho v dalším kroku.
2. Vytvoření virtuálního počítače s Linuxem pomocí Azure CLI
Pomocí konfiguračního souboru cloud-init vytvoří reverzní proxy server NGINX i server Express.js. NGINX se používá k přesměrování portu Express.js (3000) na veřejný port (80).
Vytvořte místní soubor s názvem
cloud-init-github.txt
a uložte do něj následující obsah nebo soubor úložiště můžete uložit do místního počítače. Formátovaný soubor cloud-init musí existovat ve stejné složce jako cesta terminálu pro příkazy Azure CLI.#cloud-config package_upgrade: true packages: - nginx write_files: - owner: www-data:www-data path: /etc/nginx/sites-available/default content: | server { listen 80 default_server; server_name _; location / { # First, try if the file exists locally, otherwise request it from the app try_files $uri @app; } location @app { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } runcmd: # install Node.js - 'curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -' - 'sudo apt-get install -y nodejs' # clone GitHub Repo into myapp directory - 'cd /home/azureuser' - git clone "https://github.com/Azure-Samples/js-e2e-vm" myapp # Start app - 'cd myapp && npm install && npm start' # restart NGINX - systemctl restart nginx
runcmd
Projděte si část souboru a zjistěte, co dělá.Má
runcmd
několik úkolů:- Stáhněte si Node.js a nainstalujte ho.
- Klonování ukázkového úložiště Express.js z GitHubu do
myapp
adresáře - Instalace závislostí aplikace
- Spuštění aplikace Express.js pomocí PM2
Vytvoření prostředku virtuálního počítače
Zadejte příkaz Azure CLI, az vm create, v terminálu a vytvořte prostředek Azure virtuálního počítače s Linuxem. Příkaz vytvoří virtuální počítač ze souboru cloud-init a vygeneruje klíče SSH za vás. Spuštěný příkaz zobrazí, kde jsou klíče uložené.
az vm create \ --resource-group rg-demo-vm-eastus \ --name demo-vm \ --location eastus \ --public-ip-sku Standard \ --image UbuntuLTS \ --admin-username azureuser \ --generate-ssh-keys \ --custom-data cloud-init-github.txt
Počkejte, než proces může trvat několik minut.
Ponechte hodnotu publicIpAddress z odpovědi, je potřeba zobrazit webovou aplikaci v prohlížeči a připojit se k virtuálnímu počítači. Pokud tuto IP adresu ztratíte, použijte příkaz Azure CLI, az vm list-ip-addresses a získejte ji znovu.
Proces vytvořil klíče SSH, ale v umístění uvedené v odpovědi.
Přejděte do daného umístění a vytvořte
authorized_keys
soubor:cd <SSH-KEY-LOCATION> && cat id_rsa >> authorized_keys
Otevření portu pro virtuální počítač
Při prvním vytvoření nemá virtuální počítač žádné otevřené porty. Otevřete port 80 pomocí následujícího příkazu Azure CLI, az vm open-port, aby byla webová aplikace veřejně dostupná:
az vm open-port \
--port 80 \
--resource-group rg-demo-vm-eastus \
--name demo-vm
Přejít na web
Pomocí veřejné IP adresy ve webovém prohlížeči se ujistěte, že je virtuální počítač dostupný a spuštěný. Změňte adresu URL tak, aby používala hodnotu z
publicIpAddress
.http://YOUR-VM-PUBLIC-IP-ADDRESS
Pokud prostředek selže s chybou brány, zkuste to za minutu znovu, může spuštění webové aplikace chvíli trvat.
Webová aplikace virtuálního počítače vrátí následující informace:
- název virtuálního počítače
- IP adresa vašeho klienta
- Aktuální datum a čas
Počáteční soubor kódu pro webovou aplikaci má jednu trasu, která prošla přes proxy server NGINX.
const os = require('os'); const express = require('express') const app = express() app.use('/public', express.static('public')) app.get('/', function (req, res) { const clientIP = req.headers['x-forwarded-for']; const msg = `HostName: ${os.hostname()}<br>ClientIP: ${clientIP}<br>DateTime: ${new Date()}<br><img width='200' height='200' src='/public/leaves.jpg' alt='flowers'>` console.log(msg) res.send(msg) }) app.listen(3000, function () { console.log(`Hello world app listening on port 3000! ${Date.now()}`) })
3. Připojení k virtuálnímu počítači s Linuxem pomocí SSH
V této části kurzu se pomocí SSH v terminálu připojte k virtuálnímu počítači. SSH je běžný nástroj poskytovaný mnoha moderními prostředími, včetně Azure Cloud Shellu.
Připojení pomocí SSH a změna webové aplikace
Připojte se ke vzdálenému virtuálnímu počítači pomocí následujícího příkazu.
Nahraďte
YOUR-VM-PUBLIC-IP
veřejnou IP adresou vašeho virtuálního počítače.ssh azureuser@YOUR-VM-PUBLIC-IP
Tento proces předpokládá, že váš klient SSH může najít klíče SSH, vytvořené jako součást vytvoření virtuálního počítače a umístěné na místním počítači.
Pokud se zobrazí dotaz, jestli se opravdu chcete připojit, odpovězte
y
neboyes
pokračujte.Pomocí následujícího příkazu zjistěte, kde se nacházíte na virtuálním počítači. Měli byste být v kořenovém adresáři azureuser:
/home/azureuser
.pwd
Po dokončení připojení by se měl příkazový řádek terminálu změnit a indikovat uživatelské jméno a název prostředku vzdáleného virtuálního počítače.
azureuser@demo-vm:
Vaše webová aplikace je v podadresáři.
myapp
Přejděte domyapp
adresáře a vypíšete jeho obsah:cd myapp && ls -l
Měli byste vidět obsah představující úložiště GitHub naklonované do virtuálního počítače a soubory balíčků npm:
-rw-r--r-- 1 root root 891 Nov 11 20:23 cloud-init-github.txt -rw-r--r-- 1 root root 1347 Nov 11 20:23 index-logging.js -rw-r--r-- 1 root root 282 Nov 11 20:23 index.js drwxr-xr-x 190 root root 4096 Nov 11 20:23 node_modules -rw-r--r-- 1 root root 84115 Nov 11 20:23 package-lock.json -rw-r--r-- 1 root root 329 Nov 11 20:23 package.json -rw-r--r-- 1 root root 697 Nov 11 20:23 readme.md
Instalace sady SDK pro monitorování
V terminálu SSH, který je připojený k virtuálnímu počítači, nainstalujte klientskou knihovnu Azure SDK pro Application Insights.
sudo npm install --save applicationinsights
Než budete pokračovat, počkejte na dokončení příkazu.
Přidání klíče instrumentace monitorování
V terminálu SSH, který je připojený k virtuálnímu počítači, otevřete soubor pomocí editoru
package.json
Nano.sudo nano package.json
Přidejte proměnnou
APPINSIGHTS_INSTRUMENTATIONKEY
prostředí na začátek skriptu Start . V následujícím příkladu nahraďteREPLACE-WITH-YOUR-KEY
hodnotou klíče instrumentace."start": "APPINSIGHTS_INSTRUMENTATIONKEY=REPLACE-WITH-YOUR-KEY pm2 start index.js --watch --log /var/log/pm2.log"
V terminálu SSH uložte soubor v editoru Nano pomocí ovládacího prvku + X.
Pokud se zobrazí výzva v editoru Nano, zadejte Y , abyste ho uložili.
Pokud se zobrazí výzva v editoru Nano, přijměte název souboru po zobrazení výzvy.
Zastavení změny aplikace virtuálního počítače
Klientská knihovna Azure je teď ve vašem node_modules adresáři a klíč se předá do aplikace jako proměnná prostředí. Další krok programově používá Application Insights.
Stop PM2, což je správce výrobních procesů pro Node.js aplikace, s následujícími příkazy:
sudo npm run-script stop
Nahraďte původní
index.js
soubor pomocí Application Insights.sudo npm run-script appinsights
Klientská knihovna a kód protokolování jsou k dispozici za vás.
const express = require('express') const app = express() const os = require('os'); console.log(JSON.stringify(process.env)); const AppInsights = require('applicationinsights'); if (process.env.APPINSIGHTS_INSTRUMENTATIONKEY) { console.log(`AppInsights configured with key ${process.env.APPINSIGHTS_INSTRUMENTATIONKEY}`); } else{ console.log(`AppInsights not configured`); } AppInsights.setup(process.env.APPINSIGHTS_INSTRUMENTATIONKEY) .setAutoDependencyCorrelation(true) .setAutoCollectRequests(true) .setAutoCollectPerformance(true, true) .setAutoCollectExceptions(true) .setAutoCollectDependencies(true) .setAutoCollectConsole(true) .setUseDiskRetryCaching(true) .setSendLiveMetrics(false) .setDistributedTracingMode(AppInsights.DistributedTracingModes.AI) .start(); const AppInsightsClient = AppInsights.defaultClient; app.get('/trace', (req, res) => { const clientIP = req.headers['x-forwarded-for']; const msg = `trace route ${os.hostname()} ${clientIP} ${new Date()}`; console.log(msg) if (process.env.APPINSIGHTS_INSTRUMENTATIONKEY) { AppInsightsClient.trackPageView(); AppInsightsClient.trackTrace({ message: msg }) AppInsightsClient.flush(); } else { msg += ' AppInsights not configured'; } res.send(`${msg}`) }) app.get('/', function (req, res) { const clientIP = req.headers['x-forwarded-for']; const msg = `root route ${os.hostname()} ${clientIP} ${new Date()}` console.log(msg) res.send(msg) }) app.listen(3000, function () { console.log(`Hello world app listening on port 3000! ${os.hostname()}`) })
Restartujte aplikaci pomocí pm2, aby se vybrala další proměnná prostředí.
sudo npm start
Použití aplikace k ověření protokolování
Ve webovém prohlížeči otestujte aplikaci pomocí nové
trace
trasy:http://YOUR-VM-PUBLIC-IP-ADDRESS/trace
Prohlížeč zobrazí odpověď
trace route demo-vm YOUR-CLIENT-IP VM-DATE-TIME
s vaší IP adresou.
Zobrazení protokolu pro NGINX
Virtuální počítač shromažďuje protokoly pro NGINX, které jsou k dispozici pro zobrazení.
Služba | Umístění protokolu |
---|---|
NGINX | /var/log/nginx/access.log |
- V terminálu SSH zobrazte protokol virtuálního počítače pro proxy službu NGINX pomocí následujícího příkazu pro zobrazení protokolu:
cat /var/log/nginx/access.log
- Protokol zahrnuje volání z místního počítače.
"GET /trace HTTP/1.1" 200 10 "-"
Zobrazení protokolu pm2
Virtuální počítač shromažďuje protokoly pm2, které jsou k dispozici k zobrazení.
Služba | Umístění protokolu |
---|---|
PM2 | /var/log/pm2.log |
Zobrazte protokol virtuálního počítače pro službu PM2, což je vaše webová aplikace Express.js Node. Ve stejném prostředí Bash zobrazte protokol pomocí následujícího příkazu:
cat /var/log/pm2.log
Protokol zahrnuje volání z místního počítače.
grep "Hello world app listening on port 3000!" /var/log/pm2.log
Protokol obsahuje také proměnné prostředí, včetně klíče ApplicationInsights, předané ve spouštěcím skriptu npm. Pomocí následujícího příkazu grep ověřte, že váš klíč je v proměnných prostředí.
grep APPINSIGHTS_INSTRUMENTATIONKEY /var/log/pm2.log
Zobrazí se protokol PM2 se
APPINSIGHTS_INSTRUMENTATIONKEY
zvýrazněnou jinou barvou.
Protokolování virtuálních počítačů a protokolování cloudu
V této aplikaci pomocí console.log
zápisu zpráv do protokolů PM2 nalezených pouze na virtuálním počítači. Pokud odstraníte protokoly nebo virtuální počítač, ztratíte tyto informace.
Pokud chcete protokoly uchovávat i po dobu životnosti virtuálního počítače, použijte Application Insights.
5. Vyčištění prostředků
Po dokončení tohoto kurzu je potřeba odebrat skupinu prostředků, která obsahuje všechny její prostředky, abyste měli jistotu, že se vám neúčtuje žádné další využití.
Ve stejném terminálu pomocí příkazu Azure CLI az group delete odstraňte skupinu prostředků:
az group delete --name rg-demo-vm-eastus -y
Tento příkaz trvá několik minut.
Řešení problému
Pokud máte problémy, použijte následující tabulku, abyste pochopili, jak problém vyřešit:
Problém | Rozlišení |
---|---|
Chyba brány 502 | To může znamenat, že u souboru index.js nebo package.js došlo k chybě. Další informace najdete v /var/log/pm2.log protokolech PM2. Poslední chyba je v dolní části souboru. Pokud jste si jisti, že jsou tyto soubory správné, zastavte a spusťte PM2 pomocí skriptů npm v package.json souboru . |