Delen via


Zelfstudie: Een PHP-, MySQL- en Redis-app implementeren in Azure-app Service

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.

Schermopname van nieuw toegevoegde taken in het voorbeeld van de Azure-app met de naam Takenlijst.

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:

  1. Meld u aan bij uw GitHub-account.
  2. Navigeer naar https://github.com/Azure-Samples/laravel-tasks/fork.
  3. Selecteer Maak een fork.

Stap 2: In de GitHub-fork:

  1. 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:

  1. Voer composer install uit.
  2. Databasemigraties uitvoeren met php artisan migrate.
  3. Voer de app uit met php artisan serve.
  4. 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, typt Ctrl+Cu .

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:

  1. Typ app-service in de bovenste zoekbalk.
  2. Selecteer het item met het label App Service onder de kop Services .
  3. Selecteer . U kunt ook direct naar de creatiewizard navigeren.

Stap 2: Vul op de Web-app maken pagina het formulier als volgt in.

  1. Naam: msdocs-laravel-mysql-XYZ. Er wordt een resourcegroep met de naam msdocs-laravel-mysql-XYZ_group voor u gegenereerd.
  2. Runtimestack: PHP 8.4.
  3. Besturingssysteem: Linux.
  4. Regio: Elke Azure-regio bij u in de buurt.
  5. Linux-plan: maak nieuwe en gebruik de naam msdocs-laravel-mysql-XYZ.
  6. Prijsplan: Basis. Wanneer u klaar bent, kunt u omhoog schalen naar een andere prijscategorie.

Stap 3:

  1. Selecteer het tabblad Database .
  2. Selecteer Een database maken.
  3. In Engine selecteert u MySQL - Flexible Server.
  4. Selecteer Een Azure Cache voor Redis maken.
  5. Voer in Naam (onder Cache) een naam in voor de cache.
  6. Kies Basic in SKU.

Stap 4:

  1. Selecteer het tabblad Implementatie .
  2. Schakel continue implementatie in.
  3. Selecteer uw GitHub-alias in Organisatie.
  4. Selecteer laravel-tasks in opslagplaats.
  5. In Vertakking, selecteer main.
  6. Zorg ervoor dat basisverificatie is uitgeschakeld.
  7. Kies Beoordelen + creëren.
  8. 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

  1. Selecteer > in het linkermenu van de App Service-pagina instellingen omgevingsvariabelen.
  2. Selecteer Verbindingsreeksen.
  3. Selecteer AZURE_MYSQL_CONNECTIONSTRING.
  4. 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

  1. Typ "Key Vault" in de bovenste zoekbalk en selecteer Marketplace>Key Vault.
  2. Selecteer Resourcegroep en kies msdocs-laravel-mysql-XYZ_group.
  3. Typ in de naam van de sleutelkluis een naam die alleen uit letters en cijfers bestaat.
  4. Stel deze in Regio in op dezelfde locatie als de resourcegroep.

Stap 3: De sleutelkluis met een privé-eindpunt beveiligen

  1. Selecteer het tabblad Netwerken.
  2. Schakel de selectie Openbare toegang inschakelen uit.
  3. Selecteer Een privé-eindpunt maken.
  4. Selecteer Resourcegroep en kies msdocs-laravel-mysql-XYZ_group.
  5. Selecteer in het dialoogvenster in Location dezelfde locatie als uw App Service-app.
  6. In Naam typ msdocs-laravel-mysql-XYZVaultEndpoint.
  7. Selecteer in virtueel netwerk het virtuele netwerk in de groep msdocs-laravel-mysql-XYZ_group .
  8. Selecteer in Subnet het beschikbare compatibele subnet. De Web App-wizard heeft deze voor uw gemak gemaakt.
  9. Kies OK.
  10. 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

  1. Typ msdocs-laravel-mysql in het bovenste zoekveld en selecteer vervolgens de App Service-resource genaamd msdocs-laravel-mysql-XYZ.
  2. Selecteer op de pagina App Service in het linkermenu Instellingen > Service Connector.
  3. Klik op Creëren.
  4. Voor servicetype selecteert u DB for MySQL Flexibele server.
  5. Selecteer voor MySQL flexibele server uw server (bijvoorbeeld msdocs-laravel-mysql-235-server).
  6. Voor de MySQL-database selecteert u uw database (bijvoorbeeld msdocs-laravel-mysql-235-database).

Stap 5: Verificatie configureren voor de MySQL-connector

  1. Selecteer het tabblad Verificatie.
  2. Kies Connection string.
  3. Plak in Wachtwoord het wachtwoord dat u eerder hebt gekopieerd.
  4. Selecteer Geheim opslaan in Key Vault.
  5. 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

  1. Selecteer in het dialoogvenster Verbinding maken voor de Key Vault-verbinding in Key Vault de sleutelkluis die u eerder hebt gemaakt.
  2. Selecteer Beoordelen en Creëren.
  3. Wanneer de validatie is voltooid, selecteer Create.

Stap 6: De mySQL-connectorinstellingen voltooien

  1. 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.
  2. Selecteer Beoordelen en Creëren.
  3. 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

  1. Schakel op de pagina Service Connectors het selectievakje in naast de Redis-cacheconnector en selecteer Bewerken.
  2. Selecteer het tabblad Verificatie.
  3. Selecteer Geheim opslaan in Key Vault.
  4. Selecteer onder Key Vault-verbinding de sleutelkluis die u hebt gemaakt.
  5. Selecteer Volgende: Netwerken.
  6. 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.
  7. Selecteer Opslaan. Wacht totdat de melding Update is voltooid wordt weergegeven.

Stap 8: De key vault-integratie controleren

  1. Selecteer opnieuw Instellingen > omgevingsvariabelen in het linkermenu.
  2. 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.
  3. 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.

  1. Selecteer Toevoegen op het tabblad App-instellingen.
  2. Voer in het veld Naam CACHE_DRIVER in.
  3. Voer in het veld Waarderedis in.
  4. 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):

  1. Start een nieuwe chatsessie door de chatweergave te selecteren en vervolgens te selecteren +.
  2. 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.
  3. 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 .
  4. Open config/database.php in de verkenner en voeg de codesuggesties toe.
  5. 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.
  6. 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):

  1. Open config/database.php in de verkenner. Zoek de mysql sectie en breng de volgende wijzigingen aan:
  2. Vervang DB_HOST (regel 49) door AZURE_MYSQL_HOST.
  3. Vervang DB_DATABASE (regel 51) door AZURE_MYSQL_DBNAME.
  4. Vervang DB_USERNAME (regel 52) door AZURE_MYSQL_USERNAME.
  5. Vervang DB_PASSWORD (lijn 53) door AZURE_MYSQL_PASSWORD.
  6. Vervang DB_PORT (regel 50) door AZURE_MYSQL_PORT.
  7. Schuif naar de sectie Redis cache en breng de volgende wijzigingen aan:
  8. Vervang REDIS_HOST (regel 142) door AZURE_REDIS_HOST.
  9. Vervang REDIS_PASSWORD (regel 144) door AZURE_REDIS_PASSWORD.
  10. Vervang REDIS_PORT in regel 145 door AZURE_REDIS_PORT.
  11. Vervang REDIS_CACHE_DB (regel 146) door AZURE_REDIS_DATABASE.
  12. 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:

  1. Selecteer de extensie Broncodebeheer .
  2. Typ in het tekstvak een doorvoeringsbericht zoals Configure Azure database and cache connections. Of selecteer en laat GitHub Copilot een doorvoerbericht voor u genereren.
  3. Selecteer Doorvoeren en bevestig met Ja.
  4. Selecteer Wijzigingen synchroniseren 1 en bevestig met OK.

Stap 4: Ga terug naar de pagina Implementatiecentrum in Azure Portal:

  1. Klik op het tabblad Logboeken en klik op Vernieuwen om de nieuwe implementatierun te zien.
  2. 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,

  1. Selecteer Ontwikkelingstools>SSH.
  2. Selecteer Go.

Stap 2: In de SSH-terminal:

  1. Voer cd /home/site/wwwroot uit. Hier zijn al uw geïmplementeerde bestanden.
  2. 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:

  1. Selecteer Configuratie in het linkermenu.
  2. Selecteer het tabblad Algemene instellingen.

Stap 2: Op het tabblad Algemene instellingen:

  1. Voer in het vak Opstartopdracht de volgende opdracht in: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.
  2. 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:

  1. Selecteer Overzicht in het linkermenu.
  2. 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:

  1. Selecteer App Service-logboeken in het linkermenu.
  2. 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:

  1. Voer de naam van de resourcegroup in.
  2. Selecteer de resourcegroep.

Stap 2: In de pagina van de resourcegroep, selecteer 'Verwijder resourcegroep'.

Stap 3:

  1. Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.
  2. 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).

  1. Genereer een Laravel-versleutelingssleutel met php artisan key:generate --show:

    php artisan key:generate --show
    
  2. Meld u aan bij Azure door de azd auth login opdracht uit te voeren en de prompt te volgen:

    azd auth login
    
  3. 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
    
  4. 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.

  1. Zoek in de AZD-uitvoer de app-instellingen die beginnen met AZURE_MYSQL_ en AZURE_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 beginnen AZURE_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.

  2. Open configuratie /database.php vanuit de explorer. Dit is het configuratiebestand voor database- en Redis-cacheverbindingen.

  3. Zoek het deel dat de mysql verbinding definieert (regels 46-64) en vervang DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, en DB_PASSWORD door de AZURE_MYSQL_ app-instellingen uit de AZD-uitvoer. Uw mysql 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.

  4. Zoek het gedeelte dat de Redis-cacheverbinding definieert (regels 140-147) en vervang , REDIS_HOST, REDIS_PASSWORDen REDIS_PORT door REDIS_CACHE_DBde Azure_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

  1. Open infra/resources.bicep vanuit de verkenner. Dit is het Bicep-bestand dat de gemaakte Azure-resources definieert.

  2. 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.
  3. 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.

  4. 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.

  1. 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>
     
  2. 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

  1. 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>
     
  2. Voeg een paar taken toe aan de lijst.

    Een screenshot van de Laravel-webapp met MySQL, die in Azure wordt uitgevoerd en taken toont.

    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?

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:

  1. Roltoewijzing binnen het Key Vault-bereik
  2. Een geheim toevoegen aan Key Vault
  3. Een geheim ophalen uit Key Vault
  4. App-instellingen configureren

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:

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 @workspaceuw 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: