Udostępnij za pośrednictwem


Samouczek: wdrażanie aplikacji PHP, MySQL i Redis w usłudze aplikacja systemu Azure

W tym samouczku pokazano, jak utworzyć bezpieczną aplikację PHP w usłudze aplikacja systemu Azure, która jest połączona z bazą danych MySQL (przy użyciu elastycznego serwera usługi Azure Database for MySQL). Wdrożysz również usługę Azure Cache for Redis, aby włączyć kod buforowania w aplikacji. aplikacja systemu Azure Service to wysoce skalowalna, samoobsługowa usługa hostingu sieci Web, która może łatwo wdrażać aplikacje w systemie Windows lub Linux. Po zakończeniu będziesz mieć aplikację Platformy Laravel działającą w usłudze aplikacja systemu Azure Service w systemie Linux.

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

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Aplikacja przykładowa

Aby wykonać czynności opisane w tym samouczku, sklonuj lub pobierz przykładową aplikację Laravel 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 (na przykład DB_DATABASE, DB_USERNAMEi DB_PASSWORD) przy użyciu ustawień w lokalnej bazie danych MySQL. Do uruchomienia tego przykładu potrzebny jest lokalny serwer MySQL.

  • 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 mySQL

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 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 witryny Azure Portal i wykonaj następujące kroki, aby utworzyć zasoby usługi aplikacja systemu Azure.

Krok 1. 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 z etykietą Web App + Database w obszarze nagłówka 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.

Krok 2. 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 jest dowolnymi trzema losowymi znakami. Ta nazwa musi być unikatowa w obrębie całej platformy Azure.
  4. Stos środowiska uruchomieniowego → PHP 8.2.
  5. Czy dodać usługę Azure Cache for Redis? → Tak.
  6. Plan hostinguPodstawowa. Gdy wszystko będzie gotowe, możesz później skalować w górę do warstwy cenowej produkcyjnej.
  7. MySQL — serwer elastyczny jest domyślnie wybierany jako aparat 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 wersjami społeczności.
  8. Wybierz pozycję Przejrzyj i utwórz.
  9. 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.

Krok 3. Ukończenie wdrożenia trwa kilka minut. Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Jesteś przekierowany bezpośrednio do aplikacji usługi App Service, ale tworzone są 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 Podstawowa.
  • 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.
  • Prywatne punkty końcowe → punkty końcowe programu Access dla serwera bazy danych i pamięci podręcznej Redis w sieci wirtualnej.
  • Interfejsy sieciowe → Reprezentuje prywatne adresy IP, po jednym dla każdego z prywatnych punktów końcowych.
  • Serwer elastyczny usługi Azure Database for MySQL → dostępny tylko zza jego prywatnego punktu końcowego. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
  • Usługa Azure Cache for Redis → dostępna tylko zza prywatnego punktu końcowego.
  • Prywatna strefa DNS stref → włącz rozpoznawanie nazw DNS serwera bazy danych i pamięci podręcznej Redis w sieci wirtualnej.

Zrzut ekranu przedstawiający ukończony proces wdrażania.

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

Krok 1. Na stronie Usługi App Service w menu po lewej stronie wybierz pozycję Konfiguracja.

Zrzut ekranu przedstawiający sposób otwierania strony konfiguracji w usłudze App Service.

Krok 2:

  1. Znajdź ustawienia aplikacji rozpoczynające się od AZURE_MYSQL_. Zostały one wygenerowane na podstawie nowej bazy danych MySQL przez kreatora tworzenia.
  2. Znajdź również ustawienia aplikacji, które zaczynają się od AZURE_REDIS_. Zostały one wygenerowane na podstawie nowej pamięci podręcznej Redis cache przez kreatora tworzenia. Aby skonfigurować aplikację, ta nazwa jest potrzebna.
  3. Jeśli chcesz, możesz wybrać przycisk Edytuj po prawej stronie każdego ustawienia i wyświetlić lub skopiować jego wartość. Później zmienisz kod aplikacji, aby używał tych ustawień.

Zrzut ekranu przedstawiający sposób tworzenia ustawienia aplikacji.

Krok 3. Na karcie Ustawienia aplikacji na stronie Konfiguracja utwórz CACHE_DRIVER ustawienie:

  1. Wybierz pozycję Nowe ustawienie aplikacji.
  2. W polu Nazwa wprowadź CACHE_DRIVER.
  3. W polu Wartość wprowadź wartość redis.
  4. Wybierz przycisk OK. CACHE_DRIVER jest już używany w kodzie aplikacji Laravel. To ustawienie informuje platformę Laravel o użyciu usługi Redis jako pamięci podręcznej.

Zrzut ekranu przedstawiający sposób wyświetlania automatycznie wygenerowanych parametry połączenia.

Krok 4. Wykonanie tych samych kroków w kroku 3 umożliwia utworzenie następujących ustawień aplikacji:

  • MYSQL_ATTR_SSL_CA: użyj /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem jako wartości. To ustawienie aplikacji wskazuje ścieżkę certyfikatu TLS/SSL potrzebnego do uzyskania dostępu do serwera MySQL. Jest on dołączony do przykładowego repozytorium dla wygody.
  • LOG_CHANNEL: użyj metody stderr jako wartości. To ustawienie informuje platformę Laravel o potoku dzienników do narzędzia stderr, który udostępnia dzienniki usługi App Service.
  • APP_DEBUG: użyj wartości true. Jest to zmienna debugowania Platformy Laravel, która umożliwia strony trybu debugowania.
  • APP_KEY: użyj wartości base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= jako wartości. Jest to zmienna szyfrowania Laravel.
  1. Na pasku menu u góry wybierz pozycję Zapisz.
  2. Po wyświetleniu monitu wybierz pozycję Kontynuuj.

Zrzut ekranu przedstawiający sposób zapisywania ustawień na stronie konfiguracji.

Ważne

Wartość APP_KEY jest używana tutaj dla wygody. W przypadku scenariuszy produkcyjnych należy je wygenerować specjalnie dla wdrożenia przy użyciu php artisan key:generate --show polecenia w wierszu polecenia.

3 — Wdrażanie przykładowego kodu

W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu funkcji GitHub Actions. Jest to tylko jeden z wielu sposobów wdrażania w usłudze App Service, ale także doskonały sposób ciągłej integracji w procesie wdrażania. Domyślnie każde git push repozytorium GitHub rozpoczyna 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.

Krok 1. 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 pozycję Rozwidlenie.
  4. Wybierz pozycję Utwórz rozwidlenie.

Zrzut ekranu przedstawiający sposób tworzenia rozwidlenia przykładowego repozytorium GitHub.

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

Krok 3. W programie Visual Studio Code w przeglądarce otwórz plik config/database.php w eksploratorze. Znajdź sekcję mysql i wprowadź następujące zmiany:

  1. Zamień DB_HOST na AZURE_MYSQL_HOST.
  2. Zamień DB_DATABASE na AZURE_MYSQL_DBNAME.
  3. Zamień DB_USERNAME na AZURE_MYSQL_USERNAME.
  4. Zamień DB_PASSWORD na AZURE_MYSQL_PASSWORD.
  5. Zamień DB_PORT na AZURE_MYSQL_PORT. Pamiętaj, że te AZURE_MYSQL_ ustawienia zostały utworzone przez kreatora tworzenia.

Zrzut ekranu przedstawiający program Visual Studio Code w przeglądarce i otwarty plik ze zmodyfikowanymi zmiennymi MySQL.

Krok 4. W konfiguracji/database.php przewiń do sekcji Redis cache i wprowadź następujące zmiany:

  1. Zamień REDIS_HOST na AZURE_REDIS_HOST.
  2. Zamień REDIS_PASSWORD na AZURE_REDIS_PASSWORD.
  3. Zamień REDIS_PORT na AZURE_REDIS_PORT.
  4. Zamień REDIS_CACHE_DB na AZURE_REDIS_DATABASE.
  5. W tej samej sekcji dodaj wiersz za pomocą 'scheme' => 'tls',polecenia . Ta konfiguracja informuje platformę Laravel o użyciu szyfrowania w celu nawiązania połączenia z usługą Redis. Pamiętaj, że te AZURE_REDIS_ ustawienia zostały utworzone przez kreatora tworzenia.

Zrzut ekranu przedstawiający program Visual Studio Code w przeglądarce i otwarty plik ze zmodyfikowanymi zmiennymi Redis.

Krok 5:

  1. Wybierz rozszerzenie Kontroli źródła.
  2. W polu tekstowym wpisz komunikat zatwierdzenia, taki jak Configure DB & Redis variables.
  3. Wybierz pozycję Zatwierdź i wypchnij.

Zrzut ekranu przedstawiający zatwierdzone zmiany i wypchnięty do usługi GitHub.

Krok 6. 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.

Krok 7. 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 obszarze Repozytorium wybierz pozycję laravel-task.
  5. W obszarze Gałąź wybierz pozycję main.
  6. W górnym menu wybierz pozycję Zapisz. Usługa App Service zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w .github/workflows katalogu.

Zrzut ekranu przedstawiający sposób konfigurowania ciągłej integracji/ciągłego wdrażania przy użyciu funkcji GitHub Actions.

Krok 8. Na stronie Centrum wdrażania:

  1. Wybierz pozycję Dzienniki. Uruchomienie wdrożenia zostało już uruchomione.
  2. W elemencie dziennika dla przebiegu wdrożenia wybierz pozycję Kompiluj/Wdróż dzienniki.

Zrzut ekranu przedstawiający sposób otwierania dzienników wdrażania w centrum wdrażania.

Krok 9. Wykonano cię do repozytorium GitHub i zobaczysz, że akcja usługi GitHub jest uruchomiona. Plik przepływu pracy definiuje dwa oddzielne etapy, kompilowanie i wdrażanie. Poczekaj na uruchomienie usługi GitHub, aby wyświetlić stan Ukończono. Trwa to około 15 minut.

Zrzut ekranu przedstawiający przebieg usługi GitHub w toku.

4 — Generowanie schematu bazy danych

Kreator tworzenia umieszcza serwer bazy danych MySQL za prywatnym punktem końcowym, więc jest dostępny 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.

Krok 1. Po powrocie do strony usługi App Service w menu po lewej stronie wybierz pozycję SSH.

Zrzut ekranu przedstawiający sposób otwierania powłoki SSH dla aplikacji w witrynie Azure Portal.

Krok 2. W terminalu SSH:

  1. Uruchom program cd /home/site/wwwroot. Oto wszystkie wdrożone pliki.
  2. Uruchom program php artisan migrate --force. Jeśli to się powiedzie, usługa App Service łączy się pomyślnie z bazą danych MySQL. Tylko zmiany w plikach w /home programie mogą być utrwalane poza ponownymi uruchomieniami aplikacji. Zmiany poza programem /home nie są utrwalane.

Zrzut ekranu przedstawiający polecenia do uruchomienia w powłoce SSH i ich danych wyjściowych.

5 — Zmienianie katalogu głównego witryny

