Sdílet prostřednictvím


Konfigurace aplikace PHP pro službu Aplikace Azure Service

Zobrazit verzi PHP

V této příručce se dozvíte, jak nakonfigurovat webové aplikace PHP, mobilní back-endy a aplikace API ve službě Aplikace Azure Service.

Tato příručka obsahuje klíčové koncepty a pokyny pro vývojáře PHP, kteří nasazují aplikace do služby App Service. Pokud jste nikdy nepoužívali službu Aplikace Azure Service, nejprve postupujte podle kurzu rychlý start k PHP a PHP s MySQL.

Pokud chcete zobrazit aktuální verzi PHP, spusťte v Cloud Shellu následující příkaz:

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

Poznámka:

Pokud chcete řešit vývojový slot, zahrňte parametr --slot následovaný názvem slotu.

Pokud chcete zobrazit všechny podporované verze PHP, spusťte v Cloud Shellu následující příkaz:

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

V této příručce se dozvíte, jak nakonfigurovat webové aplikace PHP, mobilní back-endy a aplikace API ve službě Aplikace Azure Service.

Tato příručka obsahuje klíčové koncepty a pokyny pro vývojáře PHP, kteří nasazují aplikace do služby App Service. Pokud jste nikdy nepoužívali službu Aplikace Azure Service, nejprve postupujte podle kurzu rychlý start k PHP a PHP s MySQL.

Pokud chcete zobrazit aktuální verzi PHP, spusťte v Cloud Shellu následující příkaz:

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

Poznámka:

Pokud chcete řešit vývojový slot, zahrňte parametr --slot následovaný názvem slotu.

Pokud chcete zobrazit všechny podporované verze PHP, spusťte v Cloud Shellu následující příkaz:

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

Nastavení verze PHP

Spuštěním následujícího příkazu v Cloud Shellu nastavte verzi PHP na 8.1:

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

Spuštěním následujícího příkazu v Cloud Shellu nastavte verzi PHP na 8.1:

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

Spustit composer

Pokud chcete, aby služba App Service spustila nástroj Composer v době nasazení, nejjednodušší způsob je zahrnout do úložiště Composer.

V okně místního terminálu změňte adresář na kořen úložiště a postupujte podle pokynů ke stažení Composer a stáhněte soubor composer.phar do kořenového adresáře.

Spusťte následující příkazy (potřebujete nainstalovat npm ):

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

Kořenový adresář úložiště teď obsahuje dva další soubory: .deployment a deploy.sh.

Otevřete deploy.sh a najděte Deployment oddíl, který vypadá takto:

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

Přidejte oddíl kódu, který potřebujete ke spuštění požadovaného nástroje na konci oddílu Deployment :

# 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

Potvrďte všechny změny a nasaďte kód pomocí Gitu nebo nasazení zip s povolenou automatizací sestavení. Nástroj Composer by teď měl být spuštěný jako součást automatizace nasazení.

Spuštění Gruntu, Boweru nebo Gulpu

Pokud chcete, aby služba App Service spouštěla oblíbené automatizační nástroje v době nasazení, jako je Grunt, Bower nebo Gulp, musíte zadat vlastní skript nasazení. App Service spustí tento skript při nasazení pomocí Gitu nebo nasazení zip s povolenou automatizací sestavení.

Pokud chcete úložišti povolit spouštění těchto nástrojů, musíte je přidat do závislostí v souboru package.json. Příklad:

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

V okně místního terminálu změňte adresář do kořenového adresáře úložiště a spusťte následující příkazy (potřebujete nainstalovat npm ):

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

Kořenový adresář úložiště teď obsahuje dva další soubory: .deployment a deploy.sh.

Otevřete deploy.sh a najděte Deployment oddíl, který vypadá takto:

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

Tento oddíl končí spuštěním npm install --production. Přidejte oddíl kódu, který potřebujete ke spuštění požadovaného nástroje na konci oddílu Deployment :

Podívejte se na příklad v ukázce MEAN.js, kde skript nasazení také spouští vlastní npm install příkaz.

Bower

Tento fragment kódu se spustí 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

Tento fragment kódu se spustí 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

Tento fragment kódu se spustí grunt.

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

Přizpůsobení automatizace sestavení

Pokud nasadíte aplikaci pomocí Gitu nebo použijete balíčky ZIP s povolenou automatizací sestavení, provede se automatizace sestavení služby App Service pomocí následujícího pořadí:

  1. Spuštění vlastního skriptu, pokud je zadán parametrem PRE_BUILD_SCRIPT_PATH.
  2. Spusťte php composer.phar install.
  3. Spuštění vlastního skriptu, pokud je zadán parametrem POST_BUILD_SCRIPT_PATH.

PRE_BUILD_COMMAND a POST_BUILD_COMMAND jsou proměnné prostředí, které jsou ve výchozím nastavení prázdné. Chcete-li spustit příkazy před sestavením, definujte PRE_BUILD_COMMAND. Chcete-li spustit příkazy po sestavení, definujte POST_BUILD_COMMAND.

Následující příklad určuje dvě proměnné pro řadu příkazů oddělených čárkami.

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"

Další proměnné prostředí pro přizpůsobení automatizace sestavení najdete v tématu Konfigurace Oryxu.

Další informace o tom, jak App Service běží a vytváří aplikace PHP v Linuxu, najdete v dokumentaci k Oryxu: Jak se aplikace PHP detekují a sestavují.

Přizpůsobení spuštění

Pokud chcete, můžete spustit vlastní příkaz v době spuštění kontejneru spuštěním následujícího příkazu v Cloud Shellu:

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

Přístup k proměnným prostředí

V App Service můžete nastavit nastavení aplikace mimo kód vaší aplikace. Pak k nim můžete přistupovat pomocí standardního vzoru getenv(). Například pro přístup k aplikačnímu nastavení s názvem DB_HOST použijete následující kód:

getenv("DB_HOST")

Změna kořenového adresáře webu

Webová architektura podle vašeho výběru může jako kořen webu použít podadresář. Laravel například používá veřejný/podadresář jako kořen webu.

Pokud chcete upravit kořen webu, nastavte cestu virtuální aplikace pro aplikaci pomocí az resource update příkazu. Následující příklad nastaví kořen webu na veřejný nebo podadresář ve vašem úložišti.

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

Ve výchozím nastavení Azure App Service odkazuje cestu virtuální aplikace (/) do kořenového adresáře souborů nasazené aplikace (sites\wwwroot).

Webová architektura podle vašeho výběru může jako kořen webu použít podadresář. Laravel například používá public/ podadresář jako kořen webu.

Výchozí image PHP pro App Service používá Nginx a vy změníte kořen webu konfigurací serveru Nginx s direktivouroot. Tento ukázkový konfigurační soubor obsahuje následující fragmenty kódu, které mění direktivu 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
    }
    ...

Výchozí kontejner používá konfigurační soubor nalezený v umístění /etc/nginx/sites-available/default. Mějte na paměti, že všechny úpravy, které v tomto souboru uděláte, se při restartování aplikace vymažou. Pokud chcete provést změnu, která je efektivní při restartování aplikace, přidejte vlastní spouštěcí příkaz , jako je tento příklad:

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

Tento příkaz nahradí výchozí konfigurační soubor Nginx souborem s názvem default v kořenovém adresáři úložiště a restartuje Nginx.

Zjištění relace HTTPS

Ve službě App Service dochází k ukončení protokolu TLS/SSL v nástrojích pro vyrovnávání zatížení sítě, takže všechny požadavky HTTPS dosáhnou vaší aplikace jako nešifrované požadavky HTTP. Pokud logika vaší aplikace potřebuje zkontrolovat, jestli jsou požadavky uživatelů šifrované, nebo ne, zkontrolujte hlavičku X-Forwarded-Proto.

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

Oblíbené webové architektury umožňují přístup k X-Forwarded-* informacím ve standardním vzoru aplikace. V CodeIgniter zkontroluje is_https() ve výchozím nastavení hodnotu X_FORWARDED_PROTO .

Přizpůsobení nastavení php.ini

Pokud potřebujete provést změny instalace PHP, můžete podle těchto kroků změnit kteroukoli direktivu php.ini.

Poznámka:

Nejlepším způsobem, jak zobrazit verzi PHP a aktuální konfiguraci php.ini , je volání phpinfo() ve vaší aplikaci.

Přizpůsobení direktiv bez PHP_INI_SYSTEM

Pokud chcete přizpůsobit direktivy PHP_INI_USER, PHP_INI_PERDIR a PHP_INI_ALL (viz direktivy php.ini), přidejte .user.ini soubor do kořenového adresáře aplikace.

Do souboru přidejte nastavení .user.ini konfigurace pomocí stejné syntaxe, jakou byste použili v php.ini souboru. Pokud byste například chtěli zapnout display_errors nastavení a nastavit upload_max_filesize nastavení na 10 M, .user.ini soubor by obsahoval tento text:

 ; Example Settings
 display_errors=On
 upload_max_filesize=10M

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

Znovu nasaďte aplikaci se změnami a restartujte ji.

Jako alternativu .user.ini k použití souboru můžete použít ini_set() v aplikaci k přizpůsobení těchto direktiv, které nejsou PHP_INI_SYSTEM.

Pokud chcete přizpůsobit direktivy PHP_INI_USER, PHP_INI_PERDIR a PHP_INI_ALL pro linuxové webové aplikace, jako jsou upload_max_filesize a expose_php, použijte vlastní soubor ini. Můžete ho vytvořit v relaci SSH.

  1. Přejděte na web KUDU https://< name.scm.azurewebsites.net>.
  2. V horní nabídce vyberte Bash nebo SSH.
  3. V Bash/SSH přejděte do adresáře /home/site/wwwroot.
  4. Vytvořte adresář s názvem "ini" (například mkdir ini).
  5. Změňte aktuální pracovní adresář na složku ini, kterou jste právě vytvořili.

Abyste mohli přidat nastavení, musíte vytvořit soubor "ini". V tomto příkladu používáme "extensions.ini". Neexistují žádné editory souborů, jako je Vi, Vim nebo Nano, takže k přidání nastavení do souboru použijete echo. Změňte "upload_max_filesize" z 2M na 50M. Pomocí následujícího příkazu přidejte nastavení a vytvořte soubor extensions.ini, pokud ještě neexistuje.

/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>

Pak přejděte na web Azure Portal a přidejte nastavení aplikace a vyhledejte adresář ini, který jste právě vytvořili, aby se změna použila pro upload_max_filesize.

  1. Přejděte na Azure Portal a vyberte svou aplikaci App Service Linux PHP.
  2. Vyberte Nastavení aplikace.
  3. V části Nastavení aplikace vyberte + Přidat nové nastavení.
  4. Jako název nastavení aplikace zadejte "PHP_INI_SCAN_DIR" a jako hodnotu zadejte "/home/site/wwwroot/ini".
  5. Vyberte tlačítko Uložit.

Poznámka:

Pokud jste překompilovali rozšíření PHP, například GD, postupujte podle pokynů v tématu Rekompiling ROZŠÍŘENÍ PHP ve službě Aplikace Azure Service – Přidání rozšíření PHP.

Přizpůsobení direktiv PHP_INI_SYSTEM

Pokud chcete přizpůsobit direktivy PHP_INI_SYSTEM (viz direktivy php.ini), použijte PHP_INI_SCAN_DIR nastavení aplikace.

Nejprve spuštěním následujícího příkazu v Cloud Shellu přidejte nastavení aplikace s názvemPHP_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"

Přejděte do konzoly Kudu (https://<app-name>.scm.azurewebsites.net/DebugConsole) a přejděte na d:\home\site.

Vytvořte volaný d:\home\site iniadresář a pak v d:\home\site\ini adresáři vytvořte soubor .ini (například settings.ini) s direktivami, které chcete přizpůsobit. Použijte stejnou syntaxi, jakou byste použili v souboru php.ini .

Pokud například chcete změnit hodnotu expose_php spusťte následující příkazy:

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

Aby se změny projevily, restartujte aplikaci.

Pokud chcete přizpůsobit direktivy PHP_INI_SYSTEM (viz direktivy php.ini), nemůžete použít přístup .htaccess . App Service poskytuje samostatný mechanismus pomocí PHP_INI_SCAN_DIR nastavení aplikace.

Nejprve spuštěním následujícího příkazu v Cloud Shellu přidejte nastavení aplikace s názvemPHP_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 je výchozí adresář, ve kterém existuje php.ini . /home/site/ini je vlastní adresář, do kterého přidáte vlastní soubor .ini . Hodnoty oddělíte pomocí .:

Přejděte do relace SSH webu s kontejnerem Linuxu (https://<app-name>.scm.azurewebsites.net/webssh/host).

Vytvořte volaný /home/site iniadresář a pak v /home/site/ini adresáři vytvořte soubor .ini (například settings.ini) s direktivami, které chcete přizpůsobit. Použijte stejnou syntaxi, jakou byste použili v souboru php.ini .

Tip

V integrovaných kontejnerech Linuxu ve službě App Service se /home používá jako trvalé sdílené úložiště.

Pokud například chcete změnit hodnotu expose_php spusťte následující příkazy:

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

Aby se změny projevily, restartujte aplikaci.

Povolení rozšíření PHP

Integrované instalace PHP obsahují nejčastěji používaná rozšíření. Další rozšíření můžete povolit stejným způsobem jako vlastní direktivy php.ini.

Poznámka:

Nejlepším způsobem, jak zobrazit verzi PHP a aktuální konfiguraci php.ini , je volání phpinfo() ve vaší aplikaci.

Pokud chcete povolit další rozšíření, postupujte takto:

bin Přidejte adresář do kořenového adresáře aplikace a vložte do .dll něj soubory s příponou (například mongodb.dll). Ujistěte se, že rozšíření jsou kompatibilní s verzí PHP v Azure a jsou kompatibilní s VC9 a bez vláken (nts).

Nasaďte změny.

Postupujte podle pokynů v části Přizpůsobit direktivy PHP_INI_SYSTEM, přidejte přípony do vlastního souboru .ini s příponou nebo direktivami zend_extension.

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

Aby se změny projevily, restartujte aplikaci.

Integrované instalace PHP obsahují nejčastěji používaná rozšíření. Další rozšíření můžete povolit stejným způsobem jako vlastní direktivy php.ini.

Poznámka:

Nejlepším způsobem, jak zobrazit verzi PHP a aktuální konfiguraci php.ini , je volání phpinfo() ve vaší aplikaci.

Pokud chcete povolit další rozšíření, postupujte takto:

bin Přidejte adresář do kořenového adresáře aplikace a vložte do .so něj soubory s příponou (například mongodb.so). Ujistěte se, že rozšíření jsou kompatibilní s verzí PHP v Azure a jsou kompatibilní s VC9 a bez vláken (nts).

Nasaďte změny.

Postupujte podle pokynů v části Přizpůsobit direktivy PHP_INI_SYSTEM, přidejte přípony do vlastního souboru .ini s příponou nebo direktivami zend_extension.

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

Aby se změny projevily, restartujte aplikaci.

Přístup k diagnostickým protokolům

K zobrazení diagnostických protokolů ve službě Aplikace Azure Service použijte standardní nástroj error_log().

Pokud chcete získat přístup k protokolům konzoly vygenerovaným v rámci kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:

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

Možné hodnoty pro --level jsou: Error, Warning, Info a Verbose. Každá další úroveň zahrnuje předchozí úroveň. Například Error zahrnuje jenom chybové zprávy a Verbose zahrnuje všechny zprávy.

Jakmile je aktivované protokolování diagnostiky, spusťte následující příkaz pro zobrazení streamu protokolů:

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

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Poznámka:

Soubory protokolu můžete také zkontrolovat v prohlížeči na https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Streamování protokolů můžete kdykoli zastavit zadáním Ctrl+C.

Přístup k protokolům konzoly vygenerovaným z kontejneru.

Nejprve zapněte protokolování kontejneru spuštěním následujícího příkazu:

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

Nahraďte <app-name> názvy vhodné pro vaši webovou aplikaci a <resource-group-name> nahraďte je názvy.

Jakmile je protokolování kontejneru zapnuté, spuštěním následujícího příkazu zobrazte stream protokolu:

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

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Pokud chcete streamování protokolů kdykoli zastavit, zadejte Ctrl+C.

Soubory protokolu můžete také zkontrolovat v prohlížeči na adrese https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Řešení problému

Pokud se funkční aplikace PHP chová jinak ve službě App Service nebo obsahuje chyby, zkuste následující:

  • Přístup ke streamu protokolu
  • Otestujte aplikaci místně v produkčním režimu. App Service spouští vaši aplikaci v produkčním režimu, takže se musíte ujistit, že váš projekt funguje podle očekávání v produkčním režimu místně. Například:
    • V závislosti na vašem souboru composer.json se můžou nainstalovat různé balíčky pro produkční režim (require vs. require-dev).
    • Některé webové architektury mohou v produkčním režimu nasazovat statické soubory odlišně.
    • Některé webové architektury můžou při spuštění v produkčním režimu používat vlastní spouštěcí skripty.
  • Spusťte aplikaci ve službě App Service v režimu ladění. Například v Laravelu můžete aplikaci nakonfigurovat tak, aby výstupní ladicí zprávy v produkčním prostředí nastavil APP_DEBUG na true.

robots933456 v protokolech

V protokolech kontejneru se může zobrazit následující zpráva:

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

Tuto zprávu klidně ignorujte. /robots933456.txt je fiktivní cesta URL, kterou App Service používá ke kontrole, jestli kontejner dokáže obsloužit požadavky. Odpověď 404 jednoduše indikuje, že příslušná cesta neexistuje, ale dá službě App Service vědět, že kontejner je v pořádku a je připravený reagovat na požadavky.

Další kroky

Nebo se podívejte na další zdroje informací:

Referenční informace k proměnným prostředí a nastavením aplikace