Compilación de una aplicación de Python y PostgreSQL en Azure App ServiceBuild a Python and PostgreSQL app in Azure App Service

App Service en Linux proporciona un servicio de hospedaje web muy escalable y con aplicación de revisiones de un modo automático.App Service on Linux provides a highly scalable, self-patching web hosting service. En este tutorial se muestra cómo crear una aplicación de Python controlada por datos con PostgreSQL como back-end de base de datos.This tutorial shows how to create a data-driven Python app, using PostgreSQL as the database back end. Cuando haya terminado, tendrá una aplicación Django que se ejecuta en App Service en Linux.When you are done, you have a Django application running in App Service on Linux.

Aplicación Python Django en App Service en Linux

En este tutorial, aprenderá a:In this tutorial, you learn how to:

  • Creación de una base de datos PostgreSQL en AzureCreate a PostgreSQL database in Azure
  • Conexión de una aplicación Python a PostgreSQLConnect a Python app to PostgreSQL
  • Implementación de la aplicación en AzureDeploy the app to Azure
  • Visualización de los registros de diagnósticoView diagnostic logs
  • Administrar la aplicación en Azure PortalManage the app in the Azure portal

Nota

Antes de crear una instancia de Azure Database for PostgreSQL, consulte qué generación de proceso está disponible en su región.Before creating an Azure Database for PostgreSQL, please check which compute generation is available in your region.

También puede seguir los pasos de este artículo en macOS.You can follow the steps in this article on macOS. Las instrucciones de Linux y Windows son las mismas en la mayoría de los casos, pero en este tutorial no se detallan las diferencias.Linux and Windows instructions are the same in most cases, but the differences are not detailed in this tutorial.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.

Requisitos previosPrerequisites

Para completar este tutorial:To complete this tutorial:

  1. Instalación de GitInstall Git
  2. Instalación de PythonInstall Python
  3. Instalación y ejecución de PostgreSQLInstall and run PostgreSQL

Prueba de la instalación local de PostgreSQL y creación de una base de datosTest local PostgreSQL installation and create a database

En una ventana de terminal local, ejecute psql para conectarse al servidor local de PostgreSQL.In a local terminal window, run psql to connect to your local PostgreSQL server.

sudo -u postgres psql postgres

Si recibe un mensaje de error similar a unknown user: postgres, la instalación de PostgreSQL puede configurarse con su nombre de usuario registrado.If you get an error message similar to unknown user: postgres, your PostgreSQL installation may be configured with your logged in username. Pruebe con el comando siguiente en su lugar.Try the following command instead.

psql postgres

Si la conexión se realiza correctamente, significa que la base de datos PostgreSQL está en ejecución.If your connection is successful, your PostgreSQL database is running. De lo contrario, asegúrese de que se ha iniciado la base de datos PostgreSQL local, para lo que debe seguir las instrucciones para su sistema operativo que se indican en Downloads - PostgreSQL Core Distribution (Descargas - Distribución del núcleo de PostgreSQL).If not, make sure that your local PostgresQL database is started by following the instructions for your operating system at Downloads - PostgreSQL Core Distribution.

Cree una base de datos denominada pollsdb y configure un usuario de base de datos independiente denominado manager cuya contraseña será supersecretpass.Create a database called pollsdb and set up a separate database user named manager with password supersecretpass.

CREATE DATABASE pollsdb;
CREATE USER manager WITH PASSWORD 'supersecretpass';
GRANT ALL PRIVILEGES ON DATABASE pollsdb TO manager;

Escriba \q para salir del cliente de PostgreSQL.Type \q to exit the PostgreSQL client.

Creación de una aplicación Python localCreate local Python app

En este paso, configurará el proyecto de Python Django local.In this step, you set up the local Python Django project.

Clonación de la aplicación de ejemploClone the sample app

Abra la ventana de terminal y use CD para cambiar a un directorio de trabajo.Open the terminal window, and CD to a working directory.

Ejecute los comandos siguientes para clonar el repositorio de ejemplo.Run the following commands to clone the sample repository.

git clone https://github.com/Azure-Samples/djangoapp.git
cd djangoapp

Este repositorio de ejemplo contiene una aplicación Django.This sample repository contains a Django application. Es la misma aplicación controlada por datos que obtendría si realiza el tutorial de introducción que se encuentra en la documentación de Django.It's the same data-driven app you would get by following the getting started tutorial in the Django documentation. En este tutorial no se enseña Django en sí, pero se muestra cómo implementar y ejecutar una aplicación Django (o cualquier otra aplicación Python controlada por datos) en App Service.This tutorial doesn't teach you Django, but shows you how to take deploy and run a Django app (or another data-driven Python app) to App Service.

Configuración del entornoConfigure environment

Cree un entorno virtual de Python y use un script para establecer la configuración de la conexión de base de datos.Create a Python virtual environment and use a script to set the database connection settings.

# Bash
python3 -m venv venv
source venv/bin/activate
source ./env.sh

# PowerShell
py -3 -m venv venv
venv\scripts\activate
.\env.ps1

Las variables de entorno definidas en env.sh y env.ps1 se usan en azuresite/settings.py para definir la configuración de la base de datos.The environment variables defined in env.sh and env.ps1 are used in azuresite/settings.py to define the database settings.

Ejecución de la aplicación de forma localRun app locally

Instale los paquetes necesarios, ejecute migraciones de Django y cree un usuario administrador.Install the required packages, run Django migrations and create an admin user.

pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser

Una vez creado el usuario administrador, ejecute el servidor de Django.Once the admin user is created, run the Django server.

python manage.py runserver

Cuando la aplicación se haya cargado completamente, verá algo similar al siguiente mensaje:When the app is fully loaded, you see something similar to the following message:

Performing system checks...

System check identified no issues (0 silenced).
October 26, 2018 - 10:54:59
Django version 2.1.2, using settings 'azuresite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Vaya a http://localhost:8000 en un explorador.Navigate to http://localhost:8000 in a browser. Verá el mensaje No polls are available..You should see the message No polls are available..

Vaya a http://localhost:8000/admin e inicie sesión mediante el usuario administrador que creó en el último paso.Navigate to http://localhost:8000/admin and sign in using the admin user you created in the last step. Haga clic en Agregar junto a Preguntas y cree una pregunta de sondeo con algunas opciones.Click Add next to Questions and create a poll question with some choices.

Aplicación Python Django que se ejecuta de forma local

Vaya a http://localhost:8000 de nuevo y vea la pregunta de sondeo que se muestra.Navigate to http://localhost:8000 again and see the poll question displayed.

La aplicación Django de ejemplo almacena datos de usuario en la base de datos.The Django sample application stores user data in the database. Si la adición de la pregunta de sondeo se realiza correctamente, la aplicación escribe datos en la base de datos de PostgreSQL local.If you are successful at adding a poll question, your app is writing data to the local PostgreSQL database.

Para detener el servidor de Django en cualquier momento, escriba Ctrl+C en el terminal.To stop the Django server at anytime, type Ctrl+C in the terminal.

Creación de una base de datos PostgreSQL de producciónCreate a production PostgreSQL database

En este paso, creará una base de datos PostgreSQL en Azure.In this step, you create a PostgreSQL database in Azure. Cuando la aplicación se implementa en Azure, utiliza esta base de datos en la nube.When your app is deployed to Azure, it uses this cloud database.

Apertura de Azure Cloud ShellOpen Azure Cloud Shell

Azure Cloud Shell es un entorno de shell interactivo que se hospeda en Azure y se utiliza a través del explorador.Azure Cloud Shell is an interactive shell environment hosted in Azure and used through your browse. Azure Cloud Shell le permite usar los shell bash o PowerShell para ejecutar una variedad de herramientas para trabajar con los servicios de Azure.Azure Cloud Shell allows you to use either bash or PowerShell shells to run a variety of tools to work with Azure services. Azure Cloud Shell viene preinstalado con los comandos para permitirle ejecutar el contenido de este artículo sin tener que instalar nada en su entorno local.Azure Cloud Shell comes pre-installed with the commands to allow you to run the content of this article without having to install anything on your local environment.

