Tutorial: Creación de una aplicación PHP y MySQL en Azure App Service
Azure App Service proporciona un servicio de hospedaje web muy escalable y con aplicación automática de revisiones con el sistema operativo Windows. En este tutorial, se muestra cómo crear una aplicación PHP en Azure y conectarla a una base de datos MySQL. Cuando haya terminado, tendrá una aplicación de Laravel que se ejecuta en Azure App Service en Windows.
Azure App Service proporciona un servicio de hospedaje web muy escalable y con aplicación automática de revisiones con el sistema operativo Linux. En este tutorial, se muestra cómo crear una aplicación PHP en Azure y conectarla a una base de datos MySQL. Cuando haya terminado, tendrá una aplicación de Laravel que se ejecuta en Azure App Service en Linux.
En este tutorial, aprenderá a:
- Crear una base de datos MySQL en Azure
- Conectar una aplicación PHP a MySQL
- Implementar la aplicación en Azure
- Actualizar el modelo de datos y volver a implementar la aplicación
- Transmitir registros de diagnóstico desde Azure
- Administrar la aplicación en Azure Portal
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Requisitos previos
Para completar este tutorial:
- Instalación de Git
- Instalación de PHP 5.6.4, o cualquier versión posterior
- Instalación de Composer
- Habilite las siguientes extensiones de PHP que Laravel necesita: OpenSSL, PDO-MySQL, Mbstring, Tokenizer, XML
- Instale e inicie MySQL
- Use el entorno de Bash en Azure Cloud Shell.
- Si lo prefiere, instale la CLI de Azure para ejecutar sus comandos de referencia.- Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.- Cuando se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
- Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade..
Preparación de MySQL local
En este paso, creará una base de datos en el servidor MySQL local para usarlo en este tutorial.
Conexión a un servidor MySQL local
En una ventana de terminal, conéctese al servidor MySQL local. Esta ventana de terminal se puede usar para ejecutar todos los comandos de este tutorial.
mysql -u root -p
Si se le pide una contraseña, escriba la de la cuenta root. Si no recuerda la contraseña de la cuenta raíz, consulte MySQL: How to Reset the Root Password (MySQL: Instrucciones de restablecimiento de la contraseña de la cuenta raíz).
Si el comando se ejecuta correctamente, significa que el servidor MySQL está en ejecución. De lo contrario, siga los pasos posteriores a la instalación de MySQL para asegurarse de iniciar el servidor local de MySQL.
Creación de una base de datos local
En el símbolo del sistema de
mysql, cree una base de datos.CREATE DATABASE sampledb;Escriba
quitpara salir de la conexión del servidor.quit
Creación de una aplicación PHP local
En este paso, obtendrá una aplicación Laravel de ejemplo, configurará la conexión a base de datos correspondiente y la ejecutará de forma local.
Clonación del ejemplo
En la ventana del terminal, use cd para cambiar a un directorio de trabajo.
Clone el repositorio de ejemplo y cambie a la raíz del repositorio.
git clone https://github.com/Azure-Samples/laravel-tasks cd laravel-tasksAsegúrese de que la rama predeterminada sea
main.git branch -m mainSugerencia
App Service no exige el cambio de nombre de rama. Sin embargo, dado que muchos repositorios cambian su rama predeterminada a
main, en este tutorial también se muestra cómo implementar un repositorio desdemain. Para más información, consulte Cambio de la rama de implementación.Instale los paquetes requeridos.
composer install
Configuración de la conexión a MySQL
En la raíz del repositorio, cree un archivo llamado .env. Copie las siguientes variables en el archivo .env. Reemplace el marcador de posición <root_password> por la contraseña del usuario raíz de MySQL.
APP_ENV=local
APP_DEBUG=true
APP_KEY=
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=<root_password>
Para obtener información sobre la forma en que Laravel usa el archivo .env, consulte Laravel Environment Configuration (Configuración del entorno de Laravel).
Ejecución local del código
Ejecute las migraciones de la base de datos Laravel para crear las tablas que necesita la aplicación. Para ver qué tablas se crean en las migraciones, mire en el directorio database/migrations del repositorio de Git.
php artisan migrateGenere una nueva clave de aplicación Laravel.
php artisan key:generateEjecute la aplicación.
php artisan serveVaya a
http://localhost:8000en un explorador. Agregue algunas tareas a la página.
Para detener PHP, escriba
Ctrl + Cen el terminal.
Creación de MySQL en Azure
En este paso, creará una base de datos MySQL en Azure Database for MySQL. Posteriormente, configurará la aplicación PHP para que se conecte a esta base de datos.
Crear un grupo de recursos
Un grupo de recursos es un contenedor lógico en el que los recursos de Azure, como aplicaciones web, bases de datos y cuentas de almacenamiento, se implementen y administren. Por ejemplo, más adelante puede elegir eliminar todo el grupo de recursos en un solo paso.
En Cloud Shell, cree un grupo de recursos con el comando az group create. En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la ubicación Oeste de Europa. Para ver todas las ubicaciones que se admiten en App Service en el nivel Gratis, ejecute el comando az appservice list-locations --sku FREE.
az group create --name myResourceGroup --location "West Europe"
Generalmente se crean el grupo de recursos y los recursos en una región cercana.
Cuando finaliza el comando, una salida de JSON muestra las propiedades del grupo de recursos.
Creación de un servidor MySQL
En Cloud Shell, cree un servidor en Azure Database for MySQL con el comando az mysql server create.
En el siguiente comando, sustituya el marcador de posición <mysql-server-name> por un nombre de servidor único, el marcador de posición <admin-user> por un nombre de usuario y el marcador de posición <admin-password> por una contraseña. El nombre del servidor se usa como parte del punto de conexión de MySQL (https://<mysql-server-name>.mysql.database.azure.com), por lo que debe ser único en todos los servidores de Azure. Para más información sobre cómo seleccionar la SKU de base de datos de MySQL, consulte Creación de un servidor de Azure Database for MySQL.
az mysql server create --resource-group myResourceGroup --name <mysql-server-name> --location "West Europe" --admin-user <admin-user> --admin-password <admin-password> --sku-name B_Gen5_1
Cuando se crea el servidor MySQL, la CLI de Azure muestra información similar a la del siguiente ejemplo:
{
"administratorLogin": "<admin-user>",
"administratorLoginPassword": null,
"fullyQualifiedDomainName": "<mysql-server-name>.mysql.database.azure.com",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>",
"location": "westeurope",
"name": "<mysql-server-name>",
"resourceGroup": "myResourceGroup",
...
- < Output has been truncated for readability >
}
Configuración del firewall del servidor
En Cloud Shell, cree una regla de firewall para que el servidor MySQL permita conexiones de cliente con el comando
az mysql server firewall-rule create. Cuando tanto la dirección IP de inicio como final están establecidas en 0.0.0.0., el firewall solo se abre para otros recursos de Azure.az mysql server firewall-rule create --name allAzureIPs --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0Sugerencia
Puede ser incluso más restrictivo con su regla de firewall usando solo las direcciones IP de salida que utiliza su aplicación.
En Cloud Shell, ejecute de nuevo el comando para permitir el acceso desde el equipo local y reemplace <your-ip-address> por su dirección IP IPv4 local.
az mysql server firewall-rule create --name AllowLocalClient --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address=<your-ip-address> --end-ip-address=<your-ip-address>
Creación de una base de datos de producción
En la ventana del terminal local, conéctese al servidor MySQL de Azure. Use el valor que especificó anteriormente para <admin-user> y <mysql-server-name> . Cuando se le solicite una contraseña, utilice la contraseña que especificó al crear la base de datos en Azure.
mysql -u <admin-user>@<mysql-server-name> -h <mysql-server-name>.mysql.database.azure.com -P 3306 -pEn el símbolo del sistema de
mysql, cree una base de datos.CREATE DATABASE sampledb;Cree un usuario de base de datos denominado phpappuser y concédale todos los privilegios de la base de datos
sampledb. Para simplificar el tutorial, utilice MySQLAzure2017 como contraseña.CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2017'; GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';Escriba
quitpara salir de la conexión del servidor.quit
Conexión de una aplicación a Azure MySQL
En este paso, conectará la aplicación PHP a la base de datos MySQL que creó en Azure Database for MySQL.
Configuración de la conexión de base de datos
En la raíz del repositorio, cree un archivo .env.production y copie en él las siguientes variables. Reemplace el marcador de posición <mysql-server-name> en DB_HOST y DB_USERNAME.
APP_ENV=production
APP_DEBUG=true
APP_KEY=
DB_CONNECTION=mysql
DB_HOST=<mysql-server-name>.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser@<mysql-server-name>
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true
Guarde los cambios.
Sugerencia
Para proteger la información de conexión de MySQL, este archivo ya se ha excluido del repositorio de Git (vea .gitignore en la raíz del repositorio). Más adelante, aprenderá a configurar variables de entorno en App Service para conectarse a la base de datos en Azure Database for MySQL. Con las variables de entorno, no es preciso el archivo .env en App Service.
Configuración del certificado TLS/SSL
De manera predeterminada, Azure Database for MySQL aplica las conexiones TLS de los clientes. Para conectarse a la base de datos MySQL en Azure, debe utilizar el certificado .pem proporcionado por Azure Database for MySQL.
Abra config/database.php y agregue los parámetros sslmode y options a connections.mysql, como se muestra en el código siguiente.
'mysql' => [
...
'sslmode' => env('DB_SSLMODE', 'prefer'),
'options' => (env('MYSQL_SSL')) ? [
PDO::MYSQL_ATTR_SSL_KEY => '/ssl/BaltimoreCyberTrustRoot.crt.pem',
] : []
],
'mysql' => [
...
'sslmode' => env('DB_SSLMODE', 'prefer'),
'options' => (env('MYSQL_SSL') && extension_loaded('pdo_mysql')) ? [
PDO::MYSQL_ATTR_SSL_KEY => '/ssl/BaltimoreCyberTrustRoot.crt.pem',
] : []
],
El certificado BaltimoreCyberTrustRoot.crt.pem se proporciona en el repositorio por comodidad en este tutorial.
Prueba de la aplicación de forma local
Ejecute migraciones de base de datos Laravel con .env.production como archivo de entorno para crear las tablas de la base de datos MySQL en Azure Database for MySQL. Recuerde que . env.production tiene la información de conexión a su base de datos MySQL de Azure.
php artisan migrate --env=production --forceEl archivo .env.production aún no cuenta con una clave de aplicación válida. Genere una nueva para él en el terminal.
php artisan key:generate --env=production --forceEjecute la aplicación de ejemplo con .env.production como archivo de entorno.
php artisan serve --env=productionVaya a
http://localhost:8000. Si la página se carga sin errores, significa que la aplicación PHP se está conectado a la base de datos MySQL de Azure.Agregue algunas tareas a la página.

Para detener PHP, escriba
Ctrl + Cen el terminal.
Confirmación de los cambios
Ejecute los siguientes comandos de Git para confirmar los cambios:
git add .
git commit -m "database.php updates"
La aplicación está lista para implementarse.
Implementar en Azure
En este paso se implementará la aplicación PHP conectada a MySQL en Azure App Service.
Configuración de un usuario de implementación
Se puede implementar FTP y Git local en una aplicación web de Azure mediante un usuario de implementación. Una vez configurado este usuario de implementación, podrá usarlo en todas las implementaciones de Azure. El nombre de usuario y la contraseña en el nivel de cuenta son diferentes de las credenciales de suscripción de Azure.
Para configurar el usuario de implementación, ejecute el comando az webapp deployment user set en Azure Cloud Shell. Reemplace <username> y <password> por un nombre de usuario y una contraseña de usuario de implementación.
- El nombre de usuario debe ser único dentro de Azure y no debe contener el símbolo "@" para las inserciones de Git local.
- La contraseña debe tener al menos ocho caracteres y dos de los tres elementos siguientes: letras, números y símbolos.
az webapp deployment user set --user-name <username> --password <password>
La salida JSON muestra la contraseña como null. Si se produce un error 'Conflict'. Details: 409, cambie el nombre de usuario. Si se produce un error 'Bad Request'. Details: 400, use una contraseña más segura.
Anote el nombre de usuario y la contraseña que se usarán para implementar las aplicaciones web.
Creación de un plan de App Service
En Cloud Shell, cree un plan de App Service con el comando az appservice plan create.
En el siguiente ejemplo se crea un plan de App Service denominado myAppServicePlan con el plan de tarifa Gratis:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
Cuando se crea el plan de App Service, la CLI de Azure muestra información similar al ejemplo siguiente:
{
"adminSiteName": null,
"appServicePlanName": "myAppServicePlan",
"geoRegion": "West Europe",
"hostingEnvironmentProfile": null,
"id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
"kind": "app",
"location": "West Europe",
"maximumNumberOfWorkers": 1,
"name": "myAppServicePlan",
< JSON data removed for brevity. >
"targetWorkerSizeId": 0,
"type": "Microsoft.Web/serverfarms",
"workerTierName": null
}
En Cloud Shell, cree un plan de App Service con el comando az appservice plan create.
En el siguiente ejemplo se crea un plan de App Service denominado myAppServicePlan con el plan de tarifa Gratis:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux
Cuando se crea el plan de App Service, la CLI de Azure muestra información similar al ejemplo siguiente:
{
"freeOfferExpirationTime": null,
"geoRegion": "West Europe",
"hostingEnvironmentProfile": null,
"id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
"kind": "linux",
"location": "West Europe",
"maximumNumberOfWorkers": 1,
"name": "myAppServicePlan",
< JSON data removed for brevity. >
"targetWorkerSizeId": 0,
"type": "Microsoft.Web/serverfarms",
"workerTierName": null
}
Creación de una aplicación web
Cree una aplicación web en el plan de App Service de myAppServicePlan.
En Cloud Shell, puede usar el comando az webapp create. En el siguiente ejemplo, reemplace <app-name> por un nombre único global de aplicación (los caracteres válidos son a-z, 0-9 y -). El tiempo de ejecución se establece en PHP|7.2. Para ver todos los entornos en tiempo de ejecución admitidos, ejecute az webapp list-runtimes --linux.
# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
Cuando se haya creado la aplicación web, la CLI de Azure mostrará información similar a la del ejemplo siguiente:
Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
"availabilityState": "Normal",
"clientAffinityEnabled": true,
"clientCertEnabled": false,
"cloningInfo": null,
"containerSize": 0,
"dailyMemoryTimeQuota": 0,
"defaultHostName": "<app-name>.azurewebsites.net",
"deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
"enabled": true,
< JSON data removed for brevity. >
}
Ha creado una nueva aplicación web vacía, con la implementación de Git habilitada.
Nota
La dirección URL del repositorio de Git remoto se muestra en la propiedad deploymentLocalGitUrl, con el formato https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Guarde esta dirección URL, ya que la necesitará más adelante.
Cree una aplicación web en el plan de App Service de myAppServicePlan.
En Cloud Shell, puede usar el comando az webapp create. En el siguiente ejemplo, reemplace <app-name> por un nombre único global de aplicación (los caracteres válidos son a-z, 0-9 y -). El tiempo de ejecución se establece en PHP|7.2. Para ver todos los entornos en tiempo de ejecución admitidos, ejecute az webapp list-runtimes --linux.
# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
Cuando se haya creado la aplicación web, la CLI de Azure mostrará información similar a la del ejemplo siguiente:
Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
"availabilityState": "Normal",
"clientAffinityEnabled": true,
"clientCertEnabled": false,
"cloningInfo": null,
"containerSize": 0,
"dailyMemoryTimeQuota": 0,
"defaultHostName": "<app-name>.azurewebsites.net",
"deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
"enabled": true,
< JSON data removed for brevity. >
}
Ha creado una nueva aplicación web vacía, con la implementación de Git habilitada.
Nota
La dirección URL del repositorio de Git remoto se muestra en la propiedad deploymentLocalGitUrl, con el formato https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Guarde esta dirección URL, ya que la necesitará más adelante.
Configuración de la base de datos
En App Service, las variables de entorno se establecen como valores de aplicación mediante el comando az webapp config appsettings set.
El siguiente comando permite configurar los valores de aplicación DB_HOST, DB_DATABASE, DB_USERNAME y DB_PASSWORD. Reemplace los marcadores de posición <app-name> y <mysql-server-name> .
az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DB_HOST="<mysql-server-name>.mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser@<mysql-server-name>" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"
Para acceder a la configuración puede usar el método getenv de PHP. El código de Laravel usa un contenedor env sobre el elemento getenv de PHP. Por ejemplo, la configuración de MySQL de config/database.php es como el código siguiente:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
...
],
Configuración de las variables de entorno de Laravel
Laravel necesita una clave de aplicación en App Service. Puede configurarlo con valores de aplicación.
En la ventana del terminal local, use
php artisanpara generar una clave de aplicación sin guardarla en .env.php artisan key:generate --showEn Cloud Shell, establezca la clave de aplicación en la aplicación App Service, para lo que hay que usar el comando
az webapp config appsettings set. Reemplace los marcadores de posición <app-name> y <outputofphpartisankey:generate> .az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings APP_KEY="<output_of_php_artisan_key:generate>" APP_DEBUG="true"APP_DEBUG="true"indica a Laravel que devuelva información de depuración si la aplicación implementada encuentra errores. Al ejecutar una aplicación de producción, establézcala enfalse, que es más seguro.
Establecimiento de la ruta de acceso de la aplicación virtual
Establezca la ruta de acceso de la aplicación virtual para la aplicación. Este paso se requiere porque el ciclo de vida de la aplicación Laravel comienza en el directorio public, en lugar de en el directorio raíz de la aplicación. Otros marcos PHP cuyo ciclo de vida comienza en el directorio raíz pueden funcionar sin necesidad de configurar manualmente la ruta de acceso de la aplicación virtual.
En Cloud Shell, establezca la ruta de acceso a la aplicación virtual con el comando az resource update. Reemplace el marcador de posición <app-name> .
az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01
De manera predeterminada, Azure App Service apunta la ruta de acceso de la aplicación virtual raíz ( / ) al directorio raíz de los archivos de la aplicación implementada (sites\wwwroot).
El ciclo de vida de la aplicación de Laravel comienza en el directorio public en lugar de en el directorio raíz de la aplicación. La imagen de Docker PHP predeterminada para App Service utiliza Apache y no le permite personalizar DocumentRoot para Laravel. Sin embargo, puede usar .htaccess para volver a escribir todas las solicitudes para que apunten a /public en lugar de al directorio raíz. En la raíz del repositorio, ya se ha agregado .htaccess con este fin. Con él, la aplicación Laravel está preparada para implementarse.
Para más información, consulte Change site root (Cambio de la raíz del sitio).
Inserción en Azure desde Git
Puesto que va a implementar la rama
main, debe establecer la rama de implementación predeterminada para la aplicación de App Service enmain(consulte Cambio de la rama de implementación). En Cloud Shell, establezca el valor de la aplicaciónDEPLOYMENT_BRANCHcon el comandoaz webapp config appsettings set.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'En la ventana del terminal local, agregue una instancia remota de Azure al repositorio de Git local. Reemplace <deploymentLocalGitUrl-from-create-step> por la dirección URL del repositorio Git remoto que guardó en Creación de una aplicación web.
git remote add azure <deploymentLocalGitUrl-from-create-step>Realice la insercion en la instancia remota de Azure para implementar la aplicación con el comando siguiente. Cuando el Administrador de credenciales de Git le solicite las credenciales, asegúrese de que especifica las que creó en Configuración de un usuario de implementación, no las que se usan para iniciar sesión en Azure Portal.
git push azure mainEste comando puede tardar varios minutos en ejecutarse. Durante la ejecución, muestra información similar a la del ejemplo siguiente:
Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'a5e076db9c'. remote: Running custom deployment command... remote: Running deployment command... ... < Output has been truncated for readability >
Nota
Puede observar que, al final del proceso de implementación, se instalan paquetes de Composer. App Service no ejecuta estas automatizaciones durante la implementación predeterminada, por lo que este repositorio de ejemplo tiene tres archivos adicionales en su directorio raíz para permitirlo:
.deployment: este archivo indica a App Service que ejecutebash deploy.shcomo script de implementación personalizado.deploy.sh: el script de implementación personalizado. Si revisa el archivo, verá que se ejecutaphp composer.phar installdespués denpm install.composer.phar: el administrador de paquetes de Composer.
Puede aplicar este enfoque para agregar cualquier paso a la implementación basada en Git en App Service. Para obtener más información, consulte Custom Deployment Script (Script de implementación personalizado).
Puesto que va a implementar la rama
main, debe establecer la rama de implementación predeterminada para la aplicación de App Service enmain(consulte Cambio de la rama de implementación). En Cloud Shell, establezca el valor de la aplicaciónDEPLOYMENT_BRANCHcon el comandoaz webapp config appsettings set.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'En la ventana del terminal local, agregue una instancia remota de Azure al repositorio de Git local. Reemplace <deploymentLocalGitUrl-from-create-step> por la dirección URL del repositorio Git remoto que guardó en Creación de una aplicación web.
git remote add azure <deploymentLocalGitUrl-from-create-step>Realice la insercion en la instancia remota de Azure para implementar la aplicación con el comando siguiente. Cuando el Administrador de credenciales de Git le solicite las credenciales, asegúrese de que especifica las que creó en Configuración de un usuario de implementación, no las que se usan para iniciar sesión en Azure Portal.
git push azure mainEste comando puede tardar varios minutos en ejecutarse. Durante la ejecución, muestra información similar a la del ejemplo siguiente:
Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'a5e076db9c'. remote: Running custom deployment command... remote: Running deployment command... ... < Output has been truncated for readability >
Navegación hasta la aplicación de Azure
Vaya a http://<app-name>.azurewebsites.net y agregue algunas tareas a la lista.
Ya está ejecutando una aplicación PHP orientada a datos en Azure App Service.
Actualización local del modelo y nueva implementación
En este paso, se realiza un cambio sencillo en el modelo de datos task y en la aplicación web y, después, se publica la actualización en Azure.
Para el escenario de las tareas, modifique la aplicación de forma que pueda marcar una tarea como completada.
Adición de una columna
En la ventana del terminal local, vaya a la raíz del repositorio de Git.
Generar una migración de base de datos nueva para la tabla
tasks:php artisan make:migration add_complete_column --table=tasksEste comando muestra el nombre del archivo de migración generado. Busque este archivo en database/migrations y ábralo.
Reemplace el método
uppor el código siguiente:public function up() { Schema::table('tasks', function (Blueprint $table) { $table->boolean('complete')->default(False); }); }El código anterior agrega una columna booleana a la tabla
tasksdenominadacomplete.Reemplace el método
downpor el siguiente código para la acción de reversión:public function down() { Schema::table('tasks', function (Blueprint $table) { $table->dropColumn('complete'); }); }En la ventana del terminal local, ejecute las migraciones de base de datos Laravel para realizar el cambio en la base de datos local.
php artisan migrateEn función de la convención de nomenclatura de Laravel, el modelo
Task(consulte app/Task.php) se asigna a la tablatasksde manera predeterminada.
Actualización de la lógica de aplicación
Abra el archivo routes/web.php. La aplicación define aquí tanto sus rutas como su lógica de negocios.
Al final del archivo, agregue una ruta con el siguiente código:
/** * Toggle Task completeness */ Route::post('/task/{id}', function ($id) { error_log('INFO: post /task/'.$id); $task = Task::findOrFail($id); $task->complete = !$task->complete; $task->save(); return redirect('/'); });El código anterior lleva a cabo una sencilla actualización en el modelo de datos, para lo que alterna el valor de
complete.
Actualización de la vista
Abra el archivo resources/views/tasks.blade.php. Busque la etiqueta de apertura
<tr>y reemplácela por:<tr class="{{ $task->complete ? 'success' : 'active' }}" >El código anterior cambia el color de la fila en función de si la tarea se ha completado.
En la siguiente línea, tiene el siguiente código:
<td class="table-text"><div>{{ $task->name }}</div></td>Reemplace esta línea al completo por el siguiente código:
<td> <form action="{{ url('task/'.$task->id) }}" method="POST"> {{ csrf_field() }} <button type="submit" class="btn btn-xs"> <i class="fa {{$task->complete ? 'fa-check-square-o' : 'fa-square-o'}}"></i> </button> {{ $task->name }} </form> </td>El código anterior agrega el botón de envío que hace referencia a la ruta que definió previamente.
Prueba local de los cambios
En la ventana del terminal local, ejecute el servidor de desarrollo desde el directorio raíz del repositorio de Git.
php artisan servePara ver cómo cambia el estado de la tarea, navegue hasta
http://localhost:8000y active la casilla.
Para detener PHP, escriba
Ctrl + Cen el terminal.
Publicación de los cambios en Azure
En la ventana del terminal local, ejecute las migraciones de base de datos Laravel con la cadena de conexión de producción para realizar el cambio en la base de datos de Azure.
php artisan migrate --env=production --forceConfirme todos los cambios en Git y, después, inserte los cambios en el código en Azure.
git add . git commit -m "added complete checkbox" git push azure mainUna vez que
git pushesté completo, vaya a la aplicación de Azure y pruebe la nueva funcionalidad.
Si ha agregado tareas, estas se conservarán en la base de datos. Las actualizaciones que efectúe en el esquema de datos dejan los datos existentes intactos.
Transmisión de registros de diagnóstico
Mientras se ejecuta la aplicación PHP en Azure App Service, los registros de la consola se canalizan a su terminal. De este modo, puede obtener los mismos mensajes de diagnóstico para ayudarle a depurar errores de la aplicación.
Para iniciar la transmisión del registro, use el comando az webapp log tail en Cloud Shell.
az webapp log tail --name <app_name> --resource-group myResourceGroup
Cuando las secuencias de registro se inicien, actualice la aplicación de Azure en el explorador para obtener tráfico web. Ahora puede ver los registros de la consola canalizados al terminal. Si no ve los registros de la consola de inmediato, vuelve a comprobarlo en 30 segundos.
Para detener el streaming del registro en cualquier momento, escriba Ctrl+C.
Para acceder a los registros de la consola generados desde el código de la aplicación en App Service, active el registro de diagnósticos, para lo que debe ejecutar el 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 de --level son: Error, Warning, Info y Verbose. Todos los niveles incluyen el nivel anterior. Por ejemplo: Error incluye solo los mensajes de error, mientras que Verbose incluye todos los mensajes.
Una vez que se activa el registro de contenedor, ejecute el siguiente comando para ver la transmisión del registro:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Si no ve los registros de la consola de inmediato, vuelve a comprobarlo en 30 segundos.
Nota
También puede inspeccionar los archivos de registro desde el explorador en https://<app-name>.scm.azurewebsites.net/api/logs/docker.
Para detener el streaming del registro en cualquier momento, escriba Ctrl+C.
Sugerencia
Las aplicaciones PHP pueden usar el elemento estándar error_log() para enviar información a la consola. La aplicación de ejemplo usa este enfoque en app/Http/routes.php.
Como marco web, Laravel usa Monolog como proveedor de registros. Para ver cómo obtener Monolog para generar mensajes en la consola, consulte PHP: How to use monolog to log to console (php://out) [PHP: Cómo usar monolog para registrarse en la consola (php://out)].
Administración de la aplicación de Azure
Vaya a Azure Portal para administrar la aplicación que ha creado.
En el menú izquierdo, haga clic en App Services y, luego, en el nombre de la aplicación de Azure.

Verá la página de información general de la aplicación. Aquí se pueden realizar tareas de administración básicas como detener, iniciar, reiniciar, examinar y eliminar.
El menú izquierdo proporciona varias páginas para configurar la aplicación.

Limpieza de recursos
En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si prevé que no necesitará estos recursos en el futuro, elimine el grupo de recursos ejecutando el siguiente comando en Cloud Shell:
az group delete --name myResourceGroup
Este comando puede tardar varios segundos en ejecutarse.
Pasos siguientes
En este tutorial, ha aprendido a:
- Crear una base de datos MySQL en Azure
- Conectar una aplicación PHP a MySQL
- Implementar la aplicación en Azure
- Actualizar el modelo de datos y volver a implementar la aplicación
- Transmitir registros de diagnóstico desde Azure
- Administrar la aplicación en Azure Portal
Pase al siguiente tutorial para aprender cómo asignar un nombre DNS personalizado a la aplicación.
O bien, eche un vistazo a otros recursos:
Configure PHP app (Configuración de una aplicación de PHP)