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í:
- Spuštění vlastního skriptu, pokud je zadán parametrem
PRE_BUILD_SCRIPT_PATH
. - Spusťte
php composer.phar install
. - 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.
- Přejděte na web KUDU https://< name.scm.azurewebsites.net>.
- V horní nabídce vyberte Bash nebo SSH.
- V Bash/SSH přejděte do adresáře /home/site/wwwroot.
- Vytvořte adresář s názvem "ini" (například mkdir ini).
- 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.
- Přejděte na Azure Portal a vyberte svou aplikaci App Service Linux PHP.
- Vyberte Nastavení aplikace.
- V části Nastavení aplikace vyberte + Přidat nové nastavení.
- Jako název nastavení aplikace zadejte "PHP_INI_SCAN_DIR" a jako hodnotu zadejte "/home/site/wwwroot/ini".
- 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
ini
adresář 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
ini
adresář 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.
- V závislosti na vašem souboru composer.json se můžou nainstalovat různé balíčky pro produkční režim (
- 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
natrue
.
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