Share via


Zelfstudie: Een PHP-app (Laravel) en Azure Database for MySQL - Flexible Server bouwen op Azure-app Service

VAN TOEPASSING OP: Azure Database for MySQL - Flexibele server

Azure App Service biedt een uiterst schaalbare webhostingservice met self-patchfunctie via het Linux-besturingssysteem. Deze zelfstudie laat zien hoe u een beveiligde PHP-app maakt in Azure-app Service die is verbonden met een MySQL-database (met behulp van een flexibele Azure Database for MySQL-server). 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.

In deze zelfstudie leert u het volgende:

  • Een secure-by-default PHP- en MySQL-app maken in Azure
  • Verbindingsgeheimen met MySQL configureren met behulp van app-instellingen
  • Toepassingscode implementeren met Behulp van GitHub Actions
  • De app bijwerken en opnieuw implementeren
  • Databasemigraties veilig uitvoeren
  • Logboeken met diagnostische gegevens vanaf Azure streamen
  • De app in Azure Portal beheren

Vereisten

Voorbeeldtoepassing

Als u deze zelfstudie wilt volgen, kloont of downloadt u de voorbeeldtoepassing uit de opslagplaats:

git clone https://github.com/Azure-Samples/laravel-tasks.git

Ga als volgt te werk als u de toepassing lokaal wilt uitvoeren:

  • Configureer in .env de database-instellingen (zoals DB_DATABASE, DB_USERNAMEen DB_PASSWORD) met behulp van instellingen in uw lokale flexibele Azure Database for MySQL-serverdatabase. U hebt een lokaal exemplaar van een flexibele Azure Database for MySQL-server nodig om dit voorbeeld uit te voeren.

  • Start Laravel vanuit de hoofdmap van de opslagplaats met de volgende opdrachten:

    composer install
    php artisan migrate
    php artisan key:generate
    php artisan serve
    

1 - Flexibele Server-resources voor App Service en Azure Database for MySQL maken

In deze stap maakt u de Azure-resources. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een App Service- en Azure Database for MySQL-configuratie voor flexibele servers die standaard beveiligd zijn. Voor het aanmaakproces geeft u het volgende op:

  • De naam voor de web-app. Dit is de naam die wordt gebruikt als onderdeel van de DNS-naam voor uw web-app in de vorm van https://<app-name>.azurewebsites.net.
  • De runtime voor de app. Hier selecteert u de versie van PHP die u voor uw app wilt gebruiken.
  • 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.

Instructies Schermafbeelding
In Azure Portal:
  1. Voer 'web-app-database' in de zoekbalk boven aan Azure Portal in.
  2. Selecteer het item met het label Web App + Database onder de kop Marketplace .
U kunt ook rechtstreeks naar de wizard voor het maken navigeren.
Een schermopname die laat zien hoe u het zoekvak in de bovenste werkbalk gebruikt om de wizard Web-app en database maken te vinden.
Vul op de pagina Web-app en database maken het formulier als volgt in.
  1. Resourcegroep → Nieuwe maken selecteren en een naam van msdocs-laravel-mysql-tutorial gebruiken.

  2. Regio → Elke Azure-regio bij u in de buurt.

  3. Naammsdocs-laravel-mysql-XYZ waarbij XYZ uit drie willekeurige tekens bestaat. Deze naam moet uniek zijn binnen Azure.

  4. RuntimestackPHP 8.0.

    MySQL - Flexible Server is standaard voor u geselecteerd als database-engine. Azure Database for MySQL is een volledig beheerde MySQL-database als een service in Azure, die compatibel is met de nieuwste community-edities.

  5. Noteer de databasenaam die voor u wordt gegenereerd (<app-naam-database>). U hebt deze later nodig.

  6. Klik op Controleren + maken.

Nadat de validatie is voltooid, klikt u op Maken.
Een schermopname die laat zien hoe u een nieuwe app en database configureert in de wizard Web App + Database.
Het uitvoeren van de implementatie duurt enkele minuten en maakt de volgende resources:
  • Resourcegroep → De container voor alle gemaakte resources.
  • App Service-plan → Definieert de rekenresources voor App Service. Er wordt een Linux-plan in de P1v2-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. Er worden een database en een gebruiker voor u gemaakt op de server.
  • Privé-DNS zone → Maakt DNS-omzetting van de MySQL-databaseserver in het virtuele netwerk mogelijk.
Zodra de implementatie is voltooid, klikt u op de knop Naar de resource gaan. U wordt rechtstreeks naar de App Service-app gebracht.
Een schermopname van het formulier dat moet worden ingevuld om een web-app te maken in Azure.

2 - Databaseconnectiviteit instellen

De wizard maken heeft app-instellingen gegenereerd die u kunt gebruiken om verbinding te maken met de database, maar niet in een indeling die nog kan worden gebruikt voor uw code. In deze stap bewerkt en werkt u app-instellingen bij naar de indeling die uw app nodig heeft.

Instructies Schermafbeelding
Selecteer Configuratie in het linkermenu op de pagina App Service. Een schermopname van het openen van de configuratiepagina in App Service.
Klik op het tabblad Toepassingsinstellingen van de pagina Configuratie voor elk van de volgende instellingen op Bewerken, werk het veld Naam bij met nieuwe waarden en klik op OK.
Huidige naam Nieuwe naam
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
Een schermopname die laat zien hoe u de automatisch gegenereerde verbindingsreeks ziet.
Maak een nieuwe MYSQL_ATTR_SSL_CA database-instelling:
  1. Klik op Nieuwe toepassingsinstelling.

  2. Voer in het veld Naam MYSQL_ATTR_SSL_CA in.

  3. Voer in het veld Waarde /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem in.

    Deze app-instelling verwijst naar het pad van het TLS/SSL-certificaat dat u nodig hebt voor toegang tot de MySQL-server. Deze is voor het gemak opgenomen in de voorbeeldopslagplaats.

  4. Klik op OK.

Een schermopname die laat zien hoe u een app-instelling maakt.
Maak de volgende extra app-instellingen door dezelfde stappen te volgen en klik vervolgens op Opslaan.
  • APP_DEBUG: Gebruik waar als waarde. Dit is een Laravel-foutopsporingsvariabele.

  • APP_KEY: Gebruik base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= als de waarde. Dit is een Laravel-versleutelingsvariabele.

    Belangrijk

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

Een schermopname met alle vereiste app-instellingen op de configuratiepagina.

3 - 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 wordt met elke git push gitHub-opslagplaats de build- en implementatieactie gestart. U gaat enkele wijzigingen aanbrengen in uw codebase met Visual Studio Code rechtstreeks in de browser, waarna GitHub Actions automatisch voor u kan worden geïmplementeerd.

Instructies Schermafbeelding
In een nieuw browservenster:
  1. Meld u aan bij uw GitHub-account.

  2. Navigeer naar https://github.com/Azure-Samples/laravel-tasks.

  3. Klik op Fork.

  4. Klik op Fork maken.

Een schermopname van het maken van een fork van de GitHub-voorbeeldopslagplaats.
Open Visual Studio Code op de GitHub-pagina in de browser door op de . toets te drukken. Een schermopname van het openen van de Visual Studio Code-browserervaring in GitHub.
Open in Visual Studio Code in de browser configuratie/database.php in de verkenner. In de mysql verbinding ziet u dat de app-instellingen die u eerder hebt gemaakt voor de MySQL-verbinding al worden gebruikt (DB_HOST, DB_DATABASEDB_USERNAME, , DB_PASSWORD, ). MYSQL_ATTR_SSL_CA Een schermopname van Visual Studio Code in de browser en een geopend bestand.
Selecteer Implementatiecentrum in het linkermenu op de pagina App Service. Een schermopname die laat zien hoe u het implementatiecentrum opent in App Service.
Op de pagina Implementatiecentrum:
  1. Selecteer GitHub in Bron. GitHub Actions is standaard geselecteerd als buildprovider.

  2. Meld u aan bij uw GitHub-account en volg de prompt om Azure te autoriseren.

  3. Selecteer uw account in Organisatie.

  4. Selecteer laravel-tasks in opslagplaats.

  5. Selecteer in Vertakking de hoofdmap.

  6. Klik in het bovenste menu op Opslaan.

App Service voert een werkstroombestand door in de geselecteerde GitHub-opslagplaats, in de .github/workflows map.
Een schermopname van het configureren van CI/CD met behulp van GitHub Actions.
Op de pagina Implementatiecentrum:
  1. Selecteer Logboeken. Er is al een implementatieuitvoering gestart.

  2. Selecteer build-/deploy-logboeken in het logboekitem voor de implementatieuitvoering.

    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.

Een schermopname die laat zien hoe u implementatielogboeken opent in het implementatiecentrum.
Als u wijzigingen in uw code wilt aanbrengen, gaat u naar Visual Studio Code in de browser:
  1. Selecteer de extensie Broncodebeheer .

  2. Selecteer naast het gewijzigde bestand, bijvoorbeeld database.php, + om de wijzigingen in een fase te plaatsen.

  3. Typ in het tekstvak bijvoorbeeld een doorvoerbericht add certificate.

  4. Selecteer het vinkje om door te voeren en naar GitHub te pushen.

Als u teruggaat naar de pagina Implementatiecentrum, ziet u een nieuwe logboekvermelding omdat er een andere uitvoering is gestart. Wacht totdat de uitvoering is voltooid. Het duurt ongeveer 15 minuten.

Tip

De GitHub-actie wordt gedefinieerd door het bestand in uw GitHub-opslagplaats, in .github/workflow. U kunt het sneller maken door het bestand aan te passen.

Een schermopname die laat zien hoe u uw wijzigingen doorvoert in de browserervaring van Visual Studio Code.

4 - Databaseschema genereren

Met de wizard Maken wordt het exemplaar van de flexibele Azure Database for MySQL-server achter een privé-eindpunt opgeslagen, zodat 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.

Instructies Schermafbeelding
Op de App Service-pagina:
  1. Selecteer SSH in het linkermenu.

  2. Selecteer Go.

Er wordt een SSH-sessie met uw App Service-container geopend in de browser. Als u wilt, kunt u rechtstreeks naartoe https://<app-name>.scm.azurewebsites.net/webssh/host navigeren.
Een schermopname van het openen van de SSH-shell voor uw app vanuit Azure Portal.
In de SSH-terminal:
  1. Cd naar de hoofdmap van uw toepassingscode:

    cd /home/site/wwwroot
    
  2. Voer databasemigraties uit vanuit de hoofdmap van uw toepassing.

    php artisan migrate --force
    

    Notitie

    Alleen wijzigingen in bestanden in /home kunnen zich blijven voordoen na het opnieuw opstarten van de app. Wijzigingen buiten /home worden niet behouden.

Een schermopname van de opdrachten die moeten worden uitgevoerd in de SSH-shell en de bijbehorende uitvoer.

5 - Hoofdmap van site wijzigen

De levenscyclus van laravel-toepassingen begint in plaats daarvan in de /public directory. De standaard PHP 8.0-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 8.0-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 de SSH-shell, omdat uw wijzigingen verloren gaan nadat de app opnieuw is opgestart.

Instructies Schermafbeelding
Op de App Service-pagina:
  1. Selecteer Configuratie in het linkermenu.

  2. Selecteer het tabblad Algemene instellingen.

Een schermopname van het openen van het tabblad Algemene instellingen op de configuratiepagina van App Service.
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.

    Het vervangt het Nginx-configuratiebestand in de PHP 8.0-container en start Nginx opnieuw op. Deze configuratie zorgt ervoor dat deze wijziging wordt aangebracht in de container telkens wanneer deze wordt gestart.

  2. Selecteer Opslaan.

Een schermopname die laat zien hoe u een opstartopdracht configureert in App Service.

6 - Blader naar de app

