Cvičení – nastavení webové aplikace Next.js management
Toto cvičení vás provede procesem vytvoření a konfigurace webové služby založené na next.js, která spoléhá na Prisma a poskytuje přístup ke službě Azure Database for PostgreSQL.
Poznámka:
Prisma je nedávno vyvinutá knihovna mapovačů relačních objektů, která poskytuje alternativní přístup k modelování dat z modelu, který nabízí Sequelize.
V tomto cvičení:
- Nakonfigurujte aplikaci Next.js.
- Nasaďte webovou aplikaci Aplikace Azure Service hostující aplikaci Next.js.
- Ověřte funkčnost aplikace Next.js.
Požadavky
K provedení tohoto cvičení potřebujete:
- Předplatné Azure.
- Účet Microsoft nebo účet Microsoft Entra s rolí Globální Správa istrator v tenantovi Microsoft Entra přidruženém k předplatnému Azure a s rolí Vlastník nebo Přispěvatel v předplatném Azure.
- Abyste dokončili první cvičení tohoto modulu. Použijete databázi Azure PostgreSQL, kterou jste vytvořili a nakonfigurovali v daném cvičení.
Konfigurace aplikace Next.js
V této úloze naklonujete úložiště GitHub obsahující ukázkový kód Next.js a přizpůsobíte ho pro připojení k existující databázi Azure PostgreSQL.
V případě potřeby spusťte webový prohlížeč, přejděte na web Azure Portal a přihlaste se, abyste získali přístup k předplatnému Azure, které používáte v tomto modulu.
Na webu Azure Portal spusťte relaci Bash v Cloud Shellu tak, že na panelu nástrojů vedle vyhledávacího textového pole vyberete její ikonu.
Z relace Bash v podokně Cloud Shell spusťte následující příkaz, kterým naklonujete úložiště GitHub obsahující ukázkový kód aplikace Next.js, který použijete v tomto cvičení:
cd ~/ git clone https://github.com/MicrosoftDocs/mslearn-cloud-native-apps.git
Spuštěním následujícího příkazu přepněte do adresáře obsahujícího klon úložiště GitHub:
cd ~/mslearn-cloud-native-apps/m03u07/
Spuštěním následujícího příkazu zobrazte obsah souboru ./prisma/schema.prisma obsahující definici datového modelu odpovídající tabulce inventáře v databázi cnainventory :
cat ./prisma/schema.prisma
Soubor schema.prisma má následující obsah:
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model inventory { id Int @id name String quantity Int date DateTime }
Spuštěním následujícího příkazu zobrazte obsah souboru .env, který ukládá připojovací řetězec do databáze Azure PostgreSQL, včetně hodnot představujících název serveru PostgreSQL, názvu účtu správce a jeho hesla (to je
DATABASE_URL
odkazovaný v souboru ./prisma/schema.prisma):cat ./.env
Soubor obsahuje připojovací řetězec položku v následujícím obsahu:
DATABASE_URL="postgresql://USER_NAME%40SERVER_NAME:PASSWORD@SERVER_NAME.postgres.database.azure.com:5432/cnainventory"
Spuštěním následujícího příkazu zobrazte obsah souboru index.tsx obsahujícího skript Next.js, který se dotazuje na obsah tabulky inventáře v databázi cnainventory na základě informací odvozených z Prismy:
cat ./pages/index.tsx
Poznámka:
Soubor index.tsx obsahuje následující obsah:
declare global { namespace NodeJS { interface Global { prisma: any; } } } import prisma from '../lib/prisma'; import Head from "next/head"; export const getServerSideProps = async ({ req }) => { const inventory = await prisma.inventory.findMany({ }) return { props: {inventory} } } export default ({ inventory }) => <div> <Head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta charSet="utf-8" /> <title>Next.js with Azure PostgreSQL inventory data</title> <meta name="title" content="Next.js with Azure PostgreSQL inventory data" /> <meta name="description" content="Next.js with Azure PostgreSQL inventory data" /> <meta property="og:type" content="website" /> <meta property="og:title" content="Next.js with Azure PostgreSQL inventory data" /> <meta property="og:description" content="Next.js with Azure PostgreSQL inventory data" /> </Head> <div className="w-full text-center bg-blue-800 flex flex-wrap items-center"> <div className="text-3xl w-1/2 text-white mx-2 md:mx-auto py-10"> Next.js - PostgreSQL inventory data </div> </div> <div className="bg-gray-200 py-10"> {inventory.map(({id, name, quantity, date}) => ( <div className="flex bg-white shadow-lg rounded-lg mx-2 md:mx-auto mb-10 max-w-2xl" key={id} > <div className="flex items-start px-4 py-6"> <div className=""> <div className="inline items-center justify-between"> <h2 className="text-lg font-bold text-gray-900 -mt-1"> {id} </h2> <small className="text-sm text-gray-700 object-right"> Id: {id} </small> <small className="ml-3 text-gray-700 text-sm"> Name: {name} </small> <small className="ml-3 text-gray-700 text-sm"> Quantity: {quantity} </small> <small className="ml-3 text-gray-700 text-sm"> Date: {date.toString().substring(0,10)} </small> </div> </div> </div> </div> ))} </div> </div
Poznámka:
Skript spoléhá na prisma dotazování na obsah databáze a používá React k zobrazení jednotlivých záznamů z tabulky inventáře, včetně příslušných dat.
Spuštěním následujících příkazů načtěte hodnoty koncového bodu rozhraní SQL API služby Cosmos DB a odpovídající přístupový klíč a uložte je do dočasných proměnných:
RG1NAME=postgresql-db-RG SERVER_NAME=$(az postgres server list --resource-group $RG1NAME --query "[0].name" --output tsv) USER_NAME='Student' PASSWORD='Pa55w0rd1234'
Spuštěním následujících příkazů nahraďte zástupné symboly v souboru .env hodnotami, které jste nastavili v předchozím kroku:
sed -i "s/SERVER_NAME/$SERVER_NAME/g" ./.env sed -i "s/USER_NAME/$USER_NAME/" ./.env sed -i "s/PASSWORD/$PASSWORD/" ./.env
Spuštěním následujícího příkazu ověřte, že soubor .env obsahuje skutečné hodnoty serveru Azure PostgreSQL a jeho přihlašovacích údajů pro správu:
cat ./.env
Poznámka:
V tuto chvíli byste obvykle spustili
npm run install
anpm run-script build
. Kvůli problémům s verzí to není přímo dostupné v Azure Cloud Shellu. Opravíte to spuštěním sestavení po nasazení.
Nasazení webové aplikace Aplikace Azure Service hostující aplikaci Next.js
Stejně jako v předchozím cvičení můžete v tuto chvíli kontejnerizovat nově přizpůsobenou aplikaci Next.js. Kvůli jednoduchosti ho ale nasadíte do služby Aplikace Azure Service. Tím získáte rychlý způsob, jak ověřit jeho funkčnost a zajistit, aby kontejnerizace byla proveditelnou možností.
Poznámka:
Stejnou aplikaci můžete nasadit do jakékoli jiné služby Azure, která poskytuje prostředí runtime Node.js, včetně virtuálních počítačů Azure, Azure Container Instances nebo Azure Kubernetes Service.
V okně webového prohlížeče zobrazujícího Azure Portal spusťte z relace Bash v podokně Cloud Shell následující příkazy a vytvořte skupinu prostředků, která bude hostovat webovou aplikaci Azure, do které nasadíte aplikaci Next.js:
RG1NAME=postgresql-db-RG LOCATION=$(az group show --resource-group $RG1NAME --query location --output tsv) RG2NAME=cna-nextjs-RG az group create --name $RG2NAME --location $LOCATION
Spuštěním následujících příkazů vytvořte plán služby Aplikace Azure, který bude hostovat novou webovou aplikaci Azure:
SPNAME=nextjs-sp az appservice plan create --name $SPNAME --resource-group $RG2NAME --sku B1
Spuštěním následujících příkazů vytvořte webovou aplikaci Azure založenou na Node.js:
WEBAPPNAME=nextjs$RANDOM$RANDOM az webapp create --name $WEBAPPNAME --resource-group $RG2NAME --plan $SPNAME --runtime "NODE|12-lts"
Spuštěním následujících příkazů znovu inicializujete místní úložiště Git a potvrdíte všechny změny v hlavní větvi:
cd ~/wp2104-m03u07/ git init git add -A git commit -m "Initial Commit"
Spuštěním následujících příkazů nastavte přihlašovací údaje nasazení na úrovni uživatele:
DEPLOYMENTUSER=m03u07User$RANDOM DEPLOYMENTPASS=m03u07Pass$RANDOM$RANDOM az webapp deployment user set --user-name $DEPLOYMENTUSER --password $DEPLOYMENTPASS
Spuštěním následujících příkazů identifikujte přihlašovací údaje nasazení na úrovni uživatele. Nezapomeňte zaznamenat jejich hodnoty, protože je budete potřebovat později v tomto cvičení:
echo $DEPLOYMENTUSER echo $DEPLOYMENTPASS
Spuštěním následujícího příkazu identifikujte adresu URL nasazení webové aplikace Azure, kterou použijete jako cíl
git push
příkazu:DEPLOYMENTURL=$(az webapp deployment source config-local-git --name $WEBAPPNAME --resource-group $RG2NAME --output tsv)
Spuštěním následujícího příkazu nakonfigurujte vzdálené úložiště s názvem Azure, které představuje adresu URL nasazení, kterou jste identifikovali v předchozím kroku:
git remote add azure $DEPLOYMENTURL
Spuštěním následujících příkazů odešlete obsah hlavní větve do webové aplikace Azure, když se zobrazí výzva k zadání hesla, které je součástí přihlašovacích údajů pro nasazení na úrovni uživatele, které jste si poznamenali dříve v této úloze:
git push --set-upstream azure master
Poznámka:
Počkejte, až se nasazení dokončí. Mělo by to trvat asi deset minut. Po dokončení nasazení by se měla zobrazit zpráva s informací, že nasazení bylo úspěšné.
Zavřete podokno Cloud Shellu.
Ověření funkčnosti aplikace Next.js
V této úloze ověříte funkčnost aplikace Next.js nasazené do webové aplikace Azure.
V okně webového prohlížeče zobrazujícího Azure Portal použijte textové pole Hledat prostředky, služby a dokumenty v horní části stránky webu Azure Portal a vyhledejte App Services.
V okně App Services v seznamu instancí služby App Service vyberte položku představující webovou aplikaci Azure, kterou jste nasadili v předchozím úkolu tohoto cvičení.
Poznámka:
Název webové aplikace bude mít předponu nextjs . Můžete ho také identifikovat kontrolou výstupu nasazení, které jste dokončili v předchozím úkolu.
V okně zobrazující vlastnosti webové aplikace v vertikální nabídce v části Vývojové nástroje vyberte položku Editor služby App Service (Preview) a pak v Editoru služby App Service (Preview) vyberte Přejít.
V rozhraní Editoru služby App Service v vertikální nabídce vyberte ikonu Otevřít konzolu, která je přímo za ikonou Start.
Z příkazového řádku konzoly spusťte následující příkaz, který sestaví aplikaci Next.js, kterou jste odeslali do webové aplikace Azure:
npm run-script build
Počkejte na dokončení procesu sestavení.
Zavřete kartu webového prohlížeče zobrazující stránku Editor služby App Service.
V okně webu Azure Portal zobrazující vlastnosti webové aplikace vyberte ve svislé nabídce položku s popiskem Přehled. V podokně Základy vyberte odkaz označenou adresu URL. Tím se automaticky otevře další karta webového prohlížeče zobrazující nově nasazenou webovou aplikaci Azure.
Ověřte, že se na stránce webového prohlížeče zobrazí stránka s daty inventáře Next.js – PostgreSQL s položkami inventáře načtenými z databáze Azure PostgreSQL.
Výsledky
Blahopřejeme! Dokončili jste třetí a poslední cvičení tohoto modulu. V tomto cvičení jste vytvořili a nakonfigurovali aplikaci založenou na next.js, která spoléhá na Prisma a poskytuje přístup ke službě Azure Database for PostgreSQL.
Vyčištění prostředků
Abyste se vyhnuli zbytečným poplatkům za používání prostředků Azure, měli byste odstranit skupiny prostředků postgresql-db-RG, can-express-RG a can-nextjs-RG , které jste vytvořili v průběhu cvičení tohoto modulu. Uděláte to tak, že na webu Azure Portal přejdete do okna každé z těchto skupin prostředků a na panelu nástrojů vyberete položku Odstranit skupinu prostředků. Do textového pole ZADEJTE NÁZEV SKUPINY PROSTŘEDKŮ zadejte název skupiny prostředků a pak vyberte Odstranit.