Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Deze zelfstudie laat zien hoe u een beveiligde PHP-app in Azure App Service maakt die verbinding maakt met een MySQL-database (met behulp van Azure Database for MySQL Flexible Server). U implementeert ook een Azure Cache voor Redis om de cachecode in te schakelen in uw toepassing. Azure-app Service is een uiterst schaalbare webhostingservice die eenvoudig apps kan implementeren in Windows of Linux. Wanneer u klaar bent, hebt u een Laravel-app die in Azure App Service op Linux wordt uitgevoerd.
Vereiste voorwaarden
- Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
- Een GitHub-account. je kunt er ook gratis een krijgen.
- Kennis van PHP met Laravel-ontwikkeling.
- (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Er is een gratis proefversie van 30 dagen beschikbaar.
1 - Voer het voorbeeld uit
Eerst stelt u een voorbeeld van een gegevensgestuurde app in als uitgangspunt. Voor uw gemak bevat de voorbeeldopslagplaats een dev-containerconfiguratie . De dev-container heeft alles wat u nodig hebt om een toepassing te ontwikkelen, met inbegrip van de database, cache en alle omgevingsvariabelen die nodig zijn voor de voorbeeldtoepassing. De dev-container kan worden uitgevoerd in een GitHub-coderuimte, wat betekent dat u het voorbeeld kunt uitvoeren op elke computer met een webbrowser.
Stap 1: In een nieuw browservenster:
- Meld u aan bij uw GitHub-account.
- Navigeer naar https://github.com/Azure-Samples/laravel-tasks/fork.
- Selecteer Maak een fork.
Stap 2: In de GitHub-fork:
- Selecteer Code>Codespace aanmaken op main.
Het duurt enkele minuten voordat de codespace is ingesteld. Het opgegeven .env-bestand bevat ook al een dummyvariabele
APP_KEY
die Laravel lokaal moet uitvoeren.
Stap 3: In de codespace terminal:
- Voer
composer install
uit. - Databasemigraties uitvoeren met
php artisan migrate
. - Voer de app uit met
php artisan serve
. - Wanneer u de melding
Your application running on port 80 is available.
ziet, selecteert u Openen in browser. U ziet de voorbeeldtoepassing in een nieuw browsertabblad. Als u de toepassing wilt stoppen, typtCtrl
+C
u .
Ondervindt u problemen? Controleer de problemen oplossen sectie.
2 - App Service, database en cache maken
In deze stap maakt u de Azure-resources. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service, Azure Database for MySQL en Azure Cache voor Redis. Voor het aanmaakproces geeft u het volgende op:
- De naam voor de web-app. Deze wordt gebruikt als onderdeel van de DNS-naam voor uw app.
- De regio waarin de app fysiek moet draaien. Deze wordt ook gebruikt als onderdeel van de DNS-naam voor uw app.
- De runtimestack voor de app. Hier selecteert u de versie van PHP die u voor uw app wilt gebruiken.
- Het hostingabonnement voor de app. Dit is de prijscategorie die de set functies en schaalcapaciteit voor uw app bevat.
- De Resourcegroep voor de app. Met een resourcegroep kunt u alle Azure-resources die nodig zijn voor de toepassing groeperen (in een logische container).
Meld u aan bij Azure Portal en volg deze stappen om uw Azure-app Service-resources te maken.
Stap 1: In Azure Portal:
- Typ app-service in de bovenste zoekbalk.
- Selecteer het item met het label App Service onder de kop Services .
- Selecteer . U kunt ook direct naar de creatiewizard navigeren.
Stap 2: Vul op de Web-app maken pagina het formulier als volgt in.
- Naam: msdocs-laravel-mysql-XYZ. Er wordt een resourcegroep met de naam msdocs-laravel-mysql-XYZ_group voor u gegenereerd.
- Runtimestack: PHP 8.4.
- Besturingssysteem: Linux.
- Regio: Elke Azure-regio bij u in de buurt.
- Linux-plan: maak nieuwe en gebruik de naam msdocs-laravel-mysql-XYZ.
- Prijsplan: Basis. Wanneer u klaar bent, kunt u omhoog schalen naar een andere prijscategorie.
Stap 3:
- Selecteer het tabblad Database .
- Selecteer Een database maken.
- In Engine selecteert u MySQL - Flexible Server.
- Selecteer Een Azure Cache voor Redis maken.
- Voer in Naam (onder Cache) een naam in voor de cache.
- Kies Basic in SKU.
Stap 4:
- Selecteer het tabblad Implementatie .
- Schakel continue implementatie in.
- Selecteer uw GitHub-alias in Organisatie.
- Selecteer laravel-tasks in opslagplaats.
- In Vertakking, selecteer main.
- Zorg ervoor dat basisverificatie is uitgeschakeld.
- Kies Beoordelen + creëren.
- Nadat de validatie is voltooid, selecteert u Maken.
Stap 5: Het duurt enkele minuten voordat de implementatie is voltooid. Zodra de implementatie is voltooid, selecteert u de knop Ga naar resource . Je wordt rechtstreeks naar de App Service-app geleid, maar de volgende bronnen worden gemaakt:
- Resourcegroep: de container voor alle gemaakte resources.
- App Service-plan: definieert de rekenresources voor App Service. Er wordt een Linux-plan in de Basic-laag gemaakt.
- App Service: Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
- Virtueel netwerk: geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
- Privé-eindpunten: Access-eindpunten voor de databaseserver en de Redis-cache in het virtuele netwerk.
- Netwerkinterfaces: vertegenwoordigt privé-IP-adressen, één voor elk van de privé-eindpunten.
- Azure Database for MySQL Flexible Server: alleen toegankelijk vanaf achter het privé-eindpunt. Er worden een database en een gebruiker voor u gemaakt op de server.
- Azure Cache voor Redis: alleen toegankelijk via het privé-eindpunt.
- Privé-DNS zones: DNS-resolutie van de databaseserver en de Redis-cache in het virtuele netwerk inschakelen.
3 - Verbindingsgeheimen beveiligen
De creatiewizard heeft de connectiviteitsvariabelen al voor u gegenereerd als app-instellingen. De aanbevolen beveiligingsprocedures zijn echter om geheimen volledig buiten App Service te houden. U verplaatst uw geheimen naar een sleutelkluis en wijzigt uw app-instelling in Key Vault-verwijzingen met behulp van serviceconnectors.
Stap 1: de bestaande verbindingsreeks ophalen
- Selecteer > in het linkermenu van de App Service-pagina instellingen omgevingsvariabelen.
- Selecteer Verbindingsreeksen.
- Selecteer AZURE_MYSQL_CONNECTIONSTRING.
- In de toepassingsinstelling Toevoegen/bewerken kopieert u in het veld Waarde de gebruikersnaam en het wachtwoord voor later gebruik. Met de verbindingsreeks kunt u verbinding maken met de MySQL-database die wordt beveiligd achter privé-eindpunten. De geheimen worden echter rechtstreeks opgeslagen in de App Service-app, wat niet het beste is. U wijzigt dit.
Stap 2: Een sleutelkluis maken voor veilig beheer van geheimen
- Typ "Key Vault" in de bovenste zoekbalk en selecteer Marketplace>Key Vault.
- Selecteer Resourcegroep en kies msdocs-laravel-mysql-XYZ_group.
- Typ in de naam van de sleutelkluis een naam die alleen uit letters en cijfers bestaat.
- Stel deze in Regio in op dezelfde locatie als de resourcegroep.
Stap 3: De sleutelkluis met een privé-eindpunt beveiligen
- Selecteer het tabblad Netwerken.
- Schakel de selectie Openbare toegang inschakelen uit.
- Selecteer Een privé-eindpunt maken.
- Selecteer Resourcegroep en kies msdocs-laravel-mysql-XYZ_group.
- Selecteer in het dialoogvenster in Location dezelfde locatie als uw App Service-app.
- In Naam typ msdocs-laravel-mysql-XYZVaultEndpoint.
- Selecteer in virtueel netwerk het virtuele netwerk in de groep msdocs-laravel-mysql-XYZ_group .
- Selecteer in Subnet het beschikbare compatibele subnet. De Web App-wizard heeft deze voor uw gemak gemaakt.
- Kies OK.
- Selecteer Beoordelen enmaken en selecteer vervolgens maken. Wacht tot de implementatie van de Key Vault is voltooid. U ziet nu 'Uw implementatie is voltooid'.
Stap 4: de MySQL-connector maken
- Typ msdocs-laravel-mysql in het bovenste zoekveld en selecteer vervolgens de App Service-resource genaamd msdocs-laravel-mysql-XYZ.
- Selecteer op de pagina App Service in het linkermenu Instellingen > Service Connector.
- Klik op Creëren.
- Voor servicetype selecteert u DB for MySQL Flexibele server.
- Selecteer voor MySQL flexibele server uw server (bijvoorbeeld msdocs-laravel-mysql-235-server).
- Voor de MySQL-database selecteert u uw database (bijvoorbeeld msdocs-laravel-mysql-235-database).
Stap 5: Verificatie configureren voor de MySQL-connector
- Selecteer het tabblad Verificatie.
- Kies Connection string.
- Plak in Wachtwoord het wachtwoord dat u eerder hebt gekopieerd.
- Selecteer Geheim opslaan in Key Vault.
- Onder Key Vault-verbinding, selecteer Nieuwe maken. Er wordt een dialoogvenster Verbinding maken geopend boven aan het bewerkingsdialoogvenster.
Stap 6: De Key Vault-verbinding tot stand brengen
- Selecteer in het dialoogvenster Verbinding maken voor de Key Vault-verbinding in Key Vault de sleutelkluis die u eerder hebt gemaakt.
- Selecteer Beoordelen en Creëren.
- Wanneer de validatie is voltooid, selecteer Create.
Stap 6: De mySQL-connectorinstellingen voltooien
- U bent terug in het dialoogvenster voor de MySQL-connector. In het tabblad Authentication, wacht tot de key vault-connector is aangemaakt. Wanneer de bewerking is voltooid, wordt de Key Vault-verbinding in de vervolgkeuzelijst automatisch geselecteerd.
- Selecteer Beoordelen en Creëren.
- Klik op Creëren. Wacht totdat de melding Update is voltooid wordt weergegeven.
Stap 7: De Redis-connector configureren voor het gebruik van Key Vault-geheimen
- Schakel op de pagina Service Connectors het selectievakje in naast de Redis-cacheconnector en selecteer Bewerken.
- Selecteer het tabblad Verificatie.
- Selecteer Geheim opslaan in Key Vault.
- Selecteer onder Key Vault-verbinding de sleutelkluis die u hebt gemaakt.
- Selecteer Volgende: Netwerken.
- Selecteer Firewallregels configureren om toegang tot de doelservice in te schakelen. De wizard voor het maken van apps heeft de SQL-database al beveiligd met een privé-eindpunt.
- Selecteer Opslaan. Wacht totdat de melding Update is voltooid wordt weergegeven.
Stap 8: De key vault-integratie controleren
- Selecteer opnieuw Instellingen > omgevingsvariabelen in het linkermenu.
- Selecteer naast AZURE_MYSQL_PASSWORDde optie Waarde weergeven. De waarde moet zijn
@Microsoft.KeyVault(...)
, wat betekent dat het een sleutelkluisverwijzing is omdat het geheim nu wordt beheerd in de sleutelkluis. - Als u de Redis-verbindingsreeks wilt controleren, selecteert u Waarde weergeven naast AZURE_REDIS_CONNECTIONSTRING.
Samengevat: het proces voor het beveiligen van uw verbindingsgeheimen:
- De verbindingsgeheimen ophalen uit de omgevingsvariabelen van de App Service-app.
- Een Key Vault maken.
- Een Key Vault-verbinding maken met de door het systeem toegewezen beheerde identiteit.
- De service-verbindingsstukken bijwerken om de geheimen op te slaan in de sleutelkluis.
Ondervindt u problemen? Controleer de problemen oplossen sectie.
4 - Laravel-variabelen configureren
Stap 1: Maken CACHE_DRIVER
als een app-instelling.
- Selecteer Toevoegen op het tabblad App-instellingen.
- Voer in het veld Naam CACHE_DRIVER in.
- Voer in het veld Waarderedis in.
- Selecteer Toepassen en vervolgens Opnieuw toepassenen bevestig het.
Stap 2: Maak met dezelfde stappen in stap 1 de volgende app-instellingen:
- MYSQL_ATTR_SSL_CA: Gebruik /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem als waarde. Deze app-instelling verwijst naar het pad van het TLS/SSL-certificaat dat u nodig hebt voor toegang tot de MySQL-server. Het is voor het gemak opgenomen in de voorbeeldrepository.
- LOG_CHANNEL: Gebruik stderr als waarde. Deze instelling vertelt Laravel om logboeken door te geven aan stderr, waardoor deze beschikbaar is voor de App Service-logboeken.
- APP_DEBUG: Gebruik true als waarde. Het is een Laravel-foutopsporingsvariabele waarmee foutopsporingsmoduspagina's mogelijk zijn.
- APP_KEY: Gebruik base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= als de waarde. Het is een Laravel-versleutelingsvariabele.
Belangrijk
De APP_KEY
waarde wordt hier voor het gemak gebruikt. Voor productiescenario's moet deze specifiek worden gegenereerd voor uw implementatie met behulp van php artisan key:generate --show
de opdrachtregel.
In het ideale geval moet de APP_KEY
app-instelling ook als een sleutelkluisverwijzing worden geconfigureerd, wat een proces met meerdere stappen is. Zie Hoe wijzig ik de APP_KEY-app-instelling in een Key Vault-verwijzing voor meer informatie?
5 - Voorbeeldcode implementeren
In deze stap configureert u gitHub-implementatie met behulp van GitHub Actions. Het is slechts een van de vele manieren om te implementeren in App Service, maar ook een uitstekende manier om continue integratie in uw implementatieproces te hebben. Standaard, start elke git push
naar je GitHub-repository de bouw- en implementatieactie.
Stap 1: Voer in de GitHub-coderuimte van uw voorbeeldfork uit git pull origin main
.
Hiermee haalt u het zojuist vastgelegde werkstroombestand op in uw codespace.
Stap 2 (optie 1: met GitHub Copilot):
- Start een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.
- Vraag het volgende: '@workspace Hoe maakt de app verbinding met de database en redis?' Copilot kan u wat uitleg geven over hoe de instellingen zijn geconfigureerd in configuratie/database.php.
- Vraag het volgende: '@workspace In productiemodus wordt mijn app uitgevoerd in een App Service-web-app, die gebruikmaakt van Azure Service Connector om verbinding te maken met een flexibele MySQL-server. Wat zijn de namen van de omgevingsvariabelen die ik moet gebruiken?' Copilot kan u mogelijk een codesuggesties geven die vergelijkbaar is met de code in optie 2: zonder onderstaande GitHub Copilot-stappen en u zelfs laten weten dat u de wijziging moet aanbrengen in het bestand config/database.php .
- Open config/database.php in de verkenner en voeg de codesuggesties toe.
- Vraag het volgende: '@workspace Mijn App Service-app maakt ook gebruik van Azure Service Connector om verbinding te maken met een Cache voor Redis met behulp van het Django-clienttype. Wat zijn de namen van de omgevingsvariabelen die ik moet gebruiken?*" Copilot geeft u mogelijk een codesuggesties die vergelijkbaar zijn met die in de optie 2: zonder onderstaande GitHub Copilot-stappen en kunt u zelfs vertellen dat u de wijziging in het configuratie-/database.php-bestand moet aanbrengen. Meld u aan bij GitHub Copilot voor Azure als u hierom wordt gevraagd om nauwkeurigere antwoorden te krijgen.
- Voeg de codesuggesties toe. GitHub Copilot geeft u niet elke keer hetzelfde antwoord en dit is niet altijd juist. Mogelijk moet u meer vragen stellen om het antwoord af te stemmen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips.
Stap 2 (optie 2: zonder GitHub Copilot):
- Open config/database.php in de verkenner. Zoek de
mysql
sectie en breng de volgende wijzigingen aan: - Vervang
DB_HOST
(regel 49) doorAZURE_MYSQL_HOST
. - Vervang
DB_DATABASE
(regel 51) doorAZURE_MYSQL_DBNAME
. - Vervang
DB_USERNAME
(regel 52) doorAZURE_MYSQL_USERNAME
. - Vervang
DB_PASSWORD
(lijn 53) doorAZURE_MYSQL_PASSWORD
. - Vervang
DB_PORT
(regel 50) doorAZURE_MYSQL_PORT
. - Schuif naar de sectie Redis
cache
en breng de volgende wijzigingen aan: - Vervang
REDIS_HOST
(regel 142) doorAZURE_REDIS_HOST
. - Vervang
REDIS_PASSWORD
(regel 144) doorAZURE_REDIS_PASSWORD
. - Vervang
REDIS_PORT
in regel 145 doorAZURE_REDIS_PORT
. - Vervang
REDIS_CACHE_DB
(regel 146) doorAZURE_REDIS_DATABASE
. - Voeg in dezelfde sectie een regel toe met
'scheme' => 'tls',
. Deze configuratie vertelt Laravel om versleuteling te gebruiken om verbinding te maken met Redis.
Stap 3:
- Selecteer de extensie Broncodebeheer .
- Typ in het tekstvak een doorvoeringsbericht zoals
Configure Azure database and cache connections
. Of selecteeren laat GitHub Copilot een doorvoerbericht voor u genereren.
- Selecteer Doorvoeren en bevestig met Ja.
- Selecteer Wijzigingen synchroniseren 1 en bevestig met OK.
Stap 4: Ga terug naar de pagina Implementatiecentrum in Azure Portal:
- Klik op het tabblad Logboeken en klik op Vernieuwen om de nieuwe implementatierun te zien.
- Selecteer in het logboekitem voor de implementatieuitvoering de vermelding Build/Deploy Logs met de meest recente tijdstempel.
Stap 5: U wordt naar uw GitHub-opslagplaats gebracht en u ziet dat de GitHub-actie wordt uitgevoerd. Het werkstroombestand definieert twee afzonderlijke fasen, bouwen en implementeren. Wacht totdat de GitHub-uitvoering de status Geslaagd weergeeft. Het duurt ongeveer 10 minuten.
Ondervindt u problemen? Controleer de problemen oplossen sectie.
6 - Databaseschema genereren
De wizard voor het maken plaatst de MySQL-databaseserver achter een privé-eindpunt, waardoor deze alleen toegankelijk is vanuit het virtuele netwerk. Omdat de App Service-app al is geïntegreerd met het virtuele netwerk, is de eenvoudigste manier om databasemigraties uit te voeren met uw database rechtstreeks vanuit de App Service-container.
Stap 1: Terug op de App Service-pagina, in het linkermenu,
- Selecteer Ontwikkelingstools>SSH.
- Selecteer Go.
Stap 2: In de SSH-terminal:
- Voer
cd /home/site/wwwroot
uit. Hier zijn al uw geïmplementeerde bestanden. - Voer
php artisan migrate --force
uit. Als dit lukt, maakt App Service verbinding met de MySQL-database.
Aanbeveling
In de SSH-sessie blijven alleen wijzigingen in bestanden in /home
bestaan na het opnieuw opstarten van de app. Wijzigingen buiten /home
worden niet opgeslagen.
7 - Rootdirectory van de site wijzigen
De levenscyclus van laravel-toepassingen begint in plaats daarvan in de /public directory. De standaard PHP-container voor App Service maakt gebruik van Nginx, die begint in de hoofdmap van de toepassing. Als u de hoofdmap van de site wilt wijzigen, moet u het Nginx-configuratiebestand wijzigen in de PHP-container (/etc/nginx/sites-available/default). Voor uw gemak bevat de voorbeeldopslagplaats een aangepast configuratiebestand met de naam Standaard. Zoals eerder vermeld, wilt u dit bestand niet vervangen met behulp van /home
de SSH-shell, omdat de wijziging zich buiten bevindt en verloren gaat nadat de app opnieuw is opgestart.
Stap 1:
- Selecteer Configuratie in het linkermenu.
- Selecteer het tabblad Algemene instellingen.
Stap 2: Op het tabblad Algemene instellingen:
- Voer in het vak Opstartopdracht de volgende opdracht in: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
- Selecteer Opslaan en selecteer Vervolgens Doorgaan. De opdracht vervangt het Nginx-configuratiebestand in de PHP-container en start Nginx opnieuw op. Deze configuratie zorgt ervoor dat dezelfde wijziging wordt aangebracht in de container telkens wanneer deze wordt gestart.
8 - Blader naar de app
Stap 1: Op de App Service-pagina:
- Selecteer Overzicht in het linkermenu.
- Selecteer het standaarddomein van uw app.
Stap 2: Voeg een paar taken toe aan de lijst. Gefeliciteerd, u voert een beveiligde gegevensgestuurde PHP-app uit in Azure-app Service.
Aanbeveling
De voorbeeldtoepassing implementeert het cache-aside-patroon . Wanneer u de pagina opnieuw laadt nadat u gegevenswijzigingen hebt aangebracht, wordt de reactietijd op de webpagina veel sneller weergegeven omdat de gegevens uit de cache worden geladen in plaats van de database.
9 - Diagnostische logboeken streamen
Azure-app Service legt alle berichten vast die zijn vastgelegd in de console om u te helpen bij het diagnosticeren van problemen met uw toepassing. De voorbeeld-app voert consolelogboekberichten uit in elk van de eindpunten om deze mogelijkheid te demonstreren. De logboekfunctionaliteit van Laravel (bijvoorbeeld Log::info()
) schrijft standaard naar een lokaal bestand. Uw LOG_CHANNEL
app-instelling van eerder maakt logboekvermeldingen toegankelijk vanuit de App Service-logboekstream.
Stap 1: Op de App Service-pagina:
- Selecteer App Service-logboeken in het linkermenu.
- Selecteer Bestandssysteem onder Toepassingslogboek.
Stap 2: Selecteer in het menu links de optie Logstream. U ziet de logboeken voor uw app, inclusief platformlogboeken en logboeken vanuit de container.
De hulpbronnen opschonen
Wanneer u klaar bent, kunt u alle resources uit uw Azure-abonnement verwijderen door de resourcegroep te verwijderen.
Stap 1: In de zoekbalk boven aan Azure Portal:
- Voer de naam van de resourcegroup in.
- Selecteer de resourcegroep.
Stap 2: In de pagina van de resourcegroep, selecteer 'Verwijder resourcegroep'.
Stap 3:
- Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.
- Selecteer Verwijderen.
2. Azure-resources maken en een voorbeeld-app implementeren
In deze stap maakt u de Azure-resources en implementeert u een voorbeeld-app in App Service op Linux. Met de stappen die in deze handleiding worden gebruikt, maakt u een set van nature beveiligde bronnen, waaronder App Service en Azure Database voor MySQL.
De GitHub-codespace heeft al de Azure Developer CLI (AZD).
Genereer een Laravel-versleutelingssleutel met
php artisan key:generate --show
:php artisan key:generate --show
Meld u aan bij Azure door de
azd auth login
opdracht uit te voeren en de prompt te volgen:azd auth login
Maak de benodigde Azure-resources en implementeer de app-code met de
azd up
opdracht. Volg de prompt om het gewenste abonnement en de gewenste locatie voor de Azure-resources te selecteren.azd up
Geef de volgende antwoorden wanneer u hierom wordt gevraagd:
Vraag Antwoord Voer een nieuwe omgevingsnaam in Typ een unieke naam. De AZD-sjabloon gebruikt deze naam als onderdeel van de DNS-naam van uw web-app in Azure ( <app-name>-<hash>.azurewebsites.net
). Alfanumerieke tekens en afbreekstreepjes zijn toegestaan.Selecteer een Azure-abonnement dat u wilt gebruiken Selecteer uw abonnement. Selecteer een Azure-locatie die u wilt gebruiken Selecteer een locatie. Voer een waarde in voor de met de infrastructuur beveiligde parameter appKey Gebruik de uitvoer van php artisan key:generate --show
hier. De AZD-sjabloon maakt een Key Vault-secret voor het aan dat je in je app kunt gebruiken.Voer een waarde in voor de met de infrastructuur beveiligde parameter databasePassword Databasewachtwoord voor MySQL. Het moet ten minste acht tekens lang zijn en hoofdletters, kleine letters, cijfers en speciale tekens bevatten. Het duurt ongeveer 15 minuten voordat de
azd up
opdracht is voltooid (de Redis-cache duurt het de meeste tijd). Uw toepassingscode wordt ook gecompileerd en geïmplementeerd, maar u wijzigt de code later om met App Service te werken. Terwijl deze wordt uitgevoerd, bevat de opdracht berichten over het inrichtings- en implementatieproces, inclusief een koppeling naar de implementatie in Azure. Wanneer deze is voltooid, wordt met de opdracht ook een koppeling naar de implementatietoepassing weergegeven.Deze AZD-sjabloon bevat bestanden (azure.yaml en de infra-map) die een standaardarchitectuur met ingebouwde beveiliging genereren met de volgende Azure-resources:
- Resourcegroep: de container voor alle gemaakte resources.
- App Service-plan: definieert de rekenresources voor App Service. Er wordt een Linux-plan in de B1-laag gemaakt.
- App Service: Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
- Virtueel netwerk: geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
- Azure Database for MySQL Flexible Server: alleen toegankelijk vanuit het virtuele netwerk door DNS-zone-integratie. Er wordt een database voor u gemaakt op de server.
- Azure Cache voor Redis: alleen toegankelijk vanuit het virtuele netwerk.
- Privé-eindpunten: Toegang tot eindpunten voor de sleutelkluis en de Redis-cache in het virtuele netwerk.
- Privé-DNS zones: DNS-omzetting van de sleutelkluis, de databaseserver en de Redis-cache in het virtuele netwerk inschakelen.
- Log Analytics-werkruimte: fungeert als de doelcontainer voor uw app voor het verzenden van de logboeken, waar u ook query's kunt uitvoeren op de logboeken.
- Sleutelkluis: wordt gebruikt om uw databasewachtwoord hetzelfde te houden wanneer u opnieuw implementeert met AZD.
Ondervindt u problemen? Controleer de problemen oplossen sectie.
3. Azure-verbindingsreeksen gebruiken in toepassingscode
De AZD-sjabloon die u gebruikt, heeft de connectiviteitsvariabelen voor u al gegenereerd als app-instellingen en voert deze voor uw gemak uit naar de terminal. App-instellingen zijn een manier om verbindingsgeheimen uit uw codeopslagplaats te houden.
Zoek in de AZD-uitvoer de app-instellingen die beginnen met
AZURE_MYSQL_
enAZURE_REDIS_
. Alleen de instellingsnamen worden weergegeven. Ze zien er zo uit in het AZD-output: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
Instellingen die beginnen met
AZURE_MYSQL_
zijn verbindingsvariabelen voor de MySQL-database en instellingen die beginnenAZURE_REDIS_
met zijn voor de Redis-cache. U moet deze later in uw code gebruiken. Voor uw gemak toont de AZD-sjabloon u de directe koppeling naar de pagina app-instellingen van de app in Azure Portal.Open configuratie /database.php vanuit de explorer. Dit is het configuratiebestand voor database- en Redis-cacheverbindingen.
Zoek het deel dat de
mysql
verbinding definieert (regels 46-64) en vervangDB_HOST
,DB_PORT
,DB_DATABASE
,DB_USERNAME
, enDB_PASSWORD
door deAZURE_MYSQL_
app-instellingen uit de AZD-uitvoer. Uwmysql
verbinding moet eruitzien als de volgende code.'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'), ]) : [], ],
Zie de Laravel-documentatie voor meer informatie over databaseconfiguratie in Laravel.
Zoek het gedeelte dat de Redis-cacheverbinding definieert (regels 140-147) en vervang ,
REDIS_HOST
,REDIS_PASSWORD
enREDIS_PORT
doorREDIS_CACHE_DB
deAzure_REDIS_
app-instellingen uit de AZD-uitvoer. Voeg ook toe'scheme' => 'tls',
aan de verbinding. De cacheverbinding moet eruitzien als de volgende code:'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'), ],
Zie de Laravel-documentatie voor meer informatie over redis-cacheconfiguratie in Laravel.
Notitie
Houd er rekening mee dat uw wijzigingen nog niet zijn geïmplementeerd. U implementeert deze aan het einde van de volgende stap.
4. Laravel-instellingen configureren in web-app
Open infra/resources.bicep vanuit de verkenner. Dit is het Bicep-bestand dat de gemaakte Azure-resources definieert.
Zoek het deel dat de app-instellingen definieert (regels 510-514) en verwijder opmerkingen. Deze app-instellingen zijn:
Omgeving Beschrijving CACHE_DRIVER
Vertelt Laravel dat Redis moet worden gebruikt als cache (zie laravel-documentatie). MYSQL_ATTR_SSL_CA
Nodig om een TLS-verbinding met MySQL in Azure te openen. Het certificaatbestand is voor het gemak opgenomen in de voorbeeldopslagplaats. Deze variabele wordt gebruikt door de mysql-verbinding in configuratie/database.php LOG_CHANNEL
Vertelt Laravel om logboeken naar stderr
te sturen, zodat ze beschikbaar worden in de App Service-logboeken (zie de Laravel-documentatie).APP_DEBUG
Schakel foutopsporingsmoduspagina's in Laravel in (zie laravel-documentatie). APP_KEY
Laravel-versleutelingsvariabele. De AZD-sjabloon heeft al een Key Vault-geheim (regels 212-217) gemaakt, zodat u deze opent met een Key Vault-verwijzing. Zoek in infra/resources.bicep de resourcedefinitie voor de App Service-app en verwijder commentaarregel 315:
appCommandLine: 'cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload'
De levenscyclus van laravel-toepassingen begint in de /public directory in plaats van de hoofdmap van de toepassing. De standaard PHP-container voor App Service maakt gebruik van Nginx, die begint in de hoofdmap van de toepassing. Als u de hoofdmap van de site wilt wijzigen, moet u het Nginx-configuratiebestand wijzigen in de PHP-container (/etc/nginx/sites-available/default). Voor uw gemak bevat de voorbeeldopslagplaats een vervangend configuratiebestand met de naam standaard, waarmee Nginx moet zoeken in de /openbare map. Deze aangepaste opdracht wordt uitgevoerd
appCommandLine
telkens wanneer de app begint met het toepassen van de bestandsvervanging telkens wanneer de Linux-container opnieuw wordt geladen vanuit een schone status.Voer
azd up
opnieuw uit in de codespace-terminal.azd up
Aanbeveling
azd up
voert azd package
, azd provision
en azd deploy
samen uit, wat logisch is omdat u zowel infrastructuur- als applicatiewijzigingen doorvoert. Als u alleen infrastructuurwijzigingen wilt aanbrengen, voert u de opdracht uit azd provision
. Als u alleen wijzigingen in toepassingscode wilt implementeren, voert u het volgende uit azd deploy
.
Ondervindt u problemen? Controleer de problemen oplossen sectie.
5. Databaseschema genereren
Met de MySQL-database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om Laravel-databasemigraties uit te voeren in een SSH-sessie met de Linux-container in App Service.
Zoek in de AZD-uitvoer de URL voor de SSH-sessie en navigeer ernaar in de browser. Dit ziet er als volgt uit in de uitvoer:
Open SSH session to App Service container at: <URL>
Voer in de SSH-sessie databasemigraties uit vanuit de map /home/site/wwwroot :
cd /home/site/wwwroot php artisan migrate --force
Als dit lukt, maakt App Service verbinding met de database.
Notitie
Alleen wijzigingen in bestanden in /home
kunnen zich blijven voordoen na het opnieuw opstarten van de app.
Ondervindt u problemen? Controleer de problemen oplossen sectie.
6. Blader naar de app
Zoek in de AZD-uitvoer de URL van uw app en navigeer ernaar in de browser. De URL ziet er als volgt uit in de AZD-uitvoer:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Voeg een paar taken toe aan de lijst.
Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for MySQL.
Ondervindt u problemen? Controleer de problemen oplossen sectie.
7. Diagnostische logboeken streamen
Azure-app Service legt alle berichten vast die zijn vastgelegd in de console om u te helpen bij het diagnosticeren van problemen met uw toepassing. Voor het gemak is de AZD-sjabloon al ingesteld om logging naar het lokale bestandssysteem in te schakelen en worden de logs verzonden naar een Log Analytics-werkruimte.
De voorbeeld-app voert consolelogboekberichten uit in elk van de eindpunten om deze mogelijkheid te demonstreren. De logboekfunctionaliteit van Laravel (bijvoorbeeld Log::info()
) schrijft standaard naar een lokaal bestand. Uw LOG_CHANNEL
app-instelling van eerder maakt logboekvermeldingen toegankelijk vanuit de App Service-logboekstream.
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]);
});
Zoek in de AZD-uitvoer de koppeling om App Service-logboeken te streamen en navigeer ernaar in de browser. De koppeling ziet er als volgt uit in de AZD-uitvoer:
Stream App Service logs at: <URL>
Ondervindt u problemen? Controleer de problemen oplossen sectie.
8. Middelen opruimen
Als u alle Azure-resources in de huidige implementatieomgeving wilt verwijderen, voert u de aanwijzingen uit azd down
en volgt u de aanwijzingen.
azd down
Problemen oplossen
Ik krijg de fout tijdens databasemigraties php_network_getaddresses: getaddrinfo for mysqldb failed: No address associated with hostname...
Hiermee wordt aangegeven dat MySQL-verbindingsvariabelen niet juist zijn geconfigureerd. Controleer of de AZURE_MYSQL_
app-instellingen correct zijn geconfigureerd in 3. Gebruik Azure-verbindingsreeksen in toepassingscode.
Ik krijg een lege pagina in de browser.
Het geeft aan dat App Service de PHP-startbestanden niet kan vinden in /public. Volg de stappen in 4. Configureer Laravel-instellingen in web-app.
Ik krijg een foutopsporingspagina in de browser met de mededeling Unsupported cipher or incorrect key length.
Hiermee wordt aangegeven dat de APP_KEY
instelling is ingesteld op een ongeldige sleutel. Wanneer u azd up
uitvoert, moet u ervoor zorgen dat u appKey
als uitvoer van php artisan key:generate --show
instelt.
Ik krijg een foutopsporingspagina in de browser met de mededeling Uncaught Error: Class "Illuminate\..." not found.
Deze fout en soortgelijke fouten geven aan dat u niet composer install
hebt uitgevoerd vóór azd up
, of dat de pakketten in de /vendor directory verlopen zijn. Voer composer install
en azd deploy
opnieuw uit.
Ik krijg een foutopsporingspagina in de browser met de mededeling php_network_getaddresses: getaddrinfo for redishost failed: Name or service not known.
Het geeft aan dat Redis-verbindingsvariabelen niet juist zijn geconfigureerd. Controleer of de AZURE_REDIS_
app-instellingen correct zijn geconfigureerd in 3. Gebruik Azure-verbindingsreeksen in toepassingscode.
Ik krijg een foutopsporingspagina in de browser met de mededeling SQLSTATE[42S02]: Base table or view not found: 1146 Table 'XXXX-XXXXXXXXX-mysql-database.tasks' doesn't exist
Dit betekent dat u geen databasemigraties hebt uitgevoerd of dat databasemigraties niet zijn geslaagd. Volg de stappen bij 5. Databaseschema genereren.
Veelgestelde vragen
- Hoeveel kost dit instellen?
- Hoe kan ik verbinding maken met de MySQL-database die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?
- Hoe wijzig ik de APP_KEY-app-instelling in een Key Vault-verwijzing?
- Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
- Waarom is de Implementatie van GitHub Actions zo traag?
- Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken
- Wat kan ik doen met GitHub Copilot in mijn codespace?
- Hoeveel kost dit instellen?
- Hoe kan ik verbinding maken met de MySQL-database die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?
- Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
- Waarom is de Implementatie van GitHub Actions zo traag?
- Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken
- Wat kan ik doen met GitHub Copilot in mijn codespace?
Hoeveel kost dit instellen?
De prijzen voor de gemaakte resources zijn als volgt:
- Het App Service-plan wordt gemaakt in de Basic-laag en kan omhoog of omlaag worden geschaald. Zie Prijzen voor App Service.
- De flexibele MySQL-server wordt gemaakt in de B1ms-laag en kan omhoog of omlaag worden geschaald. Met een gratis Azure-account is de B1ms-laag 12 maanden gratis, tot aan de maandelijkse limieten. Zie de prijsinformatie voor Azure Database for MySQL.
- De Azure Cache voor Redis wordt gemaakt in de Basic-laag met de minimale cachegrootte. Er zijn kleine kosten verbonden aan deze laag. U kunt deze omhoog schalen naar hogere prestatielagen voor hogere beschikbaarheid, clustering en andere functies. Zie Azure Cache voor Redis prijzen.
- Voor het virtuele netwerk worden geen kosten in rekening gebracht, tenzij u extra functionaliteit configureert, zoals peering. Zie prijzen voor Azure Virtual Network.
- Voor de privé-DNS-zone worden kleine kosten in rekening gebracht. Zie prijzen voor Azure DNS.
Hoe kan ik verbinding maken met de MySQL-database die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?
- Voor basistoegang vanuit een opdrachtregelprogramma kunt u uitvoeren
mysql
vanuit de SSH-terminal van de app. - Als u verbinding wilt maken vanaf een bureaubladprogramma zoals MySQL Workbench, moet uw machine zich in het virtuele netwerk bevinden. Het kan bijvoorbeeld een Virtuele Azure-machine zijn die is verbonden met een van de subnetten of een machine in een on-premises netwerk met een site-naar-site-VPN-verbinding met het virtuele Azure-netwerk.
- U kunt Azure Cloud Shell ook integreren met het virtuele netwerk.
Hoe wijzig ik de APP_KEY app-instelling in een Key Vault-verwijzing?
Vanuit de portalstappen in 4 : Laravel-variabelen configureren, kunt u overschakelen APP_KEY
naar een Key Vault-verwijzing door de volgende Azure CLI-opdrachten uit te voeren in de GitHub-coderuimte:
# 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)"
U kunt ook hetzelfde doen in de portal. Zie voor meer informatie:
Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
Neem het automatisch gegenereerde werkstroombestand uit App Service als voorbeeld, elk git push
start een nieuwe build- en implementatieuitvoering. Vanuit een lokale kloon van de GitHub-opslagplaats pusht u de gewenste updates naar GitHub. Voorbeeld:
git add .
git commit -m "<some-message>"
git push origin main
Waarom is de Implementatie van GitHub Actions zo traag?
Het automatisch gegenereerde werkstroombestand van App Service definieert het bouwen-en-vervolgens-uitrollen, een run met twee taken. Omdat elke taak wordt uitgevoerd in een eigen schone omgeving, zorgt het werkstroombestand ervoor dat de deploy
taak toegang heeft tot de bestanden vanuit de build
taak:
- Aan het einde van de
build
taak, bestanden uploaden als artefacten. - Download de artefacten aan het begin van de
deploy
taak.
De meeste tijd die nodig is voor het proces met twee taken, wordt besteed aan het uploaden en downloaden van artefacten. Als u wilt, kunt u het werkstroombestand vereenvoudigen door de twee taken te combineren in één, waardoor de upload- en downloadstappen niet meer nodig zijn.
Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken
Zie Implementatie van GitHub Actions instellen vanuit het Implementatiecentrum.
Wat kan ik doen met GitHub Copilot in mijn codespace?
Misschien hebt u gemerkt dat het GitHub Copilot chatvenster al aanwezig was voor u toen u de coderuimte maakte. Voor uw gemak nemen we de GitHub Copilot-chatextensie op in de containerdefinitie (zie .devcontainer/devcontainer.json). U hebt echter een GitHub Copilot-account nodig (gratis proefversie van 30 dagen beschikbaar).
Enkele tips voor u wanneer u met GitHub Copilot praat:
- In één chatsessie bouwen de vragen en antwoorden op elkaar voort en kunt u uw vragen aanpassen om het antwoord dat u krijgt af te stemmen.
- GitHub Copilot heeft standaard geen toegang tot een bestand in uw opslagplaats. Als u vragen wilt stellen over een bestand, opent u het bestand eerst in de editor.
- Als u GitHub Copilot toegang wilt geven tot alle bestanden in de opslagplaats bij het voorbereiden van de antwoorden, begint u met
@workspace
uw vraag. Zie Use the @workspace agent voor meer informatie. - In de chatsessie kan GitHub Copilot wijzigingen voorstellen en (met
@workspace
) zelfs waar de wijzigingen moeten worden aangebracht, maar het is niet toegestaan om de wijzigingen voor u aan te brengen. Het is aan u om de voorgestelde wijzigingen toe te voegen en te testen.
Volgende stappen
Ga naar de volgende zelfstudie voor meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.
U kunt ook andere resources bekijken: