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.
V tomto kurzu se dozvíte, jak ve službě Azure App Service vytvořit zabezpečenou aplikaci PHP, která se připojí k databázi MySQL (pomocí flexibilního serveru Azure Database for MySQL). Nasadíte také Azure Cache for Redis, abyste ve své aplikaci povolili kód ukládání do mezipaměti. Azure App Service je vysoce škálovatelná, samoopravující se webhostingová služba, která umožňuje snadné nasazení aplikací na Windows nebo Linux. Až budete hotovi, budete mít aplikaci Laravel spuštěnou ve službě Aplikace Azure Service v Linuxu.
Požadavky
- Účet Azure s aktivním předplatným. Pokud účet Azure nemáte, můžete si ho zdarma vytvořit.
- Účet GitHubu. můžete si ho zdarma získat.
- Znalost PHP s využitím Laravelu
- (Volitelné) Pokud chcete vyzkoušet GitHub Copilot, účet GitHub Copilot. K dispozici je 30denní bezplatná zkušební verze.
Spusťte ukázku
Nejprve nastavíte ukázkovou aplikaci řízenou daty jako výchozí bod. Ukázkové úložiště zahrnuje konfiguraci vývojového kontejneru. Vývojový kontejner má vše, co potřebujete k vývoji aplikace, včetně databáze, mezipaměti a všech proměnných prostředí potřebných ukázkovou aplikací. Vývojový kontejner se může spouštět v kódu GitHubu, což znamená, že ukázku můžete spustit na libovolném počítači s webovým prohlížečem.
Krok 1: V novém okně prohlížeče:
- Přihlaste se k účtu GitHub.
- Přejděte na https://github.com/Azure-Samples/laravel-tasks/fork.
- Vyberte Vytvořit fork.
Krok 2: Ve forku na GitHubu:
- Vyberte Code>Vytvořit kódovací prostor na hlavní.
Nastavení codespace trvá několik minut. Zadaný soubor .env již obsahuje fiktivní
APP_KEY
proměnnou, kterou Laravel potřebuje spustit místně.
Krok 3: V terminálu codespace:
- Spusťte
composer install
. - Spusťte migrace databází pomocí
php artisan migrate
příkazu . - Spusťte aplikaci pomocí
php artisan serve
příkazu . - Až se zobrazí oznámení
Your application running on port 80 is available.
, vyberte Otevřít v prohlížeči. Ukázkovou aplikaci byste měli vidět na nové kartě prohlížeče. Chcete-li aplikaci zastavit, zadejteCtrl
+C
.
Máte problémy? Projděte si část Řešení potíží.
2. Vytvoření služby App Service, databáze a mezipaměti
V tomto kroku vytvoříte prostředky Azure. Kroky použité v tomto kurzu vytvoří sadu prostředků zabezpečených ve výchozím nastavení, mezi které patří App Service, Azure Database for MySQL a Azure Cache for Redis. Pro proces vytváření zadáte:
- Název webové aplikace. Používá se jako součást názvu DNS pro vaši aplikaci.
- Oblast, ve které má být aplikace fyzicky umístěna ve světě. Používá se také jako součást názvu DNS pro vaši aplikaci.
- Zásobník modulu runtime pro aplikaci. Tady vyberete verzi PHP, kterou chcete použít pro vaši aplikaci.
- Plán hostování aplikace. Je to cenová úroveň, která zahrnuje sadu funkcí a kapacitu škálování vaší aplikace.
- Skupina prostředků pro aplikaci. Skupina prostředků umožňuje seskupovat (v logickém kontejneru) všechny prostředky Azure potřebné pro aplikaci.
Přihlaste se k webu Azure Portal a podle těchto kroků vytvořte prostředky služby Azure App Service.
Krok 1: Na webu Azure Portal:
- Na horním panelu hledání zadejte app service.
- Vyberte položku s popiskem App Service pod nadpisem Služby .
- Vyberte Vytvořit>webovou aplikaci. Můžete také přejít přímo do průvodce pro vytvoření.
Krok 2: Na stránce Vytvořit webovou aplikaci vyplňte formulář následujícím způsobem.
- Název: msdocs-laravel-mysql-XYZ. Pro vás se vygeneruje skupina prostředků s názvem msdocs-laravel-mysql-XYZ_group .
- Zásobník modulu runtime: PHP 8.4.
- Operační systém: Linux.
- Oblast: Libovolná oblast Azure, která je blízko vás.
- Plán Pro Linux: Vytvořte nový a použijte název msdocs-laravel-mysql-XYZ.
- Cenový plán: Basic. Až budete připraveni, můžete vertikálně navýšit kapacitu na jinou cenovou úroveň.
Krok 3:
- Vyberte kartu Databáze .
- Vyberte Vytvořit databázi.
- V Engin vyberte MySQL - Flexibilní server.
- Vyberte Vytvořit Azure Cache pro Redis.
- Do pole Název (v části Mezipaměť) zadejte název mezipaměti.
- V SKU vyberte Basic.
Krok 4:
- Vyberte kartu Nasazení .
- Povolte průběžné nasazování.
- V organizaci vyberte alias GitHubu.
- V úložišti vyberte laravel-tasks.
- Ve větvi vyberte hlavní.
- Ujistěte se, že je zakázáno základní ověřování.
- Vyberte Zkontrolovat a vytvořit.
- Po dokončení ověření vyberte Vytvořit.
Krok 5: Dokončení nasazení trvá několik minut. Po dokončení nasazení vyberte tlačítko Přejít k prostředku. Přejdete přímo do aplikace App Service, ale vytvoří se následující prostředky:
- Skupina prostředků: Kontejner pro všechny vytvořené prostředky.
- Plán služby App Service: Definuje výpočetní prostředky pro Službu App Service. Vytvoří se plán Linuxu na úrovni Basic .
- App Service: Představuje vaši aplikaci a spouští se v plánu služby App Service.
- Virtuální síť: Integrovaná s aplikací App Service a izoluje provoz back-endové sítě.
- Privátní koncové body: Přístup ke koncovým bodům pro databázový server a Redis cache ve virtuální síti.
- Síťová rozhraní: Představuje privátní IP adresy, jednu pro každý privátní koncový bod.
- Flexibilní server Azure Database for MySQL: Přístupný pouze ze svého privátního koncového bodu. Databáze a uživatel se pro vás vytvoří na serveru.
- Azure Cache for Redis: Přístupné jen za soukromým koncovým bodem.
- Privátní zóny DNS: Povolte rozlišení DNS databázového serveru a mezipaměti Redis ve virtuální síti.
3. Zabezpečení tajných kódů připojení
Průvodce vytvořením vám již vygeneroval proměnné pro připojení jako nastavení aplikace. Osvědčeným postupem zabezpečení je ale úplné zachování tajných kódů mimo službu App Service. Tajné kódy přesunete do trezoru klíčů a změníte nastavení aplikace na odkazy služby Key Vault pomocí konektorů služeb.
Krok 1: Načtení existujícího připojovacího řetězce
- V nabídce vlevo na stránce služby App Service vyberte Nastavení > Proměnné prostředí.
- Vyberte Připojovací řetězce.
- Vyberte AZURE_MYSQL_CONNECTIONSTRING.
- V nastavení Přidat/upravit aplikaci zkopírujte v poli Hodnota uživatelské jméno a heslo pro pozdější použití. Připojovací řetězec umožňuje připojit se k databázi MySQL zabezpečenou za privátními koncovými body. Tajné kódy se ale ukládají přímo v aplikaci App Service, což není nejlepší. Změníte to.
Krok 2: Vytvoření trezoru klíčů pro zabezpečenou správu tajných kódů
- Na horním panelu hledání zadejte "key vault" a pak vyberte Marketplace>Key Vault.
- Ve skupině prostředků vyberte msdocs-laravel-mysql-XYZ_group.
- Do názvu trezoru klíčů zadejte název, který se skládá jenom z písmen a číslic.
- V oblasti ji nastavte na stejné umístění jako skupina prostředků.
Krok 3: Zabezpečení trezoru klíčů pomocí privátního koncového bodu
- Vyberte kartu Sítě .
- Zrušte výběr možnosti Povolit veřejný přístup.
- Vyberte Vytvořit privátní koncový bod.
- Ve skupině prostředků vyberte msdocs-laravel-mysql-XYZ_group.
- V dialogovém okně v umístění vyberte stejné umístění jako vaše aplikace App Service.
- Do pole Název zadejte msdocs-laravel-mysql-XYZVaultEndpoint.
- Ve virtuální síti vyberte virtuální síť ve skupině msdocs-laravel-mysql-XYZ_group .
- V podsíti vyberte dostupnou kompatibilní podsíť. Průvodce webovou aplikací ho vytvořil pro vaše pohodlí.
- Vyberte OK.
- Vyberte Zkontrolovat a vytvořit a pak vyberte Vytvořit. Počkejte na dokončení nasazení trezoru klíčů. Měla by se zobrazit informace o tom, že vaše nasazení je dokončené.
Krok 4: Vytvoření konektoru MySQL
- Na horním panelu hledání zadejte msdocs-laravel-mysql a pak vyberte prostředek služby App Service s názvem msdocs-laravel-mysql-XYZ.
- Na stránce služby App Service v nabídce vlevo vyberte
Nastavení služby Konektor . - Vyberte Vytvořit.
- Jako typ služby vyberte databázi pro flexibilní server MySQL.
- Pro flexibilní server MySQL vyberte váš server (například msdocs-laravel-mysql-235-server).
- V případě databáze MySQL vyberte databázi (například msdocs-laravel-mysql-235-database).
Krok 5: Konfigurace ověřování pro konektor MySQL
- Vyberte kartu Ověřování .
- Vyberte Připojovací řetězec.
- Do pole Heslo vložte dříve zkopírované heslo.
- Vyberte Uložit tajný klíč ve službě Key Vault.
- V části Připojení ke službě Key Vault vyberte Vytvořit nový. V horní části dialogového okna pro úpravy se otevře dialogové okno Vytvořit připojení .
Krok 6: Vytvoření připojení ke službě Key Vault
- V dialogovém okně Vytvořit připojení pro připojení ke službě Key Vault vyberte ve službě Key Vault trezor klíčů, který jste vytvořili dříve.
- Vyberte Zkontrolovat a vytvořit.
- Po dokončení ověření vyberte Vytvořit.
Krok 6: Dokončení nastavení konektoru MySQL
- Jste zpátky v dialogovém okně konektoru MySQL. Na kartě Ověřování počkejte na vytvoření konektoru pro klíčový trezor. Po dokončení rozevírací seznam Připojení ke službě Key Vault automaticky vybere tuto možnost.
- Vyberte Zkontrolovat a vytvořit.
- Vyberte Vytvořit. Počkejte, až se zobrazí oznámení o úspěšném dokončení aktualizace .
Krok 7: Konfigurace konektoru Redis tak, aby používal tajné kódy služby Key Vault
- Na stránce Konektory služeb zaškrtněte políčko vedle konektoru Cache for Redis a pak vyberte Upravit.
- Vyberte kartu Ověřování .
- Vyberte Uložit tajný klíč ve službě Key Vault.
- V části Připojení ke službě Key Vault vyberte trezor klíčů, který jste vytvořili.
- Vyberte Další: Sítě.
- Výběrem možnosti Konfigurovat pravidla brány firewall povolte přístup k cílové službě. Průvodce vytvořením aplikace již zabezpečil databázi SQL privátním koncovým bodem.
- Vyberte Uložit. Počkejte, až se zobrazí oznámení o úspěšném dokončení aktualizace .
Krok 8: Ověření integrace služby Key Vault
- Z nabídky vlevo znovu vyberte Nastavení> Proměnné prostředí.
- Vedle AZURE_MYSQL_PASSWORD vyberte Zobrazit hodnotu. Hodnota by měla být
@Microsoft.KeyVault(...)
, což znamená, že se jedná o odkaz na trezor klíčů , protože tajný klíč je teď spravovaný v trezoru klíčů. - Pokud chcete ověřit připojovací řetězec Redis, vyberte Zobrazit hodnotu vedle AZURE_REDIS_CONNECTIONSTRING.
Shrnutí: Proces zabezpečení tajných kódů připojení:
- Načítání tajných kódů připojení z proměnných prostředí aplikace App Service
- Vytvoření trezoru klíčů
- Vytvoření připojení ke službě Key Vault se spravovanou identitou přiřazenou systémem
- Aktualizace konektorů služby tak, aby ukládaly tajné kódy do trezoru klíčů.
Máte problémy? Projděte si část Řešení potíží.
4. Konfigurace proměnných Laravel
Krok 1: Vytvořte CACHE_DRIVER
jako nastavení aplikace.
- Na kartě Nastavení aplikace vyberte Přidat.
- Do pole Název zadejte CACHE_DRIVER.
- Do pole Hodnota zadejte redis.
- Vyberte Použít a pak znovu Použít a pak Potvrďte.
Krok 2: Pomocí stejných kroků v kroku 1 vytvořte následující nastavení aplikace:
- MYSQL_ATTR_SSL_CA: Jako hodnotu použijte /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem . Toto nastavení aplikace odkazuje na cestu certifikátu TLS/SSL, který potřebujete pro přístup k serveru MySQL. Je součástí ukázkového úložiště, které vám usnadní práci.
- LOG_CHANNEL: Jako hodnotu použijte stderr . Toto nastavení říká Laravelu, aby směroval protokoly do stderr, což je zpřístupňuje protokolům služby App Service.
- APP_DEBUG: Jako hodnotu použijte true . Jedná se o proměnnou pro ladění v Laravelu, která umožňuje stránky v režimu ladění.
- APP_KEY: Jako hodnotu použijte base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= . Jedná se o šifrovací proměnnou Laravel.
Důležité
Tato APP_KEY
hodnota se zde používá pro usnadnění. V produkčních scénářích by se měla generovat speciálně pro vaše nasazení pomocí php artisan key:generate --show
příkazového řádku.
APP_KEY
V ideálním případě by se nastavení aplikace mělo nakonfigurovat jako odkaz na trezor klíčů, což je proces s více kroky. Další informace najdete v tématu Jak změním nastavení aplikace APP_KEY na referenční informace ke službě Key Vault?
5. Nasazení ukázkového kódu
V tomto kroku nakonfigurujete nasazení GitHubu pomocí GitHub Actions. Je to jen jeden z mnoha způsobů nasazení do služby App Service, ale také skvělý způsob, jak mít kontinuální integraci v procesu nasazení. Ve výchozím nastavení každá git push
ve vašem GitHub úložišti spustí akci sestavení a nasazení.
Krok 1: Vraťte se do prostoru kódu GitHubu ukázkového forku a spusťte git pull origin main
.
Tím se do vašeho prostoru kódu načte nově potvrzený soubor pracovního postupu.
Krok 2 (možnost 1: s GitHub Copilotem):
- Začněte novou chatovací relaci výběrem zobrazení chatu a poté tlačítka +.
- Zeptejte se na @workspace Jak se aplikace připojuje k databázi a redis? Copilot vám může vysvětlit, jak se nastavení konfiguruje v konfiguraci nebo database.php.
- Zeptejte se: "@workspace V produkčním režimu je moje aplikace spuštěná ve webové aplikaci App Service, která používá konektor služby Azure k připojení k flexibilnímu serveru MySQL. Jaké jsou názvy proměnných prostředí, které potřebuji použít? Copilot vám může poskytnout návrh kódu podobný návrhu v možnosti 2: bez níže uvedených kroků GitHub Copilotu a dokonce vám řekne, abyste udělali změnu v souboru config/database.php .
- Otevřete config/database.php v průzkumníku a přidejte kód.
- Zeptejte se, "@workspace Moje aplikace App Service také používá konektor služby Azure Service pro připojení ke službě Cache for Redis pomocí typu klienta Django. Jaké jsou názvy proměnných prostředí, které potřebuji použít?*" Copilot vám může dát návrh kódu podobný návrhu v možnosti 2: bez níže uvedených kroků GitHub Copilot a dokonce vám řekne, abyste udělali změnu v souboru konfigurace nebo database.php . Pokud se zobrazí výzva, přihlaste se k GitHub Copilotu pro Azure a získejte přesnější odpovědi.
- Přidejte návrh kódu. GitHub Copilot vám pokaždé nedává stejnou odpověď a není vždy správná. Možná budete muset položit další otázky, abyste vyladili jeho odpověď. Tipy najdete v tématu Co můžu dělat s GitHub Copilotem v kódu?.
Krok 2 (možnost 2: bez GitHub Copilotu):
- V Průzkumníku otevřete config/database.php. Najděte
mysql
oddíl a proveďte následující změny: - Nahraďte
DB_HOST
(řádek 49) zaAZURE_MYSQL_HOST
. - Nahraďte
DB_DATABASE
(řádek 51) zaAZURE_MYSQL_DBNAME
. - Nahraďte
DB_USERNAME
(řádek 52) zaAZURE_MYSQL_USERNAME
. - Nahraďte
DB_PASSWORD
(řádek 53) zaAZURE_MYSQL_PASSWORD
. - Nahraďte
DB_PORT
(řádek 50) zaAZURE_MYSQL_PORT
. - Přejděte do části Redis
cache
a proveďte následující změny: - Nahraďte
REDIS_HOST
(řádek 142) zaAZURE_REDIS_HOST
. - Nahraďte
REDIS_PASSWORD
(řádek 144) zaAZURE_REDIS_PASSWORD
. - Nahraďte
REDIS_PORT
(řádek 145) zaAZURE_REDIS_PORT
. - Nahraďte
REDIS_CACHE_DB
(řádek 146) textemAZURE_REDIS_DATABASE
. - Ve stejné části přidejte řádek s
'scheme' => 'tls',
. Tato konfigurace říká Laravelu, aby používal šifrování pro připojení k Redisu.
Krok 3:
- Vyberte rozšíření Source Control.
- Do textového pole zadejte zprávu potvrzení, například
Configure Azure database and cache connections
. Nebo vybertea nechte GitHub Copilot vygenerovat potvrzovací zprávu za vás.
- Vyberte Potvrdit a potvrďte akci ano.
- Vyberte Synchronizovat změny 1 a potvrďte OK.
Krok 4: Zpět na stránce Deployment Center na webu Azure Portal:
- Vyberte záložku Protokoly a poté zvolte Aktualizovat pro zobrazení nového spuštění nasazení.
- V záznamu protokolu nasazení vyberte položku Sestavit/Nasadit záznamy s nejnovějším časovým razítkem.
Krok 5: Přejdete do svého úložiště GitHub a zjistíte, že je spuštěná akce GitHubu. Soubor pracovního postupu definuje dvě samostatné fáze, sestavení a nasazení. Počkejte na spuštění GitHubu a zobrazte stav Úspěch. Trvá to asi 10 minut.
Máte problémy? Projděte si část Řešení potíží.
6. Generování schématu databáze
Průvodce vytvořením umístí databázový server MySQL za privátní koncový bod, takže je přístupný jenom z virtuální sítě. Vzhledem k tomu, že aplikace App Service je už integrovaná s virtuální sítí, nejjednodušší způsob, jak spouštět migrace databází s vaší databází, je přímo z kontejneru služby App Service.
Krok 1: Zpět na stránce služby App Service v nabídce vlevo
- Vyberte Vývojové nástroje>SSH.
- Vyberte Přejít.
Krok 2: V terminálu SSH:
- Spusťte
cd /home/site/wwwroot
. Tady jsou všechny vaše nasazené soubory. - Spusťte
php artisan migrate --force
. Pokud proběhne úspěšně, služba App Service se úspěšně připojuje k databázi MySQL.
Návod
V relaci SSH se změny souborů v /home
můžou zachovat i po restartování aplikace. Změny mimo /home
se neuchovávají.
7. Změna kořenového adresáře webu
Životní cyklus aplikace Laravel začíná v adresáři /public . Výchozí kontejner PHP pro App Service používá Nginx, který se spouští v kořenovém adresáři aplikace. Pokud chcete změnit kořen webu, musíte změnit konfigurační soubor Nginx v kontejneru PHP (/etc/nginx/sites-available/default). Pro usnadnění vašeho pohodlí obsahuje ukázkové úložiště vlastní konfigurační soubor s názvem výchozí. Jak už jsme uvedli dříve, nechcete tento soubor nahradit pomocí prostředí SSH, protože změna je mimo /home
a po restartování aplikace se ztratí.
Krok 1:
- V nabídce vlevo vyberte Konfigurace.
- Vyberte kartu Obecné nastavení .
Krok 2: Na kartě Obecné nastavení:
- Do pole Spouštěcí příkaz zadejte následující příkaz: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
- Vyberte Uložit a pak vyberte Pokračovat. Příkaz nahradí konfigurační soubor Nginx v kontejneru PHP a restartuje Nginx. Tato konfigurace zajistí, že při každém spuštění se v kontejneru provede stejná změna.
8 . Přejděte do aplikace
Krok 1: Na stránce služby App Service:
- V nabídce vlevo vyberte Přehled.
- Vyberte výchozí doménu vaší aplikace.
Krok 2: Přidejte do seznamu několik úkolů. Blahopřejeme, ve službě Aplikace Azure Service spouštíte zabezpečenou aplikaci PHP řízenou daty.
Návod
Ukázková aplikace implementuje model cache-aside. Při opětovném načtení stránky po provedení změn dat se doba odezvy na webové stránce zobrazí mnohem rychleji, protože načítá data z mezipaměti místo databáze.
9. Streamování diagnostických protokolů
Aplikace Azure Služba zaznamenává všechny zprávy protokolované do konzoly, aby vám pomohla při diagnostice problémů s vaší aplikací. Ukázková aplikace vypíše zprávy protokolu konzoly ve všech jejích koncových bodech, aby tuto funkci ukázala. Ve výchozím nastavení funkce protokolování Laravelu (například Log::info()
) zapisuje do místního souboru. Nastavení vaší LOG_CHANNEL
aplikace z dřívějších verzí zpřístupňuje položky protokolu ze streamu protokolu služby App Service.
Krok 1: Na stránce služby App Service:
- V nabídce vlevo vyberte protokoly služby App Service.
- V části Protokolování aplikace vyberte Systém souborů.
Krok 2: V nabídce vlevo vyberte Stream protokolu. Zobrazí se protokoly pro vaši aplikaci, včetně protokolů platformy a protokolů z kontejneru.
Vyčištění prostředků
Po dokončení můžete odstranit všechny prostředky z předplatného Azure odstraněním skupiny prostředků.
Krok 1: Na panelu hledání v horní části webu Azure Portal:
- Zadejte název skupiny prostředků.
- Vyberte tuto skupinu prostředků.
Krok 2: Na stránce skupiny prostředků vyberte Odstranit skupinu prostředků.
Krok 3:
- Zadejte název skupiny prostředků pro potvrzení odstranění.
- Vyberte Odstranit.
2. Vytvoření prostředků Azure a nasazení ukázkové aplikace
V tomto kroku vytvoříte prostředky Azure a nasadíte ukázkovou aplikaci do App Service v Linuxu. Kroky použité v tomto kurzu vytvoří sadu prostředků zabezpečení ve výchozím nastavení, které zahrnují App Service a Azure Database for MySQL.
Ve službě GitHub Codespace je již dostupné Azure Developer CLI (AZD).
Vygenerování šifrovacího klíče Laravel pomocí
php artisan key:generate --show
:php artisan key:generate --show
Přihlaste se k Azure spuštěním příkazu
azd auth login
a podle pokynů.azd auth login
Vytvořte potřebné prostředky Azure a pomocí příkazu nasaďte kód
azd up
aplikace. Podle pokynů vyberte požadované předplatné a umístění prostředků Azure.azd up
Po zobrazení výzvy zadejte následující odpovědi:
Otázka Odpověď Zadejte nový název prostředí. Zadejte jedinečný název. Šablona AZD používá tento název jako součást názvu DNS vaší webové aplikace v Azure ( <app-name>-<hash>.azurewebsites.net
). Jsou povoleny alfanumerické znaky a spojovníky.Vyberte předplatné Azure, které chcete použít. Vyberte své předplatné. Vyberte umístění Azure, které chcete použít. Vyberte umístění. Zadejte hodnotu parametru zabezpečené infrastruktury 'appKey'. Tady použijte výstup php artisan key:generate --show
. Šablona AZD pro ni vytvoří tajný klíč služby Key Vault, který můžete použít ve své aplikaci.Zadejte hodnotu parametru zabezpečené infrastruktury databasePassword. Heslo databáze pro MySQL Musí mít délku nejméně 8 znaků a obsahovat velká písmena, malá písmena, číslice a speciální znaky. Dokončení
azd up
příkazu trvá přibližně 15 minut (mezipaměť Redis trvá nejvíce času). Kód aplikace se také zkompiluje a nasadí, ale později kód upravíte tak, aby fungoval se službou App Service. Když je spuštěný, příkaz poskytuje zprávy o procesu zřizování a nasazení, včetně odkazu na nasazení v Azure. Po dokončení zobrazí příkaz také odkaz na aplikaci pro nasazení.Tato šablona AZD obsahuje soubory (azure.yaml a adresář infrastruktury ), které ve výchozím nastavení generují zabezpečenou architekturu s následujícími prostředky Azure:
- Skupina prostředků: Kontejner pro všechny vytvořené prostředky.
- Plán služby App Service: Definuje výpočetní prostředky pro Službu App Service. Vytvoří se plán Linuxu na úrovni B1 .
- App Service: Představuje vaši aplikaci a spouští se v plánu služby App Service.
- Virtuální síť: Integrovaná s aplikací App Service a izoluje provoz back-endové sítě.
- Flexibilní server Azure Database for MySQL: Přístupný pouze z virtuální sítě prostřednictvím integrace zóny DNS. Na serveru se pro vás vytvoří databáze.
- Azure Cache for Redis: Přístupná pouze z virtuální sítě.
- Privátní koncové body: Koncové body pro přístup k trezoru klíčů a Redis cache ve virtuální síti.
- Privátní zóny DNS: Umožněte rozlišení DNS pro Key Vault, databázový server a mezipaměť Redis ve virtuální síti.
- Pracovní prostor Služby Log Analytics: Slouží jako cílový kontejner vaší aplikace k odeslání protokolů, kde můžete také dotazovat protokoly.
- Trezor klíčů: Slouží k zachování hesla databáze stejně při opětovném nasazení pomocí AZD.
Máte problémy? Projděte si část Řešení potíží.
3. Použití připojovacích řetězců Azure v kódu aplikace
Šablona AZD, kterou používáte, vygenerovala proměnné připojení jako nastavení aplikace a vypíše je do terminálu pro vaši pohodlnost. Nastavení aplikace je jedním ze způsobů, jak udržovat tajné kódy připojení mimo úložiště kódu.
Ve výstupu AZD vyhledejte nastavení aplikace, která začínají
AZURE_MYSQL_
aAZURE_REDIS_
. Zobrazí se jenom názvy nastavení. Ve výstupu AZD vypadají takto:App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_DBNAME - AZURE_MYSQL_FLAG - AZURE_MYSQL_HOST - AZURE_MYSQL_PASSWORD - AZURE_MYSQL_PORT - AZURE_MYSQL_USERNAME - AZURE_REDIS_DATABASE - AZURE_REDIS_HOST - AZURE_REDIS_PASSWORD - AZURE_REDIS_PORT - AZURE_REDIS_SSL
Nastavení začínající
AZURE_MYSQL_
jsou proměnné připojení pro databázi MySQL a nastavení začínajícíAZURE_REDIS_
jsou pro mezipaměť Redis. Později je budete muset použít ve svém kódu. Šablona AZD vám pro usnadnění práci ukáže přímý odkaz na stránku nastavení aplikace na webu Azure Portal.V průzkumníku otevřete config/database.php. Toto je konfigurační soubor pro připojení k databázi a mezipaměti Redis.
Najděte část, která definuje spojení (řádky
mysql
46-64) a nahraďteDB_HOST
,DB_PORT
,DB_DATABASE
,DB_USERNAME
aDB_PASSWORD
nastavenímAZURE_MYSQL_
aplikace z výstupu AZD. Vašemysql
připojení by mělo vypadat jako následující kód.'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('AZURE_MYSQL_HOST', '127.0.0.1'), 'port' => env('AZURE_MYSQL_PORT', '3306'), 'database' => env('AZURE_MYSQL_DBNAME', 'forge'), 'username' => env('AZURE_MYSQL_USERNAME', 'forge'), 'password' => env('AZURE_MYSQL_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
Další informace o konfiguraci databáze v Laravel naleznete v dokumentaci k Laravel.
Najděte část, která definuje připojení mezipaměti Redis (řádky 140-147) a nahraďte
REDIS_HOST
,REDIS_PASSWORD
,REDIS_PORT
aREDIS_CACHE_DB
nastaveníAzure_REDIS_
aplikace z výstupu AZD. Také přidejte'scheme' => 'tls',
k připojení. Připojení k mezipaměti by mělo vypadat jako následující kód:'cache' => [ 'scheme' => 'tls', 'url' => env('REDIS_URL'), 'host' => env('AZURE_REDIS_HOST', '127.0.0.1'), 'username' => env('REDIS_USERNAME'), 'password' => env('AZURE_REDIS_PASSWORD'), 'port' => env('AZURE_REDIS_PORT', '6379'), 'database' => env('AZURE_REDIS_DATABASE', '1'), ],
Další informace o konfiguraci mezipaměti Redis v Laravel naleznete v dokumentaci k Laravel.
Poznámka:
Nezapomeňte, že vaše změny ještě nejsou nasazené. Nasadíte je na konci dalšího kroku.
4. Konfigurace nastavení Laravelu ve webové aplikaci
Z Průzkumníku otevřete infra/resources.bicep. Toto je soubor Bicep, který definuje vytvořené prostředky Azure.
Najděte část, která definuje nastavení aplikace (řádky 510–514) a zrušte jejich komentář. Tato nastavení aplikace jsou:
Nastavení Popis CACHE_DRIVER
Určuje Laravelu, aby jako mezipaměť používal Redis (podívejte se na dokumentaci k Laravelu). MYSQL_ATTR_SSL_CA
Je potřeba otevřít připojení TLS k MySQL v Azure. Soubor certifikátu je součástí ukázkového úložiště pro usnadnění. Tato proměnná je používána připojením k MySQL v config/database.php LOG_CHANNEL
cs-CZ: Řekne Laravelu, aby směroval protokoly do stderr
, čímž je zpřístupní v protokolech služby App Service (viz dokumentace k Laravelu).APP_DEBUG
Povolte stránky režimu ladění Laravelu (viz dokumentace k Laravelu). APP_KEY
Šifrovací proměnná Laravel Šablona AZD už vytvořila tajný klíč služby Key Vault (řádky 212–217), abyste k ní měli přístup pomocí odkazu na Key Vault. V infra/resources.bicep vyhledejte definici prostředku pro aplikaci App Service a odkomentujte řádek 315:
appCommandLine: 'cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload'
Životní cyklus aplikace Laravel začíná v adresáři /public namísto kořenového adresáře aplikace. Výchozí kontejner PHP pro App Service používá Nginx, který se spouští v kořenovém adresáři aplikace. Pokud chcete změnit kořen webu, musíte změnit konfigurační soubor Nginx v kontejneru PHP (/etc/nginx/sites-available/default). Pro usnadnění vašeho pohodlí obsahuje ukázkové úložiště náhradní konfigurační soubor s názvem výchozí, který informuje Nginx, aby hledal v adresáři /public . Tento vlastní příkaz v
appCommandLine
se spustí pokaždé, když se aplikace spustí, aby vždy zajistil náhradu souboru při každém načtení Linuxového kontejneru z čistého stavu.Zpátky v terminálu codespace spusťte
azd up
znovu.azd up
Návod
azd up
spouští azd package
, azd provision
a azd deploy
společně, a to dává smysl, protože provádíte změny infrastruktury i aplikace. Pokud chcete provést pouze změny infrastruktury, spusťte azd provision
příkaz . Pokud chcete pouze nasadit změny kódu aplikace, spusťte azd deploy
příkaz .
Máte problémy? Projděte si část Řešení potíží.
5. Generování schématu databáze
S databází MySQL chráněnou virtuální sítí je nejjednodušší způsob, jak spouštět migrace databází Laravel, v relaci SSH s kontejnerem Linuxu ve službě App Service.
Ve výstupu AZD vyhledejte adresu URL relace SSH a přejděte na ni v prohlížeči. Ve výstupu to vypadá takto:
Open SSH session to App Service container at: <URL>
V relaci SSH spusťte migrace databází z adresáře /home/site/wwwroot :
cd /home/site/wwwroot php artisan migrate --force
Pokud proběhne úspěšně, služba App Service se úspěšně připojuje k databázi.
Poznámka:
Kromě restartování aplikace se můžou zachovat jenom změny v /home
souborech.
Máte problémy? Projděte si část Řešení potíží.
6. Přejděte do aplikace.
Ve výstupu AZD najděte adresu URL aplikace a přejděte na ni v prohlížeči. Adresa URL vypadá takto ve výstupu AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Přidejte do seznamu několik úkolů.
Blahopřejeme, spouštíte webovou aplikaci ve službě Aplikace Azure Service se zabezpečeným připojením ke službě Azure Database for MySQL.
Máte problémy? Projděte si část Řešení potíží.
7. Streamování diagnostických protokolů
Aplikace Azure Služba zaznamenává všechny zprávy protokolované do konzoly, aby vám pomohla při diagnostice problémů s vaší aplikací. Pro usnadnění přístupu už šablona AZD povolila protokolování do místního systému souborů a odesílá protokoly do pracovního prostoru služby Log Analytics.
Ukázková aplikace vypíše zprávy protokolu konzoly ve všech jejích koncových bodech, aby tuto funkci ukázala. Ve výchozím nastavení funkce protokolování Laravelu (například Log::info()
) zapisuje do místního souboru. Nastavení vaší LOG_CHANNEL
aplikace z dřívějších verzí zpřístupňuje položky protokolu ze streamu protokolu služby App Service.
Route::get('/', function () {
Log::info("Get /");
$startTime = microtime(true);
// Simple cache-aside logic
if (Cache::has('tasks')) {
$data = Cache::get('tasks');
} else {
$data = Task::orderBy('created_at', 'asc')->get();
Cache::add('tasks', $data);
}
return view('tasks', ['tasks' => $data, 'elapsed' => microtime(true) - $startTime]);
});
Ve výstupu AZD vyhledejte odkaz na streamování protokolů služby App Service a přejděte na něj v prohlížeči. Odkaz vypadá takto ve výstupu AZD:
Stream App Service logs at: <URL>
Máte problémy? Projděte si část Řešení potíží.
8. Vyčištění prostředků
Pokud chcete odstranit všechny prostředky Azure v aktuálním prostředí nasazení, spusťte azd down
a postupujte podle pokynů.
azd down
Řešení problémů
Při migracích databází dochází k chybě php_network_getaddresses: getaddrinfo for mysqldb failed: No address associated with hostname...
Označuje, že proměnné připojení MySQL nejsou správně nakonfigurované. Ověřte, že AZURE_MYSQL_
nastavení aplikace jsou správně nakonfigurovaná v 3. Použijte připojovací řetězce Azure v kódu aplikace.
V prohlížeči se zobrazí prázdná stránka.
Označuje, že App Service nemůže najít spouštěcí soubory PHP ve /public. Postupujte podle kroků v 4. Nakonfigurujte nastavení Laravel ve webové aplikaci.
V prohlížeči se mi zobrazuje stránka ladění Unsupported cipher or incorrect key length.
Označuje, že APP_KEY
nastavení je nastavené na neplatný klíč. Při spuštění azd up
nezapomeňte nastavit appKey
na výstup php artisan key:generate --show
.
V prohlížeči se mi zobrazuje stránka ladění Uncaught Error: Class "Illuminate\..." not found.
Tato chyba a podobné chyby značí, že jste nespustili composer install
před azd up
, nebo že balíčky v adresáři /vendor jsou zastaralé. Spusťte composer install
a azd deploy
znovu.
V prohlížeči se mi zobrazuje stránka ladění php_network_getaddresses: getaddrinfo for redishost failed: Name or service not known.
Označuje, že proměnné připojení Redis nejsou správně nakonfigurované. Ověřte, že AZURE_REDIS_
nastavení aplikace jsou správně nakonfigurovaná v 3. Použijte připojovací řetězce Azure v kódu aplikace.
V prohlížeči se mi zobrazuje stránka ladění SQLSTATE[42S02]: Base table or view not found: 1146 Table 'XXXX-XXXXXXXXX-mysql-database.tasks' doesn't exist
Znamená to, že jste nespustili migrace databáze, nebo migrace databáze nebyly provedeny úspěšně. Postupujte podle kroků 5. Generování schématu databáze
Nejčastější dotazy
- Kolik stojí toto nastavení?
- Jak se připojím k databázi MySQL, která je zabezpečená za virtuální sítí, pomocí jiných nástrojů?
- Jak změním nastavení aplikace APP_KEY na referenční informace ke službě Key Vault?
- Jak místní vývoj aplikací funguje s GitHub Actions?
- Proč je nasazení GitHub Actions tak pomalé?
- Nemám oprávnění k vytvoření identity přiřazené uživatelem
- Co můžu dělat s GitHub Copilotem v kódu?
- Kolik stojí toto nastavení?
- Jak se připojím k databázi MySQL, která je zabezpečená za virtuální sítí, pomocí jiných nástrojů?
- Jak místní vývoj aplikací funguje s GitHub Actions?
- Proč je nasazení GitHub Actions tak pomalé?
- Nemám oprávnění k vytvoření identity přiřazené uživatelem
- Co můžu dělat s GitHub Copilotem v kódu?
Kolik stojí toto nastavení?
Ceny vytvořených prostředků jsou následující:
- Plán služby App Service se vytvoří na úrovni Basic a dá se vertikálně navýšit nebo snížit. Podívejte se na ceny služby App Service.
- Flexibilní server MySQL je vytvořen v úrovni B1ms a lze ho upravit směrem nahoru nebo dolů. S bezplatným účtem Azure je úroveň B1ms bezplatná po dobu 12 měsíců až do měsíčních limitů. Podívejte se na ceny služby Azure Database for MySQL.
- Azure Cache for Redis se vytvoří na úrovni Basic s minimální velikostí mezipaměti. K této úrovni jsou spojené malé náklady. Kapacitu můžete vertikálně navýšit na vyšší úroveň výkonu pro vyšší dostupnost, clustering a další funkce. Podívejte se na ceny služby Azure Cache for Redis.
- Virtuální síť není zpoplatněna, pokud nekonfigurujete další funkce, jako je například propojení sítí. Podívejte se na ceny služby Azure Virtual Network.
- Za privátní zónu DNS se účtují malé poplatky. Podívejte se na ceny Azure DNS.
Jak se připojím k databázi MySQL, která je chráněná za virtuální sítí, pomocí jiných nástrojů?
- Pro základní přístup z nástroje příkazového řádku můžete spustit
mysql
z SSH terminálu aplikace. - Pokud se chcete připojit z desktopového nástroje, jako je MySQL Workbench, musí být váš počítač ve virtuální síti. Může to být například virtuální počítač Azure, který je připojený k jedné z podsítí, nebo počítač v místní síti, který má připojení VPN typu site-to-site s virtuální sítí Azure.
- Azure Cloud Shell můžete také integrovat s virtuální sítí.
Jak změním nastavení aplikace APP_KEY na referenční informace ke službě Key Vault?
Z kroku 4 - Konfigurace proměnných Laravel na portálu můžete změnit na odkaz na Key Vault spuštěním následujících příkazů Azure CLI v GitHub Codespace.
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=laravelAppKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(php artisan key:generate --show)
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "APP_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Totéž můžete udělat i na portálu. Další informace najdete tady:
Jak místní vývoj aplikací funguje s GitHub Actions?
Jako příklad vezměte automaticky vygenerovaný soubor pracovního postupu ze služby App Service a každý git push
spustí nové sestavení a nasazení. Z místního klonu úložiště GitHub provedete požadované aktualizace a odešlete je na GitHub. Příklad:
git add .
git commit -m "<some-message>"
git push origin main
Proč je nasazení GitHub Actions tak pomalé?
Automaticky vygenerovaný soubor pracovního postupu ze služby App Service definuje pracovní postup sestavení a následného nasazení, který zahrnuje dva úkoly. Vzhledem k tomu, že každá úloha běží ve vlastním čistém prostředí, soubor pracovního postupu zajistí, že deploy
má úloha přístup k souborům build
z úlohy:
- Na konci
build
úlohy nahrajte soubory jako artefakty. - Na začátku
deploy
úlohy stáhněte artefakty.
V procesu dvou úloh je většina potřebného času strávena nahráváním a stahováním artefaktů. Pokud chcete, můžete soubor pracovního postupu zjednodušit tím, že zkombinujete dvě úlohy do jedné, což eliminuje potřebu kroků pro nahrávání a stahování.
Nemám oprávnění k vytvoření uživatelsky přiřazené identity.
Podívejte se na Nastavení nasazení GitHub Actions z Centra nasazení.
Co můžu dělat s GitHub Copilotem v kódu?
Můžete si všimnout, že zobrazení chatu GitHub Copilot už pro vás bylo k dispozici při vytváření pracovního prostoru kódu. Pro usnadnění práce zahrneme rozšíření chatu GitHub Copilot do definice kontejneru (viz .devcontainer/devcontainer.json). Potřebujete ale účet GitHub Copilot (k dispozici je 30denní bezplatná zkušební verze).
Několik tipů pro vás při komunikaci s GitHub Copilotem:
- V rámci jedné chatové relace se otázky a odpovědi doplňují, a můžete upravit své otázky pro přesnější odpovědi, které obdržíte.
- GitHub Copilot ve výchozím nastavení nemá přístup k žádnému souboru ve vašem úložišti. Pokud chcete položit otázky k souboru, otevřete ho nejprve v editoru.
- Pokud chcete, aby GitHub Copilot měl při přípravě odpovědí přístup ke všem souborům v úložišti, začněte svou otázkou
@workspace
. Další informace najdete v tématu Use the @workspace agent. - V chatové relaci může GitHub Copilot navrhovat změny a (s
@workspace
) dokonce i tam, kde se mají změny provádět, ale změny za vás nesmí provádět. Je na vás přidat navrhované změny a otestovat je.
Další kroky
V dalším kurzu se dozvíte, jak zabezpečit aplikaci pomocí vlastní domény a certifikátu.
Nebo se podívejte na další zdroje informací: