Een PHP-app configureren voor Azure-app Service
PHP-versie weergeven
Deze handleiding laat zien hoe u uw PHP-web-apps, mobiele back-ends en API-apps in Azure-app Service configureert.
Deze handleiding bevat belangrijke concepten en instructies voor PHP-ontwikkelaars die apps implementeren in App Service. Als u Azure-app Service nog nooit hebt gebruikt, volgt u eerst de PHP-quickstart en PHP met MySQL- zelfstudie.
Als u de huidige PHP-versie wilt weergeven, voert u de volgende opdracht uit in de Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion
Notitie
Als u een ontwikkelsite wilt aanpakken, neemt u de parameter --slot
op gevolgd door de naam van de site.
Als u alle ondersteunde PHP-versies wilt weergeven, voert u de volgende opdracht uit in de Cloud Shell:
az webapp list-runtimes --os windows | grep PHP
Deze handleiding laat zien hoe u uw PHP-web-apps, mobiele back-ends en API-apps in Azure-app Service configureert.
Deze handleiding bevat belangrijke concepten en instructies voor PHP-ontwikkelaars die apps implementeren in App Service. Als u Azure-app Service nog nooit hebt gebruikt, volgt u eerst de PHP-quickstart en PHP met MySQL- zelfstudie.
Als u de huidige PHP-versie wilt weergeven, voert u de volgende opdracht uit in de Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Notitie
Als u een ontwikkelsite wilt aanpakken, neemt u de parameter --slot
op gevolgd door de naam van de site.
Als u alle ondersteunde PHP-versies wilt weergeven, voert u de volgende opdracht uit in de Cloud Shell:
az webapp list-runtimes --os linux | grep PHP
PHP-versie instellen
Voer de volgende opdracht uit in Cloud Shell om de PHP-versie in te stellen op 8.1:
az webapp config set --resource-group <resource-group-name> --name <app-name> --php-version 8.1
Voer de volgende opdracht uit in Cloud Shell om de PHP-versie in te stellen op 8.1:
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PHP|8.1"
Composer uitvoeren
Als u Wilt dat App Service Composer uitvoert tijdens de implementatie, is de eenvoudigste manier om de Composer op te nemen in uw opslagplaats.
Wijzig vanuit een lokaal terminalvenster de map in de hoofdmap van uw opslagplaats en volg de instructies bij het downloaden van Composer om composer.phar te downloaden naar de hoofdmap van de map.
Voer de volgende opdrachten uit (u moet npm hebben geïnstalleerd):
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
De hoofdmap van de opslagplaats bevat nu twee extra bestanden: .deployment en deploy.sh.
Open deploy.sh en zoek de Deployment
sectie, die er als volgt uitziet:
##################################################################################################################################
# Deployment
# ----------
Voeg de codesectie toe die u nodig hebt om het vereiste hulpprogramma aan het einde van de Deployment
sectie uit te voeren:
# 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
Voer al uw wijzigingen door en implementeer uw code met Behulp van Git of Zip Deploy met build automation ingeschakeld. Composer moet nu worden uitgevoerd als onderdeel van implementatieautomatisering.
Grunt/Bower/Gulp uitvoeren
Als u wilt dat App Service populaire automatiseringshulpprogramma's uitvoert tijdens de implementatie, zoals Grunt, Bower of Gulp, moet u een aangepast implementatiescript opgeven. App Service voert dit script uit wanneer u implementeert met Git of met Zip-implementatie met buildautomatisering ingeschakeld.
Als u wilt dat uw opslagplaats deze hulpprogramma's uitvoert, moet u deze toevoegen aan de afhankelijkheden in package.json. Bijvoorbeeld:
"dependencies": {
"bower": "^1.7.9",
"grunt": "^1.0.1",
"gulp": "^3.9.1",
...
}
Wijzig vanuit een lokaal terminalvenster de map in de hoofdmap van uw opslagplaats en voer de volgende opdrachten uit (u moet npm hebben geïnstalleerd):
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
De hoofdmap van de opslagplaats bevat nu twee extra bestanden: .deployment en deploy.sh.
Open deploy.sh en zoek de Deployment
sectie, die er als volgt uitziet:
##################################################################################################################################
# Deployment
# ----------
Deze sectie eindigt met uitvoeren npm install --production
. Voeg de codesectie toe die u nodig hebt om het vereiste hulpprogramma aan het einde van de Deployment
sectie uit te voeren:
Bekijk een voorbeeld in het mean.js-voorbeeld, waarbij het implementatiescript ook een aangepaste npm install
opdracht uitvoert.
Bower
Dit fragment wordt uitgevoerd 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
Dit fragment wordt uitgevoerd 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
Dit fragment wordt uitgevoerd grunt
.
if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/grunt
exitWithMessageOnError "Grunt failed"
cd - > /dev/null
fi
De automatisering van bouwbewerkingen aanpassen
Als u uw app implementeert met Git of zip-pakketten gebruikt waarvoor buildautomatisering is ingeschakeld, doorloopt de App Service-buildautomatisering de volgende reeks:
- Voer aangepast script uit als dit is opgegeven door
PRE_BUILD_SCRIPT_PATH
. - Voer
php composer.phar install
uit. - Voer aangepast script uit als dit is opgegeven door
POST_BUILD_SCRIPT_PATH
.
PRE_BUILD_COMMAND
en POST_BUILD_COMMAND
zijn omgevingsvariabelen die standaard leeg zijn. Als u vooraf gebouwde opdrachten wilt uitvoeren, definieert u PRE_BUILD_COMMAND
. Als u achteraf gebouwde opdrachten wilt uitvoeren, definieert u POST_BUILD_COMMAND
.
In het volgende voorbeeld worden de twee variabelen voor een reeks opdrachten opgegeven, gescheiden door komma's.
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"
Zie Oryx-configuratie voor aanvullende omgevingsvariabelen om bouwautomatisering aan te passen.
Opstarten aanpassen
Als u wilt, kunt u een aangepaste opdracht uitvoeren tijdens het opstarten van de container door de volgende opdracht uit te voeren in Cloud Shell:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
Toegang tot omgevingsvariabelen
In App Service kunt u app-instellingen configureren buiten uw app-code. Vervolgens kunt u ze openen met behulp van het standaard getenv() -patroon. Voor toegang tot bijvoorbeeld de app-instelling DB_HOST
gebruikt u de volgende code:
getenv("DB_HOST")
Hoofdmap van site wijzigen
Het webframework van uw keuze kan een submap gebruiken als de hoofdmap van de site. Laravel gebruikt bijvoorbeeld de openbare/submap als de hoofdmap van de site.
Als u de hoofdmap van de site wilt aanpassen, stelt u het pad voor de virtuele toepassing voor de app in met behulp van de az resource update
opdracht. In het volgende voorbeeld wordt de hoofdmap van de site ingesteld op de openbare/ submap in uw opslagplaats.
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
Azure App Service wijst standaard het hoofdpad voor de virtuele toepassing (/) toe aan de hoofdmap van de geïmplementeerde toepassingsbestanden (sites\wwwroot).
Het webframework van uw keuze kan een submap gebruiken als de hoofdmap van de site. Laravel gebruikt bijvoorbeeld de public/
submap als de hoofdmap van de site.
De standaard-PHP-installatiekopieën voor App Service maken gebruik van Nginx en u wijzigt de hoofdmap van de site door de Nginx-server te configureren met de root
instructie. Dit voorbeeldconfiguratiebestand bevat de volgende codefragmenten waarmee de root
instructie wordt gewijzigd:
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
}
...
De standaardcontainer maakt gebruik van het configuratiebestand dat is gevonden op /etc/nginx/sites-available/default. Houd er rekening mee dat alle wijzigingen die u in dit bestand aanbrengt, worden gewist wanneer de app opnieuw wordt gestart. Als u een wijziging wilt aanbrengen die van kracht is bij het opnieuw opstarten van apps, voegt u een aangepaste opstartopdracht toe, zoals in dit voorbeeld:
cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload
Met deze opdracht wordt het standaardconfiguratiebestand Nginx vervangen door een bestand met de naam standaard in de hoofdmap van de opslagplaats en wordt Nginx opnieuw gestart.
HTTPS-sessie detecteren
In App Service vindt TLS/SSL-beëindiging plaats bij de netwerktaakverdelers, zodat alle HTTPS-aanvragen uw app bereiken als niet-versleutelde HTTP-aanvragen. Inspecteer de header X-Forwarded-Proto
als de app-logica moet controleren of de aanvragen van gebruikers al dan niet zijn versleuteld.
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}
Populaire webframeworks bieden toegang tot de X-Forwarded-*
-informatie in het patroon van de standaard-app. In CodeIgniter wordt met is_https() standaard de waarde van X_FORWARDED_PROTO
gecontroleerd.
Php.ini-instellingen aanpassen
Als u wijzigingen wilt aanbrengen in uw PHP-installatie, kunt u een van de php.ini-instructies wijzigen door deze stappen te volgen.
Notitie
De beste manier om de PHP-versie en de huidige php.ini-configuratie te zien, is door phpinfo() aan te roepen in uw app.
Richtlijnen voor niet-PHP_INI_SYSTEM aanpassen
Als u PHP_INI_USER, PHP_INI_PERDIR en PHP_INI_ALL instructies (zie php.ini-instructies) wilt aanpassen, voegt u een .user.ini
bestand toe aan de hoofdmap van uw app.
Voeg configuratie-instellingen toe aan het .user.ini
bestand met dezelfde syntaxis die u in een php.ini
bestand zou gebruiken. Als u bijvoorbeeld de display_errors
instelling wilt inschakelen en de instelling wilt instellen upload_max_filesize
op 10M, bevat het .user.ini
bestand deze tekst:
; Example Settings
display_errors=On
upload_max_filesize=10M
; Write errors to d:\home\LogFiles\php_errors.log
; log_errors=On
Implementeer uw app opnieuw met de wijzigingen en start deze opnieuw.
Als alternatief voor het gebruik van een .user.ini
bestand kunt u ini_set() in uw app gebruiken om deze niet-PHP_INI_SYSTEM instructies aan te passen.
Als u PHP_INI_USER, PHP_INI_PERDIR en PHP_INI_ALL instructies voor Linux-web-apps, zoals upload_max_filesize en expose_php, wilt aanpassen, gebruikt u een aangepast ini-bestand. U kunt deze maken in een SSH-sessie.
- Ga naar uw KUDU-site https://< sitename.scm.azurewebsites.net>.
- Selecteer Bash of SSH in het bovenste menu.
- Ga in Bash/SSH naar uw map '/home/site/wwwroot'.
- Maak een map met de naam 'ini' (bijvoorbeeld mkdir ini).
- Wijzig de huidige werkmap in de map 'ini' die u zojuist hebt gemaakt.
U moet een 'ini'-bestand maken om uw instellingen toe te voegen. In dit voorbeeld gebruiken we extensions.ini. Er zijn geen bestandseditors zoals Vi, Vim of Nano, dus u gebruikt echo om de instellingen aan het bestand toe te voegen. Wijzig de 'upload_max_filesize' van 2M in 50M. Gebruik de volgende opdracht om de instelling toe te voegen en een bestand extensions.ini te maken als deze nog niet bestaat.
/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>
Ga vervolgens naar Azure Portal en voeg een toepassingsinstelling toe om de map 'ini' te scannen die u zojuist hebt gemaakt om de wijziging voor upload_max_filesize toe te passen.
- Ga naar Azure Portal en selecteer uw App Service Linux PHP-toepassing.
- Selecteer Toepassing Instellingen voor de app.
- Selecteer in de sectie Toepassingsinstellingen de optie + Nieuwe instelling toevoegen.
- Voer voor de naam van de app-instelling 'PHP_INI_SCAN_DIR' in en voer voor waarde '/home/site/wwwroot/ini' in.
- Selecteer de knop Opslaan.
Notitie
Als u een PHP-extensie, zoals GD, opnieuw hebt gecompileerd, volgt u de stappen bij Php-extensies opnieuw compileren bij Azure-app Service - PHP-extensies toevoegen
Richtlijnen voor PHP_INI_SYSTEM aanpassen
Gebruik de PHP_INI_SCAN_DIR
app-instelling om PHP_INI_SYSTEM richtlijnen aan te passen (zie php.ini-instructies).
Voer eerst de volgende opdracht uit in Cloud Shell om een app-instelling toe te voegen met de naam 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"
Navigeer naar de Kudu-console (https://<app-name>.scm.azurewebsites.net/DebugConsole
) en navigeer naar d:\home\site
.
Maak een map met d:\home\site
de naam ini
en maak vervolgens een INI-bestand in de d:\home\site\ini
map (bijvoorbeeld settings.ini) met de instructies die u wilt aanpassen. Gebruik dezelfde syntaxis die u zou gebruiken in een php.ini-bestand .
Als u bijvoorbeeld de waarde van expose_php wilt wijzigen, voert u de volgende opdrachten uit:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Start de app opnieuw om de wijzigingen door te voeren.
Als u PHP_INI_SYSTEM instructies wilt aanpassen (zie php.ini-instructies), kunt u de .htaccess-benadering niet gebruiken. App Service biedt een afzonderlijk mechanisme met behulp van de PHP_INI_SCAN_DIR
app-instelling.
Voer eerst de volgende opdracht uit in Cloud Shell om een app-instelling toe te voegen met de naam 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
is de standaardmap waarin php.ini bestaat. /home/site/ini
is de aangepaste map waarin u een aangepast .ini-bestand toevoegt. U scheidt de waarden met een :
.
Navigeer naar de web-SSH-sessie met uw Linux-container (https://<app-name>.scm.azurewebsites.net/webssh/host
).
Maak een map met /home/site
de naam ini
en maak vervolgens een INI-bestand in de /home/site/ini
map (bijvoorbeeld settings.ini) met de instructies die u wilt aanpassen. Gebruik dezelfde syntaxis die u zou gebruiken in een php.ini-bestand .
Tip
In de ingebouwde Linux-containers in App Service wordt /home gebruikt als permanente gedeelde opslag.
Als u bijvoorbeeld de waarde van expose_php wilt wijzigen, voert u de volgende opdrachten uit:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Start de app opnieuw om de wijzigingen door te voeren.
PHP-extensies inschakelen
De ingebouwde PHP-installaties bevatten de meest gebruikte extensies. U kunt extra extensies op dezelfde manier inschakelen als u php.ini-instructies aanpast.
Notitie
De beste manier om de PHP-versie en de huidige php.ini-configuratie te zien, is door phpinfo() aan te roepen in uw app.
Ga als volgt te werk om extra extensies in te schakelen:
Voeg een bin
map toe aan de hoofdmap van uw app en plaats de .dll
extensiebestanden erin (bijvoorbeeld mongodb.dll). Zorg ervoor dat de extensies compatibel zijn met de PHP-versie in Azure en vc9 en niet-thread-safe (nts) compatibel zijn.
Implementeer uw wijzigingen.
Volg de stappen in Instructies aanpassen PHP_INI_SYSTEM, voeg de extensies toe aan het aangepaste .ini-bestand met de extensie of zend_extension instructies.
extension=d:\home\site\wwwroot\bin\mongodb.dll
zend_extension=d:\home\site\wwwroot\bin\xdebug.dll
Start de app opnieuw om de wijzigingen door te voeren.
De ingebouwde PHP-installaties bevatten de meest gebruikte extensies. U kunt extra extensies op dezelfde manier inschakelen als u php.ini-instructies aanpast.
Notitie
De beste manier om de PHP-versie en de huidige php.ini-configuratie te zien, is door phpinfo() aan te roepen in uw app.
Ga als volgt te werk om extra extensies in te schakelen:
Voeg een bin
map toe aan de hoofdmap van uw app en plaats de .so
extensiebestanden erin (bijvoorbeeld mongodb.so). Zorg ervoor dat de extensies compatibel zijn met de PHP-versie in Azure en vc9 en niet-thread-safe (nts) compatibel zijn.
Implementeer uw wijzigingen.
Volg de stappen in Instructies aanpassen PHP_INI_SYSTEM, voeg de extensies toe aan het aangepaste .ini-bestand met de extensie of zend_extension instructies.
extension=/home/site/wwwroot/bin/mongodb.so
zend_extension=/home/site/wwwroot/bin/xdebug.so
Start de app opnieuw om de wijzigingen door te voeren.
Toegang tot diagnostische logboeken
Gebruik het standaardhulpprogramma error_log() om uw diagnostische logboeken weer te geven in Azure-app Service.
Als u toegang wilt tot de consolelogboeken die worden gegenereerd binnen uw toepassingscode in de App Service, schakelt u diagnostische logboekregistratie in door de volgende opdracht in de Cloud Shell uit te voeren:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Mogelijk waarden voor --level
zijn: Error
, Warning
, Info
en Verbose
. Elk hoger niveau omvat het vorige niveau. Bijvoorbeeld: Error
omvat alleen foutberichten en Verbose
omvat alle berichten.
Nadat diagnostische logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.
Notitie
U kunt ook de logboekbestanden van de browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
U kunt op elk gewenst moment Ctrl
+C
typen om te stoppen met logboekstreaming.
U hebt vanuit de container toegang tot de consolelogboeken.
Schakel eerst logboekregistratie voor containers in door de volgende opdracht uit te voeren:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Vervang <app-name>
en <resource-group-name>
door de namen die van toepassing zijn op uw web-app.
Zodra logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.
U kunt op elk gewenst moment stoppen met logboekstreaming door Ctrl+C te typen.
U kunt ook de logboekbestanden in een browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Problemen oplossen
Wanneer een werkende PHP-app zich anders gedraagt in App Service of fouten bevat, probeert u het volgende:
- Open de logboekstream.
- Test de app lokaal in de productiemodus. App Service voert uw app uit in de productiemodus, dus u moet ervoor zorgen dat uw project werkt zoals verwacht in de productiemodus lokaal. Bijvoorbeeld:
- Afhankelijk van uw composer.json kunnen verschillende pakketten worden geïnstalleerd voor de productiemodus (
require
vs.require-dev
). - Bepaalde webframeworks kunnen statische bestanden anders implementeren in de productiemodus.
- Bepaalde webframeworks kunnen aangepaste opstartscripts gebruiken wanneer ze worden uitgevoerd in de productiemodus.
- Afhankelijk van uw composer.json kunnen verschillende pakketten worden geïnstalleerd voor de productiemodus (
- Voer uw app uit in App Service in de foutopsporingsmodus. In Laravel kunt u uw app bijvoorbeeld configureren om foutopsporingsberichten in productie uit te voeren door de app-instelling
APP_DEBUG
in te stellen optrue
.
robots933456 in logboeken
U ziet mogelijk het volgende bericht in de containerlogboeken:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
U kunt dit bericht veilig negeren. /robots933456.txt
is een dummy-URL-pad dat App Service gebruikt om te controleren of de container aanvragen kan verwerken. Een 404-antwoord geeft alleen aan dat het pad niet bestaat, maar laat App Service wel weten dat de container in orde is en klaar is om te reageren op aanvragen.
Volgende stappen
Of zie aanvullende informatiebronnen:
Naslaginformatie over omgevingsvariabelen en app-instellingen