Konfigurowanie aplikacji PHP dla usługi aplikacja systemu Azure

Pokaż wersję języka PHP

W tym przewodniku pokazano, jak skonfigurować aplikacje internetowe w języku PHP, zaplecza mobilne i aplikacje interfejsu API w usłudze aplikacja systemu Azure Service.

Ten przewodnik zawiera kluczowe pojęcia i instrukcje dla deweloperów języka PHP, którzy wdrażają aplikacje w usłudze App Service. Jeśli nigdy nie używasz usługi aplikacja systemu Azure Service, najpierw postępuj zgodnie z przewodnikiem Szybki start php i językiem PHP z usługą MySQL.

Aby wyświetlić bieżącą wersję języka PHP, uruchom następujące polecenie w usłudze Cloud Shell:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion

Uwaga

Aby rozwiązać problem z miejscem programowania, dołącz parametr --slot , po którym następuje nazwa miejsca.

Aby wyświetlić wszystkie obsługiwane wersje języka PHP, uruchom następujące polecenie w usłudze Cloud Shell:

az webapp list-runtimes --os windows | grep PHP

W tym przewodniku pokazano, jak skonfigurować aplikacje internetowe w języku PHP, zaplecza mobilne i aplikacje interfejsu API w usłudze aplikacja systemu Azure Service.

Ten przewodnik zawiera kluczowe pojęcia i instrukcje dla deweloperów języka PHP, którzy wdrażają aplikacje w usłudze App Service. Jeśli nigdy nie używasz usługi aplikacja systemu Azure Service, najpierw postępuj zgodnie z przewodnikiem Szybki start php i językiem PHP z usługą MySQL.

Aby wyświetlić bieżącą wersję języka PHP, uruchom następujące polecenie w usłudze Cloud Shell:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

Uwaga

Aby rozwiązać problem z miejscem programowania, dołącz parametr --slot , po którym następuje nazwa miejsca.

Aby wyświetlić wszystkie obsługiwane wersje języka PHP, uruchom następujące polecenie w usłudze Cloud Shell:

az webapp list-runtimes --os linux | grep PHP

Ustawianie wersji języka PHP

Uruchom następujące polecenie w usłudze Cloud Shell, aby ustawić wersję PHP na 8.1:

az webapp config set --resource-group <resource-group-name> --name <app-name> --php-version 8.1

Uruchom następujące polecenie w usłudze Cloud Shell, aby ustawić wersję PHP na 8.1:

az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PHP|8.1"

Uruchamianie kompozytora

Jeśli chcesz, aby usługa App Service uruchamiała narzędzie Composer w czasie wdrażania, najprostszym sposobem jest dołączenie narzędzia Composer do repozytorium.

W lokalnym oknie terminalu zmień katalog na katalog główny repozytorium i postępuj zgodnie z instrukcjami wyświetlanymi podczas pobierania pliku Composer , aby pobrać plik composer.phar do katalogu głównego katalogu.

Uruchom następujące polecenia (wymagane jest zainstalowanie narzędzia npm ):

npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt

Katalog główny repozytorium ma teraz dwa dodatkowe pliki: .deployment i deploy.sh.

Otwórz deploy.sh i znajdź sekcję Deployment , która wygląda następująco:

##################################################################################################################################
# Deployment
# ----------

Dodaj sekcję kodu, którą musisz uruchomić wymagane narzędzie na końcuDeployment sekcji:

# 4. Use composer
echo "$DEPLOYMENT_TARGET"
if [ -e "$DEPLOYMENT_TARGET/composer.json" ]; then
  echo "Found composer.json"
  pushd "$DEPLOYMENT_TARGET"
  php composer.phar install $COMPOSER_ARGS
  exitWithMessageOnError "Composer install failed"
  popd
fi

Zatwierdź wszystkie zmiany i wdróż kod przy użyciu narzędzia Git lub wdróż plik zip z włączoną automatyzacją kompilacji. Kompozytor powinien teraz działać w ramach automatyzacji wdrażania.

Run Grunt/Bower/Gulp

Jeśli chcesz, aby usługa App Service uruchamiała popularne narzędzia automatyzacji w czasie wdrażania, takie jak Grunt, Bower lub Gulp, musisz podać niestandardowy skrypt wdrażania. Usługa App Service uruchamia ten skrypt podczas wdrażania za pomocą usługi Git lub wdrożenia zip z włączoną automatyzacją kompilacji.

Aby umożliwić repozytorium uruchamianie tych narzędzi, należy dodać je do zależności w pliku package.json. Na przykład:

"dependencies": {
  "bower": "^1.7.9",
  "grunt": "^1.0.1",
  "gulp": "^3.9.1",
  ...
}

W lokalnym oknie terminalu zmień katalog na katalog główny repozytorium i uruchom następujące polecenia (potrzebne jest zainstalowanie narzędzia npm ):

npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt

Katalog główny repozytorium ma teraz dwa dodatkowe pliki: .deployment i deploy.sh.

Otwórz deploy.sh i znajdź sekcję Deployment , która wygląda następująco:

##################################################################################################################################
# Deployment
# ----------

Ta sekcja kończy się uruchomieniem polecenia npm install --production. Dodaj sekcję kodu, którą musisz uruchomić wymagane narzędzie na końcuDeployment sekcji:

Zobacz przykład w przykładzie MEAN.js, w którym skrypt wdrażania uruchamia również polecenie niestandardowenpm install.

Bower

Ten fragment kodu uruchamia polecenie bower install.

if [ -e "$DEPLOYMENT_TARGET/bower.json" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/bower install
  exitWithMessageOnError "bower failed"
  cd - > /dev/null
fi

Gulp

Ten fragment kodu uruchamia polecenie gulp imagemin.

if [ -e "$DEPLOYMENT_TARGET/gulpfile.js" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/gulp imagemin
  exitWithMessageOnError "gulp failed"
  cd - > /dev/null
fi

Grunt

Ten fragment kodu uruchamia polecenie grunt.

if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/grunt
  exitWithMessageOnError "Grunt failed"
  cd - > /dev/null
fi

Dostosowywanie automatyzacji kompilacji

Jeśli wdrażasz aplikację przy użyciu usługi Git lub używasz pakietów zip z włączoną automatyzacją kompilacji, procedura automatyzacji kompilacji usługi App Service przebiega przez następującą sekwencję:

  1. Uruchom skrypt niestandardowy, jeśli jest określony przez PRE_BUILD_SCRIPT_PATHpolecenie .
  2. Uruchom program php composer.phar install.
  3. Uruchom skrypt niestandardowy, jeśli jest określony przez POST_BUILD_SCRIPT_PATHpolecenie .

PRE_BUILD_COMMAND i POST_BUILD_COMMAND są zmiennymi środowiskowymi, które są domyślnie puste. Aby uruchomić polecenia przed kompilacją, zdefiniuj polecenie PRE_BUILD_COMMAND. Aby uruchomić polecenia po kompilacji, zdefiniuj polecenie POST_BUILD_COMMAND.

Poniższy przykład określa dwie zmienne do serii poleceń rozdzielonych przecinkami.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"

Aby uzyskać dodatkowe zmienne środowiskowe w celu dostosowania automatyzacji kompilacji, zobacz Konfiguracja Oryx.

Aby uzyskać więcej informacji na temat sposobu uruchamiania i kompilowania aplikacji PHP w systemie Linux, zobacz dokumentację Oryx: Jak wykrywać i kompilować aplikacje PHP.

Dostosowywanie uruchamiania

Jeśli chcesz, możesz uruchomić polecenie niestandardowe w czasie uruchamiania kontenera, uruchamiając następujące polecenie w usłudze Cloud Shell:

az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"

Uzyskiwanie dostępu do zmiennych środowiskowych

W usłudze App Service można określić ustawienia aplikacji poza kodem aplikacji. Następnie możesz uzyskać do nich dostęp przy użyciu standardowego wzorca getenv(). Aby na przykład uzyskać dostęp do ustawienia aplikacji o nazwie DB_HOST, użyj następującego kodu:

getenv("DB_HOST")

Zmienianie katalogu głównego witryny

Wybrana struktura sieci Web może używać podkatalogu jako katalogu głównego witryny. Na przykład Usługa Laravel używa podkatalogu publicznego/ podkatalogu jako katalogu głównego witryny.

Aby dostosować katalog główny witryny, ustaw ścieżkę aplikacji wirtualnej dla aplikacji przy użyciu az resource update polecenia . Poniższy przykład ustawia katalog główny witryny na publiczny/ podkatalog w repozytorium.

az resource update --name web --resource-group <group-name> --namespace Microsoft.Web --resource-type config --parent sites/<app-name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01

Domyślnie usługa Azure App Service wskazuje główną wirtualną ścieżkę aplikacji (/) do katalogu głównego plików wdrożonej aplikacji (sites\wwwroot).

Wybrana struktura sieci Web może używać podkatalogu jako katalogu głównego witryny. Na przykład Usługa Laravel używa podkatalogu public/ jako katalogu głównego witryny.

Domyślny obraz PHP dla usługi App Service używa serwera Nginx i zmieniasz katalog główny witryny, konfigurując serwer Nginx za root pomocą dyrektywy . Ten przykładowy plik konfiguracji zawiera następujące fragmenty kodu, które zmieniają dyrektywę root :

server {
    #proxy_cache cache;
    #proxy_cache_valid 200 1s;
    listen 8080;
    listen [::]:8080;
    root /home/site/wwwroot/public; # Changed for Laravel

    location / {            
        index  index.php index.html index.htm hostingstart.html;
        try_files $uri $uri/ /index.php?$args; # Changed for Laravel
    }
    ...

Domyślny kontener używa pliku konfiguracji znalezionego w lokalizacji /etc/nginx/sites-available/default. Pamiętaj, że każda edycja w tym pliku zostanie wymazana po ponownym uruchomieniu aplikacji. Aby wprowadzić zmianę obowiązującą w przypadku ponownego uruchamiania aplikacji, dodaj niestandardowe polecenie uruchamiania w następujący przykład:

cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload

To polecenie zastępuje domyślny plik konfiguracji Nginx plikiem o nazwie default w katalogu głównym repozytorium i uruchamia ponownie serwer Nginx.

Wykrywanie sesji protokołu HTTPS

W usłudze App Service kończenie żądań PROTOKOŁU TLS/SSL odbywa się w modułach równoważenia obciążenia sieciowego, więc wszystkie żądania HTTPS docierają do aplikacji jako niezaszyfrowane żądania HTTP. Jeśli logika aplikacji musi sprawdzać, czy żądania użytkownika są szyfrowane, czy nie, zbadaj nagłówek X-Forwarded-Proto.

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}

Popularne platformy internetowe umożliwiają dostęp do informacji X-Forwarded-* w standardowym wzorcu aplikacji. Na platformie CodeIgniter element is_https() domyślnie sprawdza wartość X_FORWARDED_PROTO.

Dostosowywanie ustawień php.ini

Jeśli musisz wprowadzić zmiany w instalacji języka PHP, możesz zmienić dowolne dyrektywy php.ini, wykonując następujące kroki.

Uwaga

Najlepszym sposobem wyświetlenia wersji php i bieżącej konfiguracji php.ini jest wywołanie phpinfo() w aplikacji.

Dostosowywanie dyrektyw innych niż PHP_INI_SYSTEM

Aby dostosować dyrektywy PHP_INI_USER, PHP_INI_PERDIR i PHP_INI_ALL (zobacz dyrektywy php.ini), dodaj .user.ini plik do katalogu głównego aplikacji.

Dodaj ustawienia konfiguracji do .user.ini pliku przy użyciu tej samej składni, która będzie używana w php.ini pliku. Jeśli na przykład chcesz włączyć display_errors ustawienie i ustawić upload_max_filesize ustawienie na 10 M, .user.ini plik będzie zawierać następujący tekst:

 ; Example Settings
 display_errors=On
 upload_max_filesize=10M

 ; Write errors to d:\home\LogFiles\php_errors.log
 ; log_errors=On

Ponownie wdróż aplikację przy użyciu zmian i uruchom ją ponownie.

Alternatywą dla używania .user.ini pliku jest użycie ini_set() w aplikacji w celu dostosowania tych dyrektyw innych niż PHP_INI_SYSTEM.

Aby dostosować dyrektywy PHP_INI_USER, PHP_INI_PERDIR i PHP_INI_ALL dla aplikacji internetowych systemu Linux, takich jak upload_max_filesize i expose_php, użyj niestandardowego pliku "ini". Można go utworzyć w sesji SSH.

  1. Przejdź do witryny KUDU https://< nazwa>_lokacji.scm.azurewebsites.net.
  2. Wybierz pozycję Bash lub SSH z górnego menu.
  3. W programie Bash/SSH przejdź do katalogu "/home/site/wwwroot".
  4. Utwórz katalog o nazwie "ini" (na przykład mkdir ini).
  5. Zmień bieżący katalog roboczy na właśnie utworzony folder "ini".

Aby dodać ustawienia, musisz utworzyć plik "ini". W tym przykładzie używamy ciągu "extensions.ini". Nie ma żadnych edytorów plików, takich jak Vi, Vim lub Nano, więc użyjesz echa, aby dodać ustawienia do pliku. Zmień wartość "upload_max_filesize" z 2M na 50M. Użyj następującego polecenia, aby dodać ustawienie i utworzyć plik "extensions.ini", jeśli jeszcze nie istnieje.

/home/site/wwwroot/ini>echo "upload_max_filesize=50M" >> extensions.ini
/home/site/wwwroot/ini>cat extensions.ini

upload_max_filesize=50M

/home/site/wwwroot/ini>

Następnie przejdź do witryny Azure Portal i dodaj ustawienie aplikacji, aby zeskanować właśnie utworzony katalog "ini", aby zastosować zmianę dla upload_max_filesize.

  1. Przejdź do witryny Azure Portal i wybierz aplikację PHP usługi App Service dla systemu Linux.
  2. Wybierz pozycję Aplikacja Ustawienia dla aplikacji.
  3. W sekcji Ustawienia aplikacji wybierz pozycję + Dodaj nowe ustawienie.
  4. W polu Nazwa ustawienia aplikacji wprowadź ciąg "PHP_INI_SCAN_DIR" i jako wartość wprowadź ciąg "/home/site/wwwroot/ini".
  5. Wybierz przycisk Zapisz.

Uwaga

Jeśli ponownie skompilujesz rozszerzenie PHP, takie jak GD, wykonaj kroki opisane w temacie Recompiling PHP Extensions at aplikacja systemu Azure Service - Adding PHP Extensions (Ponowne komkompilowanie rozszerzeń PHP w usłudze aplikacja systemu Azure — dodawanie rozszerzeń PHP)

Dostosowywanie dyrektyw PHP_INI_SYSTEM

Aby dostosować dyrektywy PHP_INI_SYSTEM (zobacz dyrektywy php.ini), użyj PHP_INI_SCAN_DIR ustawienia aplikacji.

Najpierw uruchom następujące polecenie w usłudze Cloud Shell , aby dodać ustawienie aplikacji o nazwie PHP_INI_SCAN_DIR:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PHP_INI_SCAN_DIR="d:\home\site\ini"

Przejdź do konsoli Kudu (https://<app-name>.scm.azurewebsites.net/DebugConsole) i przejdź do d:\home\site.

Utwórz katalog o d:\home\site nazwie ini, a następnie utwórz plik ini w d:\home\site\ini katalogu (na przykład settings.ini) za pomocą dyrektyw, które chcesz dostosować. Użyj tej samej składni, której należy użyć w pliku php.ini .

Aby na przykład zmienić wartość expose_php uruchom następujące polecenia:

cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini

Aby zmiany zaczęły obowiązywać, uruchom ponownie aplikację.

Aby dostosować dyrektywy PHP_INI_SYSTEM (zobacz dyrektywy php.ini), nie można użyć metody .htaccess . Usługa App Service udostępnia oddzielny mechanizm przy użyciu PHP_INI_SCAN_DIR ustawienia aplikacji.

Najpierw uruchom następujące polecenie w usłudze Cloud Shell , aby dodać ustawienie aplikacji o nazwie PHP_INI_SCAN_DIR:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PHP_INI_SCAN_DIR="/usr/local/etc/php/conf.d:/home/site/ini"

/usr/local/etc/php/conf.d to katalog domyślny, w którym istnieje plik php.ini . /home/site/ini to katalog niestandardowy, w którym dodasz niestandardowy plik ini . Wartości należy oddzielić za pomocą elementu :.

Przejdź do sesji internetowego protokołu SSH przy użyciu kontenera systemu Linux (https://<app-name>.scm.azurewebsites.net/webssh/host).

Utwórz katalog o /home/site nazwie ini, a następnie utwórz plik ini w /home/site/ini katalogu (na przykład settings.ini) za pomocą dyrektyw, które chcesz dostosować. Użyj tej samej składni, której należy użyć w pliku php.ini .

Napiwek

We wbudowanych kontenerach systemu Linux w usłudze App Service /home jest używany jako trwały magazyn udostępniony.

Aby na przykład zmienić wartość expose_php uruchom następujące polecenia:

cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini

Aby zmiany zaczęły obowiązywać, uruchom ponownie aplikację.

Włączanie rozszerzeń JĘZYKA PHP

Wbudowane instalacje języka PHP zawierają najczęściej używane rozszerzenia. Możesz włączyć dodatkowe rozszerzenia w taki sam sposób, jak dostosowywanie dyrektyw php.ini.

Uwaga

Najlepszym sposobem wyświetlenia wersji php i bieżącej konfiguracji php.ini jest wywołanie phpinfo() w aplikacji.

Aby włączyć dodatkowe rozszerzenia, wykonaj następujące kroki:

bin Dodaj katalog do katalogu głównego aplikacji i umieść .dll w niej pliki rozszerzeń (na przykład mongodb.dll). Upewnij się, że rozszerzenia są zgodne z wersją PHP na platformie Azure i są zgodne z vc9 i niewątkowy (nts).

Wdróż zmiany.

Wykonaj kroki opisane w temacie Dostosowywanie dyrektyw PHP_INI_SYSTEM, dodaj rozszerzenia do niestandardowego pliku ini z rozszerzeniami lub dyrektywami zend_extension .

extension=d:\home\site\wwwroot\bin\mongodb.dll
zend_extension=d:\home\site\wwwroot\bin\xdebug.dll

Aby zmiany zaczęły obowiązywać, uruchom ponownie aplikację.

Wbudowane instalacje języka PHP zawierają najczęściej używane rozszerzenia. Możesz włączyć dodatkowe rozszerzenia w taki sam sposób, jak dostosowywanie dyrektyw php.ini.

Uwaga

Najlepszym sposobem wyświetlenia wersji php i bieżącej konfiguracji php.ini jest wywołanie phpinfo() w aplikacji.

Aby włączyć dodatkowe rozszerzenia, wykonaj następujące kroki:

bin Dodaj katalog do katalogu głównego aplikacji i umieść .so w niej pliki rozszerzeń (na przykład mongodb.so). Upewnij się, że rozszerzenia są zgodne z wersją PHP na platformie Azure i są zgodne z vc9 i niewątkowy (nts).

Wdróż zmiany.

Wykonaj kroki opisane w temacie Dostosowywanie dyrektyw PHP_INI_SYSTEM, dodaj rozszerzenia do niestandardowego pliku ini z rozszerzeniami lub dyrektywami zend_extension .

extension=/home/site/wwwroot/bin/mongodb.so
zend_extension=/home/site/wwwroot/bin/xdebug.so

Aby zmiany zaczęły obowiązywać, uruchom ponownie aplikację.

Uzyskiwanie dostępu do dzienników diagnostycznych

Użyj standardowego narzędzia error_log(), aby dzienniki diagnostyczne pojawiały się w usłudze aplikacja systemu Azure Service.

Aby uzyskać dostęp do dzienników konsoli wygenerowanych wewnątrz kodu aplikacji w usłudze App Service, włącz rejestrowanie diagnostyczne, uruchamiając następujące polecenie w usłudze Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Możliwe wartości parametru --level to: Error, Warning, Info i Verbose. Każdy kolejny poziom obejmuje poprzedni poziom. Na przykład poziom Error obejmuje tylko komunikaty o błędach, a poziom Verbose obejmuje wszystkie komunikaty.

Po włączeniu rejestrowania diagnostycznego uruchom następujące polecenie, aby wyświetlić strumień dziennika:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Jeśli nie widzisz dzienników konsoli, sprawdź ponownie w ciągu 30 sekund.

Uwaga

Pliki dzienników można także sprawdzać w przeglądarce pod adresem https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Aby w dowolnym momencie zatrzymać przesyłanie strumieniowe dzienników, naciśnij kombinację klawiszy Ctrl+C.

Dostęp do dzienników konsoli wygenerowanych z poziomu kontenera można uzyskać.

Najpierw włącz rejestrowanie kontenerów, uruchamiając następujące polecenie:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Zastąp <app-name> wartości i <resource-group-name> nazwami odpowiednimi dla aplikacji internetowej.

Po włączeniu rejestrowania kontenerów uruchom następujące polecenie, aby wyświetlić strumień dziennika:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Jeśli nie widzisz dzienników konsoli, sprawdź ponownie w ciągu 30 sekund.

Aby zatrzymać przesyłanie strumieniowe dzienników w dowolnym momencie, wpisz Ctrl+C.

Możesz również sprawdzić pliki dziennika w przeglądarce pod adresem https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Rozwiązywanie problemów

Gdy działająca aplikacja PHP działa inaczej w usłudze App Service lub występuje błędy, spróbuj wykonać następujące czynności:

robots933456 w dziennikach

W dziennikach kontenera może zostać wyświetlony następujący komunikat:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Możesz bezpiecznie zignorować ten komunikat. /robots933456.txt jest fikcyjną ścieżką adresu URL, za pomocą której usługa App Service sprawdza, czy kontener jest w stanie obsługiwać żądania. Odpowiedź 404 oznacza po prostu, że ścieżka nie istnieje, ale pozwala usłudze App Service sprawdzić, czy kontener jest w dobrej kondycji i jest gotowy do reagowania na żądania.

Następne kroki

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

Dokumentacja zmiennych środowiskowych i ustawień aplikacji