Para ejecutar cualquier código contenido en este artículo en Azure Cloud Shell, abra una sesión de Cloud Shell, utilice el botón Copiar en un bloque de código para copiar el código y péguelo en la sesión de Cloud Shell con Ctrl+Mayús+V en Windows y Linux, o Cmd+Mayús+V en macOS.To run any code contained in this article on Azure Cloud Shell, open a Cloud Shell session, use the Copy button on a code block to copy the code, and paste it into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS. El texto pegado no se ejecuta automáticamente, así que presione ENTRAR para ejecutar el código.Pasted text is not automatically executed, so press Enter to run code.

Puede iniciar Azure Cloud Shell con:You can launch Azure Cloud Shell with:

Seleccione Probarlo en la esquina superior derecha de un bloque de código.Select Try It in the upper-right corner of a code block. Esto no copia automáticamente el texto en Cloud Shell.This doesn't automatically copy text to Cloud Shell. Ejemplo de Probarlo para Azure Cloud Shell
Abra shell.azure.com en el explorador.Open shell.azure.com in your browser. Botón Iniciar Cloud ShellLaunch Azure Cloud Shell button
Seleccione el botón Cloud Shell en el menú de la esquina superior derecha de Azure Portal.Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. Botón Cloud Shell en Azure Portal

Crear un grupo de recursosCreate a resource group

Un grupo de recursos es un contenedor lógico en el que se implementan y administran recursos de Azure como aplicaciones web, bases de datos y cuentas de almacenamiento.A resource group is a logical container into which Azure resources like web apps, databases, and storage accounts are deployed and managed. Por ejemplo, más adelante puede elegir eliminar todo el grupo de recursos en un solo paso.For example, you can choose to delete the entire resource group in one simple step later.

En Cloud Shell, cree un grupo de recursos con el comando az group create.In the Cloud Shell, create a resource group with the az group create command. En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la ubicación Europa Occidental.The following example creates a resource group named myResourceGroup in the West Europe location. Para ver todas las ubicaciones de App Service que se admiten en Linux en el nivel Básico, ejecute el comando az appservice list-locations --sku B1 --linux-workers-enabled.To see all supported locations for App Service on Linux in Basic tier, run the az appservice list-locations --sku B1 --linux-workers-enabled command.

az group create --name myResourceGroup --location "West Europe"

Generalmente se crean el grupo de recursos y los recursos en una región cercana.You generally create your resource group and the resources in a region near you.

Cuando finaliza el comando, una salida de JSON muestra las propiedades del grupo de recursos.When the command finishes, a JSON output shows you the resource group properties.

Creación de un servidor de Azure Database for PostgreSQLCreate an Azure Database for PostgreSQL server

Cree un servidor de PostgreSQL con el comando az postgres server create en Cloud Shell.Create a PostgreSQL server with the az postgres server create command in the Cloud Shell.

En el siguiente comando de ejemplo, reemplace <postgresql-name> por un nombre de servidor único y <admin-username> y <admin-password> por las credenciales de usuario deseadas.In the following example command, replace <postgresql-name> with a unique server name, and replace <admin-username> and <admin-password> with the desired user credentials. Las credenciales de usuario son para la cuenta de administrador de base de datos.The user credentials are for the database administrator account. El nombre del servidor se usa como parte del punto de conexión de PostgreSQL (https://<postgresql-name>.postgres.database.azure.com), por lo que debe ser único en todos los servidores de Azure.The server name is used as part of your PostgreSQL endpoint (https://<postgresql-name>.postgres.database.azure.com), so the name needs to be unique across all servers in Azure.

az postgres server create --resource-group myResourceGroup --name <postgresql-name> --location "West Europe" --admin-user <admin-username> --admin-password <admin-password> --sku-name B_Gen4_1

Cuando se crea la base de datos de Azure para el servidor de PostgreSQL, la CLI de Azure muestra información similar a la del siguiente ejemplo:When the Azure Database for PostgreSQL server is created, the Azure CLI shows information similar to the following example:

{
  "administratorLogin": "<admin-username>",
  "fullyQualifiedDomainName": "<postgresql-name>.postgres.database.azure.com",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforPostgreSQL/servers/<postgresql-name>",
  "location": "westus",
  "name": "<postgresql-name>",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "capacity": 1,
    "family": "Gen4",
    "name": "B_Gen4_1",
    "size": null,
    "tier": "Basic"
  },
  < JSON data removed for brevity. >
}

Nota

Recuerde <admin-username> and <admin-password> para poderlos usar más tarde.Remember <admin-username> and <admin-password> for later. Debe iniciar sesión en el servidor de Postgre y sus bases de datos.You need them to sign in to the Postgre server and its databases.

Creación de reglas de firewall para el servidor de PostgreSQLCreate firewall rules for the PostgreSQL server

En Cloud Shell, ejecute los siguientes comandos de la CLI de Azure para permitir el acceso a la base de datos desde los recursos de Azure.In the Cloud Shell, run the following Azure CLI commands to allow access to the database from Azure resources.

az postgres server firewall-rule create --resource-group myResourceGroup --server-name <postgresql-name> --start-ip-address=0.0.0.0 --end-ip-address=0.0.0.0 --name AllowAllAzureIPs

Nota

Esta configuración permite conexiones de red desde todas las direcciones IP dentro de la red Azure.This setting allows network connections from all IPs within the Azure network. Para su uso en producción, pruebe a configurar las reglas de firewall más restrictivas posibles con solo las direcciones IP de salida que utiliza la aplicación.For production use, try to configure the most restrictive firewall rules possible by using only the outbound IP addresses your app uses.

En Cloud Shell, ejecute de nuevo el comando para permitir el acceso desde el equipo local y reemplace <your-ip-address> por la dirección IP IPv4 local.In the Cloud Shell, run the command again to allow access from your local computer by replacing <your-ip-address> with your local IPv4 IP address.

az postgres server firewall-rule create --resource-group myResourceGroup --server-name <postgresql-name> --start-ip-address=<your-ip-address> --end-ip-address=<your-ip-address> --name AllowLocalClient

Conexión de la aplicación Python a la base de datos de producciónConnect Python app to production database

En este paso, conectará la aplicación Django de ejemplo al servidor de Azure Database for PostgreSQL que ha creado.In this step, you connect your Django sample app to the Azure Database for PostgreSQL server you created.

Creación del acceso de usuario y la base de datos vacíaCreate empty database and user access

En Cloud Shell, conéctese a la base de datos mediante la ejecución del comando anterior.In the Cloud Shell, connect to the database by running the command below. Cuando se le pida la contraseña de administrador, use la misma contraseña que especificó en Creación de un servidor de Azure Database for PostgreSQL.When prompted for your admin password, use the same password you specified in Create an Azure Database for PostgreSQL server.

psql -h <postgresql-name>.postgres.database.azure.com -U <admin-username>@<postgresql-name> postgres

Al igual que en su servidor local de Postgres, cree la base de datos y el usuario en el servidor Postgres de Azure.Just like in your local Postgres server, create the database and user in the Azure Postgres server.

CREATE DATABASE pollsdb;
CREATE USER manager WITH PASSWORD 'supersecretpass';
GRANT ALL PRIVILEGES ON DATABASE pollsdb TO manager;

Escriba \q para salir del cliente de PostgreSQL.Type \q to exit the PostgreSQL client.

Nota

Es un procedimiento recomendado crear usuarios de bases de datos con permisos restringidos para aplicaciones específicas, en lugar de utilizar el usuario administrador.It's best practice to create database users with restricted permissions for specific applications, instead of using the admin user. En este ejemplo, el usuario manager tiene plenos privilegios para solo la base de datos pollsdb.In this example, the manager user has full privileges to only the pollsdb database.

Prueba de la conectividad de la aplicación a la base de datos de producciónTest app connectivity to production database

En la ventana del terminal local, cambie las variables de entorno de la base de datos (que configuró anteriormente con la ejecución de env.sh o env.ps1):In the local terminal window, change the database environment variables (which you configured earlier by running env.sh or env.ps1):

# Bash
export DBHOST="<postgresql-name>.postgres.database.azure.com"
export DBUSER="manager@<postgresql-name>"
export DBNAME="pollsdb"
export DBPASS="supersecretpass"

# PowerShell
$Env:DBHOST = "<postgresql-name>.postgres.database.azure.com"
$Env:DBUSER = "manager@<postgresql-name>"
$Env:DBNAME = "pollsdb"
$Env:DBPASS = "supersecretpass"

Ejecute la migración de Django a la base de datos de Azure y cree un usuario administrador.Run Django migration to the Azure database and create an admin user.

python manage.py migrate
python manage.py createsuperuser

Una vez creado el usuario administrador, ejecute el servidor de Django.Once the admin user is created, run the Django server.

python manage.py runserver

Vaya a http://localhost:8000 de nuevo.Navigate to http://localhost:8000 in again. Verá el mensaje No polls are available. otra vez.You should see the message No polls are available. again.

Vaya a http://localhost:8000/admin e inicie sesión con el usuario administrador de antes y cree una pregunta de sondeo como ya hizo anteriormente.Navigate to http://localhost:8000/admin and sign in using the admin user you created, and create a poll question like before.

Aplicación Python Django que se ejecuta de forma local

Vaya a http://localhost:8000 de nuevo y vea la pregunta de sondeo que se muestra.Navigate to http://localhost:8000 again and see the poll question displayed. La aplicación ya escribe datos en la base de datos de Azure.Your app is now writing data to the database in Azure.

Implementar en AzureDeploy to Azure

En este paso, se implementará la aplicación Python conectada a Postgres en Azure App Service.In this step, you deploy the Postgres-connected Python application to Azure App Service.

Configuración del repositorioConfigure repository

Django valida el encabezado HTTP_HOST en las solicitudes entrantes.Django validates the HTTP_HOST header in incoming requests. Para que la aplicación Django funcione en App Service, debe agregar el nombre de dominio completo de la aplicación a los hosts permitidos.For your Django app to work in App Service, you need to add the full-qualified domain name of the app to the allowed hosts. Abra azuresite/settings.py y busque el valor ALLOWED_HOSTS.Open azuresite/settings.py and find the ALLOWED_HOSTS setting. Cambie la línea a:Change the line to:

ALLOWED_HOSTS = [os.environ['WEBSITE_SITE_NAME'] + '.azurewebsites.net', '127.0.0.1'] if 'WEBSITE_SITE_NAME' in os.environ else []

Como Django no admite archivos estáticos en producción, tendrá que habilitarlo manualmente.Next, Django doesn't support serving static files in production, so you need to enable this manually. Para este tutorial, puede usar WhiteNoise.For this tutorial, you use WhiteNoise. El paquete WhiteNoise ya está incluido en el archivo requirements.txt.The WhiteNoise package is already included in requirements.txt. Solo tiene que configurar Django para utilizarlo.You just need to configure Django to use it.

En azuresite/settings.py, busque el valor MIDDLEWARE y agregue el middleware whitenoise.middleware.WhiteNoiseMiddleware a la lista, justo debajo del middleware django.middleware.security.SecurityMiddleware.In azuresite/settings.py, find the MIDDLEWARE setting, and add the whitenoise.middleware.WhiteNoiseMiddleware middleware to the list, just below the django.middleware.security.SecurityMiddleware middleware. El valor MIDDLEWARE debe tener este aspecto:Your MIDDLEWARE setting should look like this:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]

Al final de azuresite/settings.py, agregue las líneas siguientes.At the end of azuresite/settings.py, add the following lines.

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

Para más información sobre cómo configurar WhiteNoise, consulte la documentación de WhiteNoise.For more information on configuring WhiteNoise, see the WhiteNoise documentation.

Importante

La sección de configuración de la base de datos ya sigue el procedimiento recomendado de seguridad que aconseja usar variables de entorno.The database settings section already follows the security best practice of using environment variables. Para conocer todas las recomendaciones de implementación, consulte Documentación de Django: Lista de comprobación de implementación.For the complete deployment recommendations, see Django Documentation: deployment checklist.

Confirme los cambios en el repositorio.Commit your changes into the repository.

git commit -am "configure for App Service"

Configuración del usuario de implementaciónConfigure deployment user

En Azure Cloud Shell, configure las credenciales de implementación con el comando az webapp deployment user set.In the Azure Cloud Shell, configure deployment credentials with the az webapp deployment user set command. Se requiere este usuario de implementación para la implementación de FTP y Git local en una aplicación web.This deployment user is required for FTP and local Git deployment to a web app. El nombre de usuario y la contraseña predeterminados están en el nivel de la cuenta.The username and password are account level. No son los mismos que los de las credenciales de suscripción de Azure.They're different from your Azure subscription credentials.

En el siguiente ejemplo, reemplace <username> y <password> (corchetes angulares incluidos) por un nuevo nombre de usuario y contraseña.In the following example, replace <username> and <password>, including the brackets, with a new username and password. El nombre de usuario debe ser único en Azure.The username must be unique within Azure. La contraseña debe tener al menos ocho caracteres y dos de los tres elementos siguientes: letras, números y símbolos.The password must be at least eight characters long, with two of the following three elements: letters, numbers, and symbols.

az webapp deployment user set --user-name <username> --password <password>

Se obtiene una salida de JSON y la contraseña mostrada como null.You get a JSON output with the password shown as null. Si se produce un error 'Conflict'. Details: 409, cambie el nombre de usuario.If you get a 'Conflict'. Details: 409 error, change the username. Si se produce un error 'Bad Request'. Details: 400, use una contraseña más segura.If you get a 'Bad Request'. Details: 400 error, use a stronger password. El nombre de usuario de la implementación no debe contener el símbolo ' @' en las inserciones de Git locales.The deployment username must not contain ‘@’ symbol for local Git pushes.

Este usuario de implementación se configura una sola vez.You configure this deployment user only once. Puede usarlo para todas las implementaciones de Azure.You can use it for all your Azure deployments.

Nota

Grabe el nombre de usuario y la contraseña.Record the username and password. Los va a necesitar para implementar la aplicación web más adelante.You need them to deploy the web app later.

Creación de un plan de App ServiceCreate App Service plan

En Cloud Shell, cree un plan de App Service en el grupo de recursos con el comando az appservice plan create.In the Cloud Shell, create an App Service plan in the resource group with the az appservice plan create command.

En el ejemplo siguiente se crea un plan de App Service denominado myAppServicePlan en el plan de tarifa Básico (--sku B1) en un contenedor Linux (--is-linux).The following example creates an App Service plan named myAppServicePlan in the Basic pricing tier (--sku B1) and in a Linux container (--is-linux).

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku B1 --is-linux

Cuando se ha creado el plan de App Service, la CLI de Azure muestra información similar al ejemplo siguiente:When the App Service plan has been created, the Azure CLI shows information similar to the following example:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "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 webCreate a web app

Cree una aplicación web en el plan de App Service de myAppServicePlan.Create a web app in the myAppServicePlan App Service plan.

En Cloud Shell, puede usar el comando az webapp create.In the Cloud Shell, you can use the az webapp create command. 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 -).In the following example, replace <app-name> with a globally unique app name (valid characters are a-z, 0-9, and -). El tiempo de ejecución se establece en PYTHON|3.7.The runtime is set to PYTHON|3.7. Para ver todos los entornos en tiempo de ejecución admitidos, ejecute az webapp list-runtimes --linux.To see all supported runtimes, run az webapp list-runtimes --linux.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PYTHON|3.7" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PYTHON|3.7" --deployment-local-git

Cuando se haya creado la aplicación web, la CLI de Azure mostrará información similar a la del ejemplo siguiente:When the web app has been created, the Azure CLI shows output similar to the following example:

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.You’ve created an empty new web app, with git deployment enabled.

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.The URL of the Git remote is shown in the deploymentLocalGitUrl property, with the format https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Guarde esta dirección URL, ya que la necesitará más adelante.Save this URL as you need it later.

Configuración de las variables de entornoConfigure environment variables

En este mismo tutorial, ya ha definido variables de entorno para conectarse a su base de datos de PostgreSQL.Earlier in the tutorial, you defined environment variables to connect to your PostgreSQL database.

En App Service, las variables de entorno se establecen como valores de aplicación mediante el comando az webapp config appsettings set en Cloud Shell.In App Service, you set environment variables as app settings by using the az webapp config appsettings set command in Cloud Shell.

En el siguiente ejemplo se especifican los datos de conexión de la base de datos en forma de valores de configuración de aplicación.The following example specifies the database connection details as app settings.

az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DBHOST="<postgresql-name>.postgres.database.azure.com" DBUSER="manager@<postgresql-name>" DBPASS="supersecretpass" DBNAME="pollsdb"

Para obtener información sobre cómo se obtiene acceso a esta configuración de la aplicación en el código, consulte Acceso a variables de entorno.For information on how these app settings are accessed in your code, see Access environment variables.

Inserción en Azure desde GitPush to Azure from Git

En la ventana del terminal local, agregue una instancia remota de Azure al repositorio de Git local.Back in the local terminal window, add an Azure remote to your local Git repository. Reemplace <deploymentLocalGitUrl-from-create-step> por la dirección URL del repositorio de Git remoto que guardó en Creación de una aplicación web.Replace <deploymentLocalGitUrl-from-create-step> with the URL of the Git remote that you saved from Create a web app.

git remote add azure <deploymentLocalGitUrl-from-create-step>

Inserte en la instancia remota de Azure para implementar la aplicación con el comando siguiente.Push to the Azure remote to deploy your app with the following command. Cuando el Administrador de credenciales de Git le solicite las credenciales, asegúrese de que especifica las credenciales que creó en Configuración de un usuario de implementación, no las que usó para iniciar sesión en Azure Portal.When prompted for credentials by Git Credential Manager, make sure that you enter the credentials you created in Configure a deployment user, not the credentials you use to sign in to the Azure portal.

git push azure master

Este comando puede tardar varios minutos en ejecutarse.This command may take a few minutes to run. Durante la ejecución, muestra información similar a la del ejemplo siguiente:While running, it displays information similar to the following example:

Counting objects: 7, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 775 bytes | 0 bytes/s, done.
Total 7 (delta 4), reused 0 (delta 0)
remote: Updating branch 'master'.
remote: Updating submodules.
remote: Preparing deployment for commit id '6520eeafcc'.
remote: Generating deployment script.
remote: Running deployment command...
remote: Python deployment.
remote: Kudu sync from: '/home/site/repository' to: '/home/site/wwwroot'
. 
. 
. 
remote: Deployment successful.
remote: App container will begin restart within 10 seconds.
To https://<app-name>.scm.azurewebsites.net/<app-name>.git 
   06b6df4..6520eea  master -> master

El servidor de implementación de App Service ve el archivo requirements.txt en la raíz del repositorio y ejecuta la administración de paquetes de Python automáticamente después de git push.The App Service deployment server sees requirements.txt in the repository root and runs Python package management automatically after git push.

Navegación hasta la aplicación de AzureBrowse to the Azure app

Vaya a la aplicación implementada.Browse to the deployed app. Tarda algún tiempo en iniciarse porque el contenedor se debe descargar y ejecutar la primera vez que se solicita la aplicación.It takes some time to start because the container needs to be downloaded and run when the app is requested for the first time. Si la página agota el tiempo de espera o muestra un mensaje de error, espere unos minutos y actualice la página.If the page times out or displays an error message, wait a few minutes and refresh the page.

http://<app-name>.azurewebsites.net

Debería ver la pregunta de sondeo que creó anteriormente.You should see the poll question that you created earlier.

App Service detecta un proyecto de Django en el repositorio mediante la búsqueda de un archivo wsgi.py en cada subdirectorio, archivo que manage.py startproject crea de forma predeterminada.App Service detects a Django project in your repository by looking for a wsgi.py in each subdirectory, which is created by manage.py startproject by default. Cuando encuentra el archivo, carga la aplicación de Django.When it finds the file, it loads the Django app. Para más información sobre cómo carga App Service aplicaciones Python, consulte Configuración de una imagen de Python integrada.For more information on how App Service loads Python apps, see Configure built-in Python image.

Vaya a <app-name>.azurewebsites.net e inicie sesión mediante el mismo usuario administrador que creó.Navigate to <app-name>.azurewebsites.net and sign in using same admin user you created. Si lo desea, intente crear algunas preguntas de sondeo más.If you like, try creating some more poll questions.

Aplicación Python Django que se ejecuta de forma local

¡Enhorabuena!Congratulations! Va a ejecutar una aplicación Python en App Service para Linux.You're running a Python app in App Service for Linux.

Transmisión de registros de diagnósticoStream diagnostic logs

Puede acceder a los registros de consola generados desde dentro del contenedor.You can access the console logs generated from inside the container. En primer lugar, active el registro de contenedores mediante la ejecución del siguiente comando en Cloud Shell:First, turn on container logging by running the following command in the Cloud Shell:

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

Una vez que se active el registro de contenedor, ejecute el siguiente comando para ver el flujo del registro:Once container logging is turned on, run the following command to see the log stream:

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

Si no ve los registros de la consola de inmediato, vuelve a comprobarlo en 30 segundos.If you don't see console logs immediately, check again in 30 seconds.

Nota

También puede inspeccionar los archivos de registro desde el explorador en https://<app-name>.scm.azurewebsites.net/api/logs/docker.You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Para detener el streaming del registro en cualquier momento, escriba Ctrl+C.To stop log streaming at any time, type Ctrl+C.

Administración de una aplicación en Azure PortalManage your app in the Azure Portal

Vaya a Azure Portal para ver la aplicación que ha creado.Go to the Azure portal to see the app you created.

En el menú izquierdo, haga clic en App Services y, luego, en el nombre de la aplicación de Azure.From the left menu, click App Services, then click the name of your Azure app.

Navegación en el portal a la aplicación de Azure

De manera predeterminada, el portal muestra la página Información general de la aplicación.By default, the portal shows your app's Overview page. Esta página proporciona una visión del funcionamiento de la aplicación.This page gives you a view of how your app is doing. En este caso, también puede realizar tareas de administración básicas como examinar, detener, iniciar, reiniciar y eliminar.Here, you can also perform basic management tasks like browse, stop, start, restart, and delete. Las pestañas del lado izquierdo de la página muestran las diferentes páginas de configuración que puede abrir.The tabs on the left side of the page show the different configuration pages you can open.

Página de App Service en Azure Portal

Limpieza de recursosClean up resources

En los pasos anteriores, creó recursos de Azure en un grupo de recursos.In the preceding steps, you created Azure resources in a resource group. Si prevé que no necesitará estos recursos en el futuro, elimine el grupo de recursos ejecutando el siguiente comando en Cloud Shell:If you don't expect to need these resources in the future, delete the resource group by running the following command in the Cloud Shell:

az group delete --name myResourceGroup

Este comando puede tardar varios segundos en ejecutarse.This command may take a minute to run.

Pasos siguientesNext steps

En este tutorial aprendió lo siguiente:In this tutorial, you learned how to:

  • Creación de una base de datos PostgreSQL en AzureCreate a PostgreSQL database in Azure
  • Conexión de una aplicación Python a PostgreSQLConnect a Python app to PostgreSQL
  • Implementación de la aplicación en AzureDeploy the app to Azure
  • Visualización de los registros de diagnósticoView diagnostic logs
  • Administrar la aplicación en Azure PortalManage the app in the Azure portal

Vaya al siguiente tutorial para aprender a asignar un nombre DNS personalizado a una aplicación web.Advance to the next tutorial to learn how to map a custom DNS name to your app.

O bien, eche un vistazo otros recursos:Or, check out other resources: