Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Advertencia
PHP en Windows alcanzó el final del soporte técnico en noviembre de 2022. PHP solo se admite para App Service en Linux. Este artículo sirve solo como referencia.
En esta guía se muestra cómo configurar las aplicaciones web PHP, los back-ends móviles y las aplicaciones de API en Azure App Service. Se tratan las tareas de configuración más comunes.
Si no está familiarizado con App Service, primero debe seguir el tutorial Creación de una aplicación web PHP en Azure App Service e Implementación de una aplicación PHP, MySQL y Redis en Azure App Service .
Mostrar la versión de PHP
Para mostrar la versión actual de PHP, ejecute el siguiente comando. Puede usar Azure Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion
Reemplace <resource-group-name>
y <app-name>
por los nombres adecuados para la aplicación web.
Nota:
Para abordar una ranura de desarrollo, incluya el parámetro --slot
seguido del nombre de la ranura.
Para mostrar todas las versiones de PHP compatibles, ejecute el siguiente comando:
az webapp list-runtimes --os windows | grep PHP
En esta guía se muestra cómo configurar las aplicaciones web PHP, los back-ends móviles y las aplicaciones de API en Azure App Service. Se tratan las tareas de configuración más comunes.
Si no está familiarizado con App Service, primero debe seguir el tutorial Creación de una aplicación web PHP en Azure App Service e Implementación de una aplicación PHP, MySQL y Redis en Azure App Service .
Mostrar la versión de PHP
Para mostrar la versión actual de PHP, ejecute el siguiente comando. Puede usar Azure Cloud Shell.
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Reemplace <resource-group-name>
y <app-name>
por los nombres adecuados para la aplicación web.
Nota:
Para abordar una ranura de desarrollo, incluya el parámetro --slot
seguido del nombre de la ranura.
Para mostrar todas las versiones de PHP compatibles, ejecute el siguiente comando:
az webapp list-runtimes --os linux | grep PHP
Establecimiento de la versión de PHP
Para establecer la versión de PHP en 8.1, ejecute el siguiente comando:
az webapp config set --resource-group <resource-group-name> --name <app-name> --php-version 8.1
Para establecer la versión de PHP en 8.1, ejecute el siguiente comando:
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PHP|8.1"
¿Qué ocurre con los tiempos de ejecución obsoletos en App Service?
Los tiempos de ejecución obsoletos están en desuso por parte de la organización de mantenimiento o han detectado que tienen vulnerabilidades significativas. En consecuencia, se eliminan de las páginas de creación y configuración en el portal. Cuando un tiempo de ejecución obsoleto está oculto en el portal, cualquier aplicación que siga usando ese tiempo de ejecución continúa ejecutándose.
Si quiere crear una aplicación con una versión en tiempo de ejecución obsoleta que ya no se muestra en el portal, use la CLI de Azure, la plantilla de ARM o Bicep. Estas alternativas de implementación permiten crear entornos de ejecución en desuso que se han quitado en el portal, pero aún se admiten.
Si un entorno de ejecución se quita completamente de la plataforma de App Service, el propietario de la suscripción de Azure recibe un aviso por correo electrónico antes de la eliminación.
Ejecución de Composer
Si quiere que App Service ejecute Composer en el momento de la implementación, la manera más sencilla es incluir Composer en el repositorio.
En una ventana de terminal local, cambie el directorio a la raíz del repositorio. A continuación, siga las instrucciones de Download Composer (Descargar Composer ) para descargar composer.phar
en la raíz del directorio.
Ejecute los siguientes comandos. Para ejecutarlos, necesita npm instalado.
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
La raíz del repositorio ahora tiene dos nuevos archivos: .deployment
y deploy.sh
.
Abra deploy.sh
y busque la Deployment
sección , que tiene el aspecto de este ejemplo:
##################################################################################################################################
# Deployment
# ----------
Al final de la Deployment
sección, agregue la sección de código que necesita para ejecutar la herramienta necesaria:
# 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
Confirme todos los cambios e implemente el código mediante Git o mediante la implementación ZIP con la automatización de compilación habilitada. Composer debería estar ejecutándose como parte de la automatización de la implementación.
Ejecutar Bower, Gulp o Grunt
Si quiere que App Service ejecute herramientas de automatización populares en el momento de la implementación, como Bower, Gulp o Grunt, debe proporcionar un script de implementación personalizado. App Service ejecuta este script cuando se implementa mediante Git o mediante la implementación ZIP con la automatización de compilación habilitada.
Para permitir que el repositorio ejecute estas herramientas, debe agregarlas a las dependencias de package.json
. Por ejemplo:
"dependencies": {
"bower": "^1.7.9",
"grunt": "^1.0.1",
"gulp": "^3.9.1",
...
}
En una ventana de terminal local, cambie el directorio a la raíz del repositorio y ejecute los siguientes comandos. Para ejecutarlos, necesita npm instalado.
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
La raíz del repositorio ahora tiene dos nuevos archivos: .deployment
y deploy.sh
.
Abra deploy.sh
y busque la Deployment
sección , que tiene el aspecto de este ejemplo:
##################################################################################################################################
# Deployment
# ----------
En esta sección termina con la ejecución de npm install --production
.
Al final de la Deployment
sección, agregue la sección de código que necesita para ejecutar la herramienta necesaria:
Consulte un ejemplo en la muestra de MEAN.js, donde el script de implementación también ejecuta un comando npm install
personalizado.
Glorieta
Este fragmento de código ejecuta 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
Trago
Este fragmento de código ejecuta 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
Gruñido
Este fragmento de código ejecuta grunt
:
if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/grunt
exitWithMessageOnError "Grunt failed"
cd - > /dev/null
fi
Personalización de la automatización de compilaciones
Si implementa la aplicación mediante Git o mediante paquetes ZIP con la automatización de compilación habilitada, la automatización de compilación de App Service le guiará por la secuencia siguiente:
- Ejecute un script personalizado si
PRE_BUILD_SCRIPT_PATH
lo especifica. - Ejecute
php composer.phar install
. - Ejecute un script personalizado si
POST_BUILD_SCRIPT_PATH
lo especifica.
PRE_BUILD_COMMAND
y POST_BUILD_COMMAND
son variables de entorno que, de forma predeterminada, están vacías. Para ejecutar comandos anteriores a la compilación, defina PRE_BUILD_COMMAND
. Para ejecutar comandos posteriores a la compilación, defina POST_BUILD_COMMAND
.
En el ejemplo siguiente se especifican las dos variables en una serie de comandos, separados por comas:
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"
Para más variables de entorno para personalizar la automatización de compilaciones, consulte la configuración de Oryx.
Para obtener información sobre cómo App Service ejecuta y compila aplicaciones PHP en Linux, consulte la documentación de Oryx sobre cómo se detectan y compilan las aplicaciones PHP.
Personalización del inicio
Puede ejecutar un comando personalizado en el momento de inicio del contenedor. Ejecute el siguiente comando:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
Acceso a variables de entorno
En App Service, puede establecer la configuración de la aplicación fuera del código de la aplicación. A continuación, puede acceder a esa configuración mediante el patrón estándar getenv()
. Por ejemplo, para acceder a una configuración de una aplicación denominada DB_HOST
, use el código siguiente:
getenv("DB_HOST")
Cambiar la raíz del sitio
El marco web de su elección podría usar un subdirectorio como raíz del sitio. Por ejemplo, Laravel usa el public/
subdirectorio como raíz del sitio.
Para personalizar la raíz del sitio, establezca la ruta de acceso de la aplicación virtual usando el comando az resource update
. En el ejemplo siguiente se establece la raíz del sitio en el public/
subdirectorio del repositorio:
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
De forma predeterminada, Azure App Service apunta la ruta de acceso de la aplicación virtual raíz (/
) al directorio raíz de los archivos de aplicación implementados (sites\wwwroot
).
El marco web de su elección podría usar un subdirectorio como raíz del sitio. Por ejemplo, Laravel usa el public/
subdirectorio como raíz del sitio.
La imagen PHP predeterminada para el Servicio de Aplicaciones usa NGINX, y puedes cambiar la raíz del sitio configurando el servidor NGINX con la root
directiva. Este archivo de configuración de ejemplo contiene el siguiente fragmento de código que cambia la root
directiva:
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
}
...
El contenedor predeterminado usa el archivo de configuración en /etc/nginx/sites-available/default
. Las modificaciones que realice en este archivo se borran cuando se reinicia la aplicación. Para realizar un cambio eficaz en los reinicios de la aplicación, agregue un comando de inicio personalizado como este ejemplo:
cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload
Este comando reemplaza el archivo de configuración NGINX predeterminado por un archivo denominado default
en la raíz del repositorio y reinicia NGINX.
Detección de una sesión HTTPS
En App Service, la terminación de TLS/SSL se produce en los equilibradores de carga de red, por lo que todas las solicitudes HTTPS llegan a la aplicación como solicitudes HTTP sin cifrar. Si la lógica de la aplicación necesita comprobar si las solicitudes de usuario están cifradas, inspeccione el X-Forwarded-Proto
encabezado:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}
Los marcos web más usados le permiten acceder a la información de X-Forwarded-*
en el patrón de aplicación estándar. En CodeIgniter, la función is_https() comprueba el valor de de X_FORWARDED_PROTO
forma predeterminada.
Personalización de la configuración de php.ini
Si necesita realizar cambios en la instalación de PHP, puede cambiar cualquiera de las directivas dephp.ini mediante los pasos siguientes.
Nota:
La mejor manera de ver la versión de PHP y la configuración actual php.ini
es llamar a phpinfo()
en tu aplicación.
Personalizar directivas que no sean PHP_INI_SYSTEM
Para personalizar las directivas PHP_INI_USER
, PHP_INI_PERDIR
y PHP_INI_ALL
, agregue un archivo .user.ini
al directorio raíz de su aplicación.
Agregue valores de configuración al .user.ini
archivo mediante la misma sintaxis que usaría en un php.ini
archivo. Por ejemplo, si desea activar la configuración display_errors
y establecer la configuración upload_max_filesize
en 10M
, su archivo .user.ini
contendrá este texto:
; Example Settings
display_errors=On
upload_max_filesize=10M
; Write errors to d:\home\LogFiles\php_errors.log
; log_errors=On
Vuelva a implementar la aplicación con los cambios y reiníciela.
Como alternativa al uso de un archivo .user.ini
, puedes usar ini_set()
en tu aplicación para personalizar estas directivas que no son PHP_INI_SYSTEM
.
Para personalizar las directivas PHP_INI_USER
, PHP_INI_PERDIR
y PHP_INI_ALL
de las aplicaciones web de Linux, como upload_max_filesize
y expose_php
, utilice un archivo .ini personalizado. Puede crearlo en una sesión SSH. En primer lugar, configure el directorio :
- Vaya al sitio de Kudu. Para obtener los valores aleatorios de hash y región, en la información general de la aplicación, copie el dominio predeterminado.
- En el menú superior, seleccione Consola de depuración y, a continuación, Bash o SSH.
- En Bash o SSH, vaya al directorio
/home/site/wwwroot
. - Cree un directorio denominado
ini
(por ejemplo,mkdir ini
). - Cambie el directorio de trabajo actual a la
ini
carpeta que creó.
A continuación, cree un archivo de.ini donde agregue su configuración. En este ejemplo se usa extensions.ini
. No hay editores de archivos como Vi, Vim o Nano, así que úselo Echo
para agregar la configuración al archivo. Cambie el valor de upload_max_filesize
de 2M
a 50M
. Use el siguiente comando para agregar la configuración y crear un extensions.ini
archivo si aún no existe uno:
/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>
En Azure Portal, agregue una configuración de aplicación para examinar el ini
directorio que acaba de crear para aplicar el cambio para upload_max_filesize
:
- Vaya a Azure Portal y seleccione la aplicación PHP de App Service Linux.
- Vaya a Configuración>Variables de entorno.
- Seleccione +Agregar.
- En Nombre , escriba PHP_INI_SCAN_DIR y, en Valor, escriba
:/home/site/wwwroot/ini
. - Seleccione Aplicar y vuelva a aplicar . Confirme los cambios.
Nota:
Si ha vuelto a compilar una extensión PHP, como GD, siga los pasos descritos en Volver a compilar extensiones PHP.
Personalización de directivas de PHP_INI_SYSTEM
Para personalizar directivas PHP_INI_SYSTEM
, use la configuración de aplicación PHP_INI_SCAN_DIR
.
Primero, ejecute el siguiente comando para agregar una configuración de la aplicación llamada 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"
En Azure Portal, seleccione la aplicación. En Herramientas de desarrollo , en el menú de la barra lateral, seleccione Herramientas avanzadas y, a continuación, vaya a d:\home\site
usar SSH.
Cree un directorio en d:\home\site
denominado ini
. A continuación, cree un archivo .ini en el d:\home\site\ini
directorio, por ejemplo, settings.ini
, con las directivas que desea personalizar. Use la misma sintaxis que usaría en un php.ini
archivo.
Por ejemplo, para cambiar el valor de expose_php
, ejecute los siguientes comandos:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Para que los cambios surtan efecto, reinicie la aplicación.
Para personalizar directivas PHP_INI_SYSTEM
, no puede usar el enfoque de .htaccess. App Service proporciona un mecanismo independiente que usa la configuración de aplicación PHP_INI_SCAN_DIR
.
Primero, ejecute el siguiente comando para agregar una configuración de la aplicación llamada 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"
El valor /usr/local/etc/php/conf.d
es el directorio predeterminado donde php.ini
existe. El valor /home/site/ini
es el directorio personalizado en el que se agrega un archivo de.ini personalizado. Separa los valores con dos puntos (:
).
Vaya a la sesión SSH web con su contenedor de Linux.
Cree un directorio en /home/site
denominado ini
. A continuación, cree un archivo .ini en el /home/site/ini
directorio, por ejemplo, settings.ini
, con las directivas que desea personalizar. Use la misma sintaxis que usaría en un php.ini
archivo.
Sugerencia
Los contenedores integrados de Linux de App Service usan /home
como almacenamiento compartido persistente.
Por ejemplo, para cambiar el valor de expose_php
, ejecute los siguientes comandos:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Para que los cambios surtan efecto, reinicie la aplicación.
Habilitación de extensiones PHP
Las instalaciones PHP integradas contienen las extensiones más usadas. Puede habilitar extensiones adicionales en la misma forma que personaliza las directivas de php.ini.
Nota:
La mejor manera de ver la versión de PHP y la configuración actual php.ini
es llamar a phpinfo()
en tu aplicación.
Para habilitar otras extensiones, siga estos pasos:
Agregue un
bin
directorio al directorio raíz de la aplicación y coloque en él los archivos de extensión .dll , por ejemplo,mongodb.dll
. Asegúrese de que las extensiones son compatibles con la versión de PHP en Azure y que son compatibles con VC9 y que no son compatibles con subprocesos (NTS).Implemente los cambios.
Siga los pasos descritos en Personalizar directivas PHP_INI_SYSTEM y agregue las extensiones al archivo de .ini personalizado con la directiva de extensión o zend_extension :
extension=d:\home\site\wwwroot\bin\mongodb.dll zend_extension=d:\home\site\wwwroot\bin\xdebug.dll
Para que los cambios surtan efecto, reinicie la aplicación.
Las instalaciones PHP integradas contienen las extensiones más usadas. Puede habilitar extensiones adicionales en la misma forma que personaliza las directivas de php.ini.
Nota:
La mejor manera de ver la versión de PHP y la configuración actual php.ini
es llamar a phpinfo()
en tu aplicación.
Para habilitar otras extensiones, siga estos pasos:
Agregue un
bin
directorio al directorio raíz de la aplicación y coloque en él los archivos de extensión .so (por ejemplo,mongodb.so
). Asegúrese de que las extensiones son compatibles con la versión de PHP en Azure y que son compatibles con VC9 y que no son compatibles con subprocesos (NTS).Implemente los cambios.
Siga los pasos descritos en Personalizar directivas PHP_INI_SYSTEM y agregue las extensiones al archivo de .ini personalizado con la directiva de extensión o zend_extension :
extension=/home/site/wwwroot/bin/mongodb.so zend_extension=/home/site/wwwroot/bin/xdebug.so
Para que los cambios surtan efecto, reinicie la aplicación.
Acceso a los registros de diagnóstico
Use la herramienta estándar error_log()
para que los registros de diagnóstico aparezcan en Azure App Service.
Para acceder a los registros de consola generados desde el código de la aplicación en App Service, active el registro de diagnóstico mediante la ejecución del siguiente comando en Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Los valores posibles para --level
son Error
, Warning
, Info
y Verbose
. Cada nivel subsiguiente incluye el nivel anterior. Por ejemplo, Error
solo incluye mensajes de error.
Verbose
incluye todos los mensajes.
Después de activar el registro de diagnóstico, ejecute el siguiente comando para ver la secuencia de registro:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Si los registros de consola no aparecen inmediatamente, vuelva a comprobar en 30 segundos.
Para detener el streaming de registros en cualquier momento, seleccione Ctrl+C.
Puede acceder a los registros de consola generados desde dentro del contenedor.
Para activar el registro de contenedores, ejecute el siguiente comando:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Reemplace <app-name>
y <resource-group-name>
por los nombres adecuados para la aplicación web.
Después de activar el registro de contenedores, ejecute el siguiente comando para ver la secuencia de registro:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Si los registros de consola no aparecen inmediatamente, vuelva a comprobar en 30 segundos.
Para detener el streaming de registros en cualquier momento, seleccione Ctrl+C.
Solución de problemas
Cuando una aplicación PHP en funcionamiento se comporta de forma diferente en App Service o tiene errores, pruebe las siguientes soluciones:
- Acceda a la secuencia de registros de diagnóstico.
- Pruebe la aplicación localmente en modo de producción. App Service ejecuta la aplicación en modo de producción, por lo que debe asegurarse de que el proyecto funciona según lo previsto en el modo de producción localmente. Por ejemplo:
- Dependiendo del
composer.json
archivo, es posible que se instalen paquetes diferentes para el modo de producción (require
frente arequire-dev
). - Es posible que algunas plataformas web implementen archivos estáticos de forma diferente en modo de producción.
- Es posible que algunas plataformas web usen scripts de inicio personalizados cuando se ejecutan en modo de producción.
- Dependiendo del
- Ejecute la aplicación en App Service en modo de depuración. Por ejemplo, en Laravel, puede configurar la aplicación para que genere mensajes de depuración en producción al configurar el ajuste de la aplicación
APP_DEBUG
entrue
.
Omitir el mensaje robots933456 en los registros
Es posible que vea el mensaje siguiente en los registros de contenedor:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Puede omitir este mensaje sin problemas.
/robots933456.txt
es una ruta URL ficticia que utiliza App Service para comprobar si el contenedor es capaz de procesar solicitudes. Una respuesta 404 indica que la ruta de acceso no existe y indica a App Service que el contenedor está en buen estado y listo para responder a las solicitudes.