Zamiast tego cykl życia aplikacji Laravel rozpoczyna się w katalogu /public . Domyślny kontener PHP 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 Nginx w kontenerze PHP (/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ż zmiana jest poza /home elementem i zostanie utracona po ponownym uruchomieniu aplikacji.

Krok 1.

  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.

Krok 2. 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 ponownie załaduj.
  2. Wybierz pozycję Zapisz. Polecenie zastępuje plik konfiguracji Nginx w kontenerze PHP i uruchamia ponownie serwer Nginx. Ta konfiguracja gwarantuje, że ta sama zmiana zostanie wprowadzona do kontenera przy każdym uruchomieniu.

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

6 — Przechodzenie do aplikacji

Krok 1. Na stronie usługi 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.netadresu .

Zrzut ekranu przedstawiający sposób uruchamiania usługi App Service w witrynie Azure Portal.

Krok 2. Dodaj kilka zadań do listy. Gratulacje, uruchamiasz bezpieczną aplikację PHP opartą na danych w usłudze aplikacja systemu Azure Service.

Zrzut ekranu przedstawiający aplikację Laravel działającą w usłudze App Service.

Napiwek

Przykładowa aplikacja implementuje wzorzec odkładania do pamięci podręcznej. Po ponownym załadowaniu strony po wprowadzeniu zmian danych czas odpowiedzi na stronie internetowej jest znacznie szybszy, ponieważ ładuje dane z pamięci podręcznej zamiast bazy danych.

7 — Przesyłanie strumieniowe dzienników diagnostycznych

usługa aplikacja systemu Azure przechwytuje wszystkie komunikaty zarejestrowane w konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Przykładowa aplikacja generuje komunikaty dziennika konsoli w każdym z jego punktów końcowych, aby zademonstrować tę funkcję. Domyślnie funkcja rejestrowania platformy Laravel (na przykład Log::info()) zwraca dane wyjściowe do pliku lokalnego. Ustawienie LOG_CHANNEL aplikacji z wcześniejszej wersji sprawia, że wpisy dziennika są dostępne ze strumienia dziennika usługi App Service.

Krok 1. Na stronie usługi App Service:

  1. W menu po lewej stronie wybierz pozycję Dzienniki usługi App Service.
  2. W obszarze 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.

Krok 2. W menu po lewej stronie wybierz pozycję Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz 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.

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

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

Krok 3:

  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?

Cennik zasobów tworzenia jest następujący:

  • Plan usługi App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz Cennik usługi App Service.
  • Serwer elastyczny MySQL jest tworzony w warstwie B1ms i można go 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 usługi Azure Database for MySQL.
  • Usługa Azure Cache for Redis jest tworzona w warstwie Podstawowa z minimalnym rozmiarem pamięci podręcznej. Z tą warstwą wiąże się niewielki koszt. Można ją skalować w górę do wyższych warstw wydajności w celu uzyskania wyższej dostępności, klastrowania i innych funkcji. Zobacz Cennik usługi Azure Cache for Redis.
  • Sieć wirtualna nie powoduje naliczania opłat, chyba że skonfigurujesz dodatkowe funkcje, takie jak komunikacja równorzędna. Zobacz Cennik usługi Azure Virtual Network.
  • Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.

Jak mogę nawiązać połączenie z bazą danych MySQL zabezpieczoną za siecią wirtualną przy użyciu innych narzędzi?

  • Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, można uruchomić mysql z poziomu terminalu SSH aplikacji.
  • Aby nawiązać połączenie z poziomu narzędzia klasycznego, takiego jak MySQL Workbench, maszyna musi znajdować się w sieci wirtualnej. Na przykład może to być maszyna wirtualna platformy Azure połączona z jedną z podsieci lub maszyna w sieci lokalnej, która ma połączenie sieci VPN typu lokacja-lokacja z siecią wirtualną platformy Azure.
  • Usługę Azure Cloud Shell można również zintegrować z siecią wirtualną.

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

Pobierz automatycznie wygenerowany plik przepływu pracy z usługi App Service, aby na przykład git push uruchomić nową kompilację i uruchomienie wdrożenia. Z lokalnego klonu repozytorium GitHub należy wprowadzić żądane aktualizacje wypychane do usługi 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 plik przepływu pracy z usługi App Service definiuje polecenie build-then-deploy, dwuzadniowe uruchomienie. Ponieważ każde zadanie jest uruchamiane we własnym czystym środowisku, plik przepływu pracy zapewnia, że deploy zadanie ma dostęp do plików z build zadania:

Większość czasu poświęcanego przez proces dwóch zadań jest poświęcana na przekazywanie i pobieranie artefaktów. Jeśli chcesz, możesz uprościć plik przepływu pracy, łącząc dwa zadania w jeden, co eliminuje konieczność przekazywania i pobierania kroków.

Następne kroki

Przejdź do następnego samouczka, aby dowiedzieć się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.

Możesz też zapoznać się z innymi zasobami: