Samouczek: Tworzenie aplikacji PHP (Laravel) i Azure Database for MySQL - Flexible Server w usłudze Azure App Service

Azure App Service zapewnia wysoce skalowalną, samodzielnie aktualizowaną usługę hostingu internetowego działającą w oparciu o system operacyjny Linux. W tym samouczku pokazano, jak utworzyć bezpieczną aplikację PHP w usłudze Azure App Service połączoną z bazą danych MySQL (przy użyciu usługi Azure Database for MySQL — serwer elastyczny). Po zakończeniu będziesz mieć uruchomioną aplikację Laravel w usłudze Azure App Service w systemie Linux.

Zrzut ekranu przedstawiający przykład aplikacji platformy Azure zatytułowany Lista zadań z dodanymi nowymi zadaniami.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Utwórz bezpieczną domyślnie aplikację PHP i MySQL na platformie Azure
  • Konfigurowanie kluczy tajnych połączenia z serwerem MySQL za pomocą ustawień aplikacji
  • Wdrażanie kodu aplikacji przy użyciu funkcji GitHub Actions
  • Aktualizowanie i ponowne wdrażanie aplikacji
  • Bezpieczne uruchamianie migracji bazy danych
  • Strumieniowe przesyłanie dzienników diagnostycznych z platformy Azure
  • Zarządzanie aplikacją w witrynie Azure Portal

Wymagania wstępne

Aplikacja przykładowa

Aby wykonać czynności opisane w tym samouczku, sklonuj lub pobierz przykładową aplikację z repozytorium:

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

Jeśli chcesz uruchomić aplikację lokalnie, wykonaj następujące czynności:

  • W pliku env skonfiguruj ustawienia bazy danych (takie jak DB_DATABASE, DB_USERNAMEi DB_PASSWORD) przy użyciu ustawień w lokalnej bazie danych usługi Azure Database for MySQL — serwer elastyczny. Aby uruchomić ten przykład, potrzebujesz lokalnej instancji serwera Azure Database for MySQL Flexible Server.

  • W katalogu głównym repozytorium uruchom aplikację Laravel przy użyciu następujących poleceń:

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

1 — Tworzenie zasobów usługi App Service i usługi Azure Database for MySQL — serwer elastyczny

W tym kroku utworzysz zasoby platformy Azure. Kroki użyte w tym samouczku umożliwiają utworzenie domyślnie bezpiecznej konfiguracji usługi App Service i serwera elastycznego usługi Azure Database for MySQL. W procesie tworzenia określisz następujące elementy:

  • Nazwa aplikacji internetowej. Jest to nazwa używana jako część nazwy DNS aplikacji internetowej w postaci https://<app-name>.azurewebsites.net.
  • Środowisko uruchomieniowe aplikacji. W tym miejscu wybierasz wersję języka PHP, która ma być używana dla aplikacji.
  • Grupa zasobów dla aplikacji. Grupa zasobów umożliwia grupowanie (w kontenerze logicznym) wszystkich zasobów platformy Azure potrzebnych dla aplikacji.

Zaloguj się do portalu Azure i wykonaj następujące kroki, aby utworzyć zasoby usługi Azure App Service.

Instrukcje Zrzut ekranu
W witrynie Azure Portal:
  1. Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
  2. Wybierz element oznaczony jako Web App + Database pod nagłówkiem Marketplace.
Możesz również przejść bezpośrednio do kreatora tworzenia.
Zrzut ekranu przedstawiający sposób użycia pola wyszukiwania na górnym pasku narzędzi w celu znalezienia kreatora tworzenia aplikacji internetowej i bazy danych.
Na stronie Tworzenie aplikacji internetowej i bazy danych wypełnij formularz w następujący sposób.
  1. Grupa zasobów → wybierz pozycję Utwórz nową i użyj nazwy msdocs-laravel-mysql-tutorial.

  2. Region → dowolny region świadczenia usługi Azure w pobliżu.

  3. Nazwamsdocs-laravel-mysql-XYZ, gdzie XYZ to dowolne trzy losowe znaki. Ta nazwa musi być unikatowa w obrębie całej platformy Azure.

  4. Stos uruchomieniowyPHP 8.0.

    MySQL — serwer elastyczny jest domyślnie wybrany jako mechanizm bazy danych. Usługa Azure Database for MySQL to w pełni zarządzana baza danych MySQL jako usługa na platformie Azure, zgodna z najnowszymi edycjami społecznościowymi.

  5. Zanotuj nazwę bazy danych wygenerowaną dla ciebie (<app-name>-database). Będziesz jej potrzebować później.

  6. Wybierz pozycję Przejrzyj i utwórz.

Po zakończeniu walidacji wybierz pozycję Utwórz.
Zrzut ekranu przedstawiający sposób konfigurowania nowej aplikacji i bazy danych w kreatorze Aplikacji internetowej i bazy danych.
Wdrożenie trwa kilka minut i tworzy następujące zasoby:
  • Grupa zasobów → kontener dla wszystkich utworzonych zasobów.
  • Plan usługi App Service → Definiuje zasoby obliczeniowe dla usługi App Service. Zostanie utworzony plan systemu Linux w warstwie P1v2 .
  • Usługa App Service → reprezentuje aplikację i działa w planie usługi App Service.
  • Sieć wirtualna → zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
  • Azure Database for MySQL — serwer elastyczny → dostępny tylko z sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
  • Prywatna strefa DNS → Umożliwia rozwiązywanie nazw DNS serwera bazy danych MySQL w sieci wirtualnej.
Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Nastąpi bezpośrednie przejście do aplikacji usługi App Service.
Zrzut ekranu przedstawiający formularz do wypełnienia w celu utworzenia aplikacji internetowej na platformie Azure.

2 — Konfigurowanie łączności z bazą danych

Kreator wygenerował ustawienia aplikacji, których możesz użyć do połączenia z bazą danych, ale jeszcze nie w formacie, którego można użyć w kodzie. W tym kroku edytujesz i zaktualizujesz ustawienia aplikacji do formatu wymaganego przez aplikację.

Instrukcje Zrzut ekranu
Na stronie App Service w menu po lewej stronie wybierz pozycję Konfiguracja. Zrzut ekranu przedstawiający sposób otwierania strony konfiguracji w usłudze App Service.
Na karcie Ustawienia aplikacji na stronie Konfiguracja dla każdego z następujących ustawień wybierz pozycję Edytuj, zaktualizuj pole Nazwa nowymi wartościami i wybierz przycisk OK.
Bieżąca nazwa Nowa nazwa
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
Zrzut ekranu przedstawiający, jak wyświetlić automatycznie wygenerowany parametr połączenia.
Utwórz nowe MYSQL_ATTR_SSL_CA ustawienie bazy danych:
  1. Wybierz pozycję Nowe ustawienie aplikacji.

  2. W polu Nazwa wprowadź MYSQL_ATTR_SSL_CA.

  3. W polu Wartość wprowadź ciąg /home/site/wwwroot/ssl/DigiCertGlobalRootG2.crt.pem.

    To ustawienie aplikacji wskazuje ścieżkę certyfikatu TLS/SSL potrzebnego do uzyskania dostępu do serwera MySQL. Dla wygody przykładowe repozytorium zawiera ten certyfikat.

  4. Wybierz przycisk OK.

Zrzut ekranu przedstawiający sposób tworzenia ustawienia aplikacji.
Utwórz następujące dodatkowe ustawienia aplikacji, wykonując te same kroki, a następnie wybierz pozycję Zapisz.
  • APP_DEBUG: Użyj wartości true. Jest to zmienna debugowania platformy Laravel.

  • APP_KEY: Użyj base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= jako wartości. Jest to zmienna szyfrowania Laravel.

    Ważne

    Ta APP_KEY wartość jest używana tutaj dla wygody. W przypadku środowisk produkcyjnych należy wygenerować je specjalnie dla danego wdrożenia za pomocą polecenia php artisan key:generate --show w wierszu polecenia.

Zrzut ekranu przedstawiający wszystkie wymagane ustawienia aplikacji na stronie konfiguracji.

3 — Wdrażanie przykładowego kodu

W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu funkcji GitHub Actions. To tylko jeden z wielu sposobów wdrażania do usługi App Service, ale także świetny sposób na wprowadzenie ciągłej integracji do procesu wdrażania. Domyślnie każde git push do Twojego repozytorium GitHub uruchomi akcję kompilacji i wdrażania. Wprowadzisz pewne zmiany w bazie kodu za pomocą programu Visual Studio Code bezpośrednio w przeglądarce, a następnie zezwolisz na automatyczne wdrażanie funkcji GitHub Actions.