Instructies Schermafbeelding
Op de App Service-pagina:
  1. Selecteer Overzicht in het linkermenu.

  2. Selecteer de URL van uw app.

    U kunt ook rechtstreeks naar https://<app-name>.azurewebsites.net.

Een schermopname die laat zien hoe u een App Service start vanuit Azure Portal.
Voeg een paar taken toe aan de lijst. Gefeliciteerd, u voert een gegevensgestuurde PHP-app uit in Azure-app Service. Een schermopname van de Laravel-app die wordt uitgevoerd in App Service.

7 - Diagnostische logboeken streamen

Instructies Schermafbeelding
Op de App Service-pagina:
  1. Selecteer App Service-logboeken in het linkermenu.

  2. Selecteer Bestandssysteem onder Toepassingslogboek.

Een schermopname van het inschakelen van systeemeigen logboeken in App Service in Azure Portal.
Klik in het linkermenu op Logboekstream. U ziet de logboeken voor uw app, inclusief platformlogboeken en logboeken vanuit de container. Een schermopname die laat zien hoe u de logboekstream kunt weergeven in Azure Portal.

Resources opschonen

Wanneer u klaar bent, kunt u alle resources uit uw Azure-abonnement verwijderen door de resourcegroep te verwijderen.

Instructies Schermafbeelding
In de zoekbalk boven aan Azure Portal:
  1. Voer de naam van de resourcegroup in.

  2. Selecteer de resourcegroep.

Een schermopname van het zoeken naar en navigeren naar een resourcegroep in Azure Portal.
Klik in de pagina van de resourcegroep op Resourcegroep verwijderen. Een schermopname van de locatie van de knop Resourcegroep verwijderen in Azure Portal.
  1. Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.

  2. Klik op Verwijderen.

Een schermopname van het bevestigingsvenster voor het verwijderen van een resourcegroep in Azure Portal.

Veelgestelde vragen

Hoeveel kost dit instellen?

De prijzen voor het maken van resources zijn als volgt:

  • Het App Service-plan wordt gemaakt in de Premium V2-laag en kan omhoog of omlaag worden geschaald. Zie Prijzen voor App Service.
  • Het exemplaar van de flexibele Azure Database for 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 prijzen voor flexibele azure Database for MySQL-servers.
  • 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 een flexibele Azure Database for MySQL-serverdatabase die is beveiligd achter een virtueel netwerk?

Als u verbinding wilt maken met een flexibele Azure Database for MySQL-serverdatabase, kunt u verschillende methoden gebruiken op basis van de hulpprogramma's en omgevingen tot uw beschikking:

  • Toegang tot opdrachtregelprogramma's:
    • Gebruik de mysql opdracht vanuit de SSH-terminal van de app voor basistoegang.
  • Bureaubladhulpprogramma's (bijvoorbeeld MySQL Workbench):
    • SSH-tunneling gebruiken met Azure CLI:
      • Maak een SSH-sessie naar de web-app met behulp van de Azure CLI.
      • Gebruik de SSH-sessie om het verkeer naar MySQL te tunnelen.
    • Site-naar-site-VPN of Azure-VM gebruiken:
      • Uw machine moet deel uitmaken van het virtuele netwerk.
      • Overweeg het gebruik van:
        • Een Virtuele Azure-machine die is gekoppeld aan een van de subnetten.
        • Een machine in een on-premises netwerk met een site-naar-site-VPN-verbinding met het virtuele Azure-netwerk.
  • Azure Cloud Shell-integratie:

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 build-then-deploy, two-job run. 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.

Samenvatting

In deze zelfstudie heeft u het volgende geleerd:

  • Een secure-by-default PHP- en Azure Database for MySQL Flexibele server-app maken in Azure
  • Verbindingsgeheimen configureren voor Azure Database for MySQL Flexibele server met behulp van app-instellingen
  • Toepassingscode implementeren met Behulp van GitHub Actions
  • De app bijwerken en opnieuw implementeren
  • Databasemigraties veilig uitvoeren
  • Logboeken met diagnostische gegevens vanaf Azure streamen
  • De app in Azure Portal beheren

Volgende stappen