Instrukcje Zrzut ekranu
W nowym oknie przeglądarki:
  1. Zaloguj się na istniejącym koncie GitHub.

  2. Przejdź do https://github.com/Azure-Samples/laravel-tasks.

  3. Wybierz Fork.

  4. Wybierz Utwórz odgałęzienie.

Zrzut ekranu przedstawiający sposób tworzenia rozwidlenia przykładowego repozytorium GitHub.
Na stronie GitHub otwórz program Visual Studio Code w przeglądarce, naciskając . . Zrzut ekranu przedstawiający sposób otwierania środowiska przeglądarki programu Visual Studio Code w usłudze GitHub.
W programie Visual Studio Code w przeglądarce otwórz plik config/database.php w eksploratorze. W połączeniu mysql sprawdź, czy ustawienia aplikacji utworzone wcześniej dla połączenia MySQL są już używane (DB_HOST, DB_DATABASE, , DB_USERNAMEDB_PASSWORD, ). MYSQL_ATTR_SSL_CA Zrzut ekranu przedstawiający program Visual Studio Code w przeglądarce i otwarty plik.
Po powrocie do strony usługi App Service w menu po lewej stronie wybierz pozycję Centrum wdrażania. Zrzut ekranu przedstawiający sposób otwierania centrum wdrażania w usłudze App Service.
Na stronie Centrum wdrażania:
  1. W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.

  2. Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.

  3. W obszarze Organizacja wybierz swoje konto.

  4. W sekcji Repozytorium wybierz laravel-tasks.

  5. W obszarze Gałąź wybierz pozycję main.

  6. W górnym menu wybierz pozycję Zapisz.

Usługa App Service dodaje plik przepływu pracy do wybranego repozytorium GitHub w katalogu .github/workflows.
Zrzut ekranu pokazujący, jak skonfigurować CI/CD za pomocą GitHub Actions.
Na stronie Centrum wdrażania:
  1. Wybierz pozycję Dzienniki. Uruchomienie wdrożenia zostało już rozpoczęte.

  2. W elemencie dziennika dla przebiegu wdrożenia wybierz pozycję Kompiluj/Wdróż dzienniki.

    Zostaniesz przeniesiony do swojego repozytorium w serwisie GitHub i zobaczysz, że GitHub Actions jest uruchomione. Plik przepływu pracy definiuje dwa oddzielne etapy, kompilowanie i wdrażanie.

Zrzut ekranu przedstawiający sposób otwierania dzienników wdrażania w centrum wdrażania.
Aby wprowadzić zmiany w kodzie, przejdź do programu Visual Studio Code w przeglądarce:
  1. Wybierz rozszerzenie Kontrola źródła.

  2. Obok zmienionego pliku, na przykład database.php, wybierz + , aby przygotować zmiany.

  3. W polu tekstowym wpisz komunikat zatwierdzenia, na przykład add certificate.

  4. Kliknij znak wyboru, aby zatwierdzić i przesłać zmiany do serwisu GitHub.

Jeśli wrócisz do strony Centrum wdrażania, zobaczysz nowy wpis dziennika, ponieważ zostało uruchomione kolejne uruchomienie. Poczekaj na zakończenie uruchomienia. Trwa to około 15 minut.

Wskazówka

Akcja usługi GitHub jest definiowana przez plik w repozytorium GitHub w witrynie .github/workflow. Możesz to przyspieszyć, dostosowując plik.

Zrzut ekranu przedstawiający sposób zatwierdzania zmian w środowisku przeglądarki programu Visual Studio Code.

4 — Generowanie schematu bazy danych

Kreator tworzenia umieszcza elastyczne wystąpienie serwera Azure Database for MySQL za prywatnym punktem końcowym, dzięki czemu jest dostępne tylko z sieci wirtualnej. Ponieważ aplikacja usługi App Service jest już zintegrowana z siecią wirtualną, najprostszym sposobem uruchamiania migracji baz danych z bazą danych jest bezpośrednio z poziomu kontenera usługi App Service.

Instrukcje Zrzut ekranu
Na stronie App Service:
  1. Z menu po lewej stronie wybierz pozycję SSH.

  2. Wybierz Przejdź.

Sesja SSH z kontenerem usługi App Service jest otwarta w przeglądarce. Jeśli chcesz, możesz zamiast tego przejść bezpośrednio do https://<app-name>.scm.azurewebsites.net/webssh/host.
Zrzut ekranu pokazujący, jak otworzyć powłokę SSH dla swojej aplikacji z poziomu portalu Azure.
W terminalu SSH:
  1. Przejdź poleceniem `cd` do katalogu głównego kodu aplikacji:

    cd /home/site/wwwroot
    
  2. Uruchom migracje bazy danych z katalogu głównego aplikacji.

    php artisan migrate --force
    

    Uwaga

    Tylko zmiany w plikach znajdujących się w /home mogą przetrwać po ponownym uruchomieniu aplikacji. Zmiany poza programem /home nie są utrwalane.

Zrzut ekranu przedstawiający polecenia uruchamiane w powłoce SSH i ich dane wyjściowe.

5 - Zmień katalog główny witryny

Zamiast tego cykl życia aplikacji Laravel rozpoczyna się w katalogu /public . Domyślny kontener PHP 8.0 dla usługi App Service używa serwera Nginx, który rozpoczyna się w katalogu głównym aplikacji. Aby zmienić katalog główny witryny, musisz zmienić plik konfiguracji serwera Nginx w kontenerze PHP 8.0 (/etc/nginx/sites-available/default). Dla wygody przykładowe repozytorium zawiera niestandardowy plik konfiguracji o nazwie default. Jak wspomniano wcześniej, nie chcesz zastępować tego pliku przy użyciu powłoki SSH, ponieważ zmiany zostaną utracone po ponownym uruchomieniu aplikacji.

Instrukcje Zrzut ekranu
Na stronie App Service:
  1. W menu po lewej stronie wybierz pozycję Konfiguracja.

  2. Wybierz kartę Ustawienia Ogólne.

Zrzut ekranu przedstawiający sposób otwierania karty ustawienia ogólne na stronie konfiguracji usługi App Service.
Na karcie Ustawienia ogólne:
  1. W polu Polecenie uruchamiania wprowadź następujące polecenie: cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload.

    Zastępuje on plik konfiguracji Nginx w kontenerze PHP 8.0 i ponownie uruchamia serwer Nginx. Ta konfiguracja gwarantuje, że ta zmiana zostanie wprowadzona do kontenera przy każdym uruchomieniu.

  2. Wybierz pozycję Zapisz.

Zrzut ekranu przedstawiający sposób konfigurowania polecenia uruchamiania w usłudze App Service.

6 — Przechodzenie do aplikacji

Instrukcje Zrzut ekranu
Na stronie App Service:
  1. W menu po lewej stronie wybierz pozycję Przegląd.

  2. Wybierz adres URL aplikacji.

    Możesz również przejść bezpośrednio do https://<app-name>.azurewebsites.net.

Zrzut ekranu przedstawiający sposób uruchamiania usługi App Service w witrynie Azure Portal.
Dodaj kilka zadań do listy. Gratulacje, uruchamiasz aplikację PHP opartą na danych w usłudze Azure App Service. Zrzut ekranu przedstawiający aplikację Laravel działającą w usłudze App Service.

7 - Przesyłanie dzienników diagnostycznych strumieniowo

Instrukcje Zrzut ekranu
Na stronie App Service:
  1. W menu po lewej stronie wybierz pozycję Dzienniki usługi App Service.

  2. W sekcji Rejestrowanie aplikacji wybierz pozycję System plików.

Zrzut ekranu przedstawiający sposób włączania dzienników natywnych w usłudze App Service w witrynie Azure Portal.
W menu po lewej stronie wybierz pozycję Strumień dzienników. Zostaną wyświetlone dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wnętrza kontenera. Zrzut ekranu przedstawiający sposób wyświetlania strumienia dziennika w witrynie Azure Portal.

Czyszczenie zasobów

Po zakończeniu możesz usunąć wszystkie zasoby z subskrypcji platformy Azure, usuwając grupę zasobów.

Instrukcje Zrzut ekranu
Na pasku wyszukiwania w górnej części witryny Azure Portal:
  1. Wpisz nazwę grupy zasobów.

  2. Wybierz odpowiednią grupę zasobów.

Zrzut ekranu przedstawiający wyszukiwanie i przechodzenie do grupy zasobów w witrynie Azure Portal.
Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów. Zrzut ekranu przedstawiający lokalizację przycisku Usuń grupę zasobów w witrynie Azure Portal.
  1. Wprowadź nazwę grupy zasobów, aby potwierdzić usunięcie.

  2. Wybierz Usuń.

Zrzut ekranu przedstawiający okno dialogowe potwierdzenia dotyczące usuwania grupy zasobów w witrynie Azure Portal.

Często zadawane pytania

Ile kosztuje ta konfiguracja?

Ceny zasobów tworzonych są następujące:

  • Plan usługi App Service jest tworzony w warstwie Premium V2 i można go skalować w górę lub w dół. Zobacz Cennik usługi App Service.
  • Instancja Azure Database for MySQL serwera elastycznego jest tworzona w warstwie B1ms i można ją skalować w górę lub w dół. W przypadku bezpłatnego konta platformy Azure warstwa B1ms jest bezpłatna przez 12 miesięcy, do miesięcznych limitów. Zobacz Cennik serwera elastycznego usługi Azure Database for MySQL.
  • Sieć wirtualna nie wiąże się z opłatami, chyba że skonfigurujesz dodatkowe funkcje, takie jak peering. Zobacz Cennik usługi Azure Virtual Network.
  • Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.

Jak nawiązać połączenie z bazą danych Azure Database for MySQL Flexible Server, który jest zabezpieczony za pomocą sieci wirtualnej?

Aby nawiązać połączenie z bazą danych usługi Azure Database for MySQL Flexible Server, możesz użyć kilku metod opartych na narzędziach i środowiskach, którymi dysponujesz.

  • Dostęp do narzędzia wiersza polecenia:
    • mysql Użyj polecenia z poziomu terminalu SSH aplikacji, aby uzyskać dostęp podstawowy.
  • Narzędzia klasyczne (na przykład MySQL Workbench):
    • Korzystanie z tunelowania SSH za pomocą interfejsu wiersza polecenia platformy Azure:
      • Nawiąż sesję SSH session z aplikacją internetową za pomocą interfejsu wiersza polecenia platformy Azure.
      • Użyj sesji SSH, aby tunelować ruch do programu MySQL.
    • Korzystanie z sieci VPN typu lokacja-lokacja lub maszyny wirtualnej Azure:
      • Maszyna musi być częścią sieci wirtualnej.
      • Rozważ użycie:
        • Maszyna wirtualna platformy Azure połączona z jedną z podsieci.
        • Maszyna w sieci lokalnej, która ma połączenie sieci VPN typu lokacja-lokacja z siecią wirtualną platformy Azure.
  • Integracja usługi Azure Cloud Shell:

W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?

Biorąc jako przykład automatycznie wygenerowany plik przepływu pracy z usługi App Service, każdy element git push rozpoczyna nowe uruchomienie kompilacji i wdrożenia. Z lokalnego klonu repozytorium GitHub wprowadzasz potrzebne zmiany i wypychasz je do GitHub. Na przykład:

git add .
git commit -m "<some-message>"
git push origin main

Dlaczego wdrożenie funkcji GitHub Actions jest tak powolne?

Automatycznie wygenerowany przez usługę App Service plik przepływu pracy definiuje dwuzadaniowe uruchomienie typu build-then-deploy. Ponieważ każde zadanie działa we własnym czystym środowisku, plik przepływu pracy zapewnia, że zadanie deploy ma dostęp do plików z zadania build:

Większość czasu zajmowanego przez proces składający się z dwóch zadań przypada na przesyłanie i pobieranie artefaktów. Jeśli chcesz, możesz uprościć plik workflow, łącząc te dwa zadania w jedno, dzięki czemu nie będą potrzebne kroki przesyłania i pobierania.

Podsumowanie

W tym samouczku zawarto informacje na temat wykonywania następujących czynności:

  • Tworzenie aplikacji PHP z domyślnie zabezpieczoną bazą danych Azure Database for MySQL Flexible Server w Azure
  • Konfigurowanie tajnych danych połączenia z usługą Azure Database for MySQL Flexible Server przy użyciu ustawień aplikacji
  • Wdrażanie kodu aplikacji przy użyciu funkcji GitHub Actions
  • Aktualizowanie i ponowne wdrażanie aplikacji
  • Bezpieczne uruchamianie migracji bazy danych
  • Strumieniowe przesyłanie dzienników diagnostycznych z platformy Azure
  • Zarządzanie aplikacją w witrynie Azure Portal