Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Ejecutar Django en el entorno flexible de App Engine

Las apps de Django que se ejecutan en el entorno flexible de App Engine se ejecutan en la misma infraestructura que impulsa todos los productos de Google, lo que generalmente mejora la escalabilidad.

En este instructivo, suponemos que estás familiarizado con el desarrollo web de Django. Si eres nuevo en el desarrollo de Django, es recomendable que escribas tu primera app de Django antes de continuar. En este instructivo, los modelos de la app representan encuestas con preguntas, y podrás interactuar con los modelos mediante la Consola del administrador de Django.

Este instructivo requiere Python 3.7 o una versión posterior.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  4. Habilita las Cloud SQL Admin API.

    Habilita la API

  5. Instala e inicializa el SDK de Cloud.

Accede a gcloud

Adquiere credenciales nuevas para usar la API de Administrador de Cloud SQL:

gcloud auth application-default login

Descarga y ejecuta la app

Una vez que completes los requisitos, descarga y ejecuta la app de muestra de Django. En las siguientes secciones se te guiará a través de la configuración, ejecución e implementación de la app.

Cómo clonar la app de Django

El código de la app de muestra de Django está en el repositorio GoogleCloudPlatform/python-docs-samples en GitHub.

  1. Puedes descargar la muestra como un archivo ZIP y extraerla o clonar el repositorio en tu máquina local:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

  2. Ve al directorio que contiene el código de muestra:

Linux/macOS

  cd python-docs-samples/appengine/standard_python3/django

Windows

  cd python-docs-samples\appengine\standard_python3\django

Configura tu entorno local

Cuando se implementa, tu aplicación usa el proxy de Cloud SQL integrado en el entorno de App Engine para comunicarse con tu instancia de Cloud SQL. Sin embargo, para probar tu aplicación de manera local, debes instalar y usar una copia local del proxy en tu entorno de desarrollo.

Más información sobre el proxy de Cloud SQL

Para realizar tareas de administrador básicas en la instancia de Cloud SQL, puedes usar el cliente PostgreSQL.

Cómo instalar el proxy de Cloud SQL

Descarga y, luego, instala el proxy de Cloud SQL. El proxy de Cloud SQL se conecta a tu instancia de Cloud SQL cuando se ejecuta de manera local.

Linux de 64 bits

  1. Descarga el proxy con el siguiente comando:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Haz que el proxy sea ejecutable con el siguiente comando:
    chmod +x cloud_sql_proxy
    

Linux de 32 bits

  1. Descarga el proxy con el siguiente comando:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Haz que el proxy sea ejecutable con el siguiente comando:
    chmod +x cloud_sql_proxy
    

macOS de 64 bits

  1. Descarga el proxy con el siguiente comando:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. Haz que el proxy sea ejecutable con el siguiente comando:
    chmod +x cloud_sql_proxy
    

macOS de 32 bits

  1. Descarga el proxy con el siguiente comando:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Haz que el proxy sea ejecutable con el siguiente comando:
    chmod +x cloud_sql_proxy
    

Windows de 64 bits

Para descargar el proxy, haz clic con el botón derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo por cloud_sql_proxy.exe.

Windows de 32 bits

Para descargar el proxy, haz clic derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo por cloud_sql_proxy.exe.

Imagen del proxy de Docker

Para mayor comodidad, el equipo de Cloud SQL mantiene varias imágenes de contenedor que contienen el proxy de Cloud SQL para que lo usen nuestros clientes. Para obtener más información sobre estas imágenes, consulta el repositorio del proxy de Cloud SQL en GitHub. Puede extraer la última imagen a su máquina local usando Docker mediante el siguiente comando:
docker pull gcr.io/cloudsql-docker/gce-proxy:1.19.1

Otro SO

En el caso de otros sistemas operativos que no se incluyen aquí, puedes compilar el proxy desde la fuente.

Crea una instancia de Cloud SQL

  1. <a{: class="internal" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,track-metadata-end-goal,class,target" l10n-encrypted- href="lsL4NbV5FI0DRuRANJcTZKJysOQGKX761P3itELRG1PjHEtGnUIGGfDSUdzN6k/z" target="_blank" track-metadata-end-goal="createInstance" track-metadata-position="body track body} Crea una instancia de Cloud SQL para PostgreSQL.

    Asigna a la instancia el nombre polls-instance o uno similar. Es posible que esto tarde algunos minutos. Cuando la instancia esté lista, aparecerá en la lista de instancias.

    </a{:>
  2. Usa el SDK de Cloud para ejecutar el comando siguiente en el que [YOUR_INSTANCE_NAME] representa el nombre de tu instancia de Cloud SQL:
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

    En el resultado, toma nota del valor que se muestra para [CONNECTION_NAME].

    El valor [CONNECTION_NAME] tiene el formato [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].

Inicializa tu instancia de Cloud SQL

  1. Inicia el proxy de Cloud SQL con el valor [CONNECTION_NAME] del paso anterior.

    Linux/macOS

    ./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:5432

    Windows

    cloud_sql_proxy.exe -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:5432

    Reemplaza [YOUR_INSTANCE_CONNECTION_NAME] por el valor [CONNECTION_NAME] que registraste en el paso anterior.

    En este paso, se establece una conexión entre tu computadora local y tu instancia de Cloud SQL a fin de realizar pruebas locales. Mantén el proxy de Cloud SQL en ejecución durante todo el tiempo que realices pruebas locales en tu aplicación.

  2. Crea un usuario y una base de datos de Cloud SQL de la manera siguiente:

    Cloud Console

    1. Crea una base de datos nueva mediante Cloud Console para tu instancia de Cloud SQLpolls-instance. Por ejemplo, puedes usar el nombre polls.
    2. Crea un usuario nuevo mediante Cloud Console para tu instancia de Cloud SQLpolls-instance.

    Cliente de Postgres

    1. En una pestaña separada de la línea de comandos, instala el cliente de Postgres.
      sudo apt-get install postgresql
    2. Usa el cliente Postgres o un programa similar para conectarte a tu instancia. Ingresa la contraseña raíz que configuraste cuando te la pidan.
      psql --host 127.0.0.1 --user postgres --password
    3. Crea las bases de datos, los usuarios y los permisos de acceso necesarios en tu base de datos de Cloud SQL mediante los comandos siguientes Reemplaza [POSTGRES_USER] y [POSTGRES_PASSWORD] por el nombre de usuario y la contraseña que deseas usar.
      CREATE DATABASE polls;
      CREATE USER [POSTGRES_USER] WITH PASSWORD '[POSTGRES_PASSWORD]';
      GRANT ALL PRIVILEGES ON DATABASE polls TO [POSTGRES_USER];
      GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO [POSTGRES_USER];
      

Realizar las configuraciones de la base de datos

  1. Abre mysite/settings.py para edición.

    1. Para usar MySQL en lugar de PostgreSQL, haz lo siguiente:

      1. Sigue las instrucciones en los comentarios del archivo para habilitar el controlador de la base de datos de MySQL.
      2. Abre requirements.txt para editar y sigue las instrucciones a fin de agregar el controlador de base de datos de MySQL a tus dependencias.
    2. A fin de ayudar a configurar la conexión a la base de datos para la implementación de App Engine y las pruebas locales, configura <your-database-user> y <your-database-password> con el nombre de usuario y la contraseña que creaste antes en el paso Crea una instancia de Cloud SQL

    3. Obtén los valores de tu instancia:

      gcloud sql instances describe [YOUR_INSTANCE_NAME]
      
    4. En el resutado, copia el valor connectionName que se usará en el paso siguiente.

    5. Configura <your-cloudsql-connection-string> como connectionName del paso anterior.

  2. Cierra y guarda settings.py.

Ejecuta la app en tu computadora local

  1. Para ejecutar la app de Django en tu computadora local, configura un entorno de desarrollo de Python que incluya Python, pip y virtualenv.

  2. Crea un entorno aislado de Python y, luego, instala las dependencias:

    Linux/macOS

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv env
    env\scripts\activate
    pip install -r requirements.txt
    

  3. Ejecuta las migraciones de Django para configurar tus modelos:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    
  4. Inicia un servidor web local:

    python manage.py runserver
    
  5. En tu navegador, ve a http://localhost:8000.

    http://localhost:8000
    

    En la página, se muestra el siguiente texto: “Hello, world. You're at the polls index”. El servidor web de Django que se ejecuta en tu computadora proporciona las páginas de la app de muestra.

  6. Presiona Control+C para detener el servidor web local.

Usa la Consola del administrador de Django

  1. Crea un superusuario. Debes especificar un nombre de usuario y una contraseña.

    python manage.py createsuperuser
    
  2. Inicia un servidor web local:

    python manage.py runserver
    
  3. En tu navegador, ve a http://localhost:8000/admin.

    http://localhost:8000/admin
    
  4. Accede al sitio del administrador con el nombre de usuario y la contraseña que usaste cuando ejecutaste createsuperuser.

Cómo implementar la app en el entorno flexible de App Engine

Cuando la app se implementa en Google Cloud, usa el servidor Gunicorn. Como Gunicorn no entrega contenido estático, la app usa a Cloud Storage para ello.

  1. Crea un bucket de Cloud Storage:

    1. Crea un bucket de Cloud Storage y haz que se pueda leer públicamente. Reemplaza <your-gcs-bucket> por el nombre de depósito que prefieras. Por ejemplo, podrías usar el ID de tu proyecto como el nombre del bucket:

      gsutil mb gs://<your-gcs-bucket>
      gsutil defacl set public-read gs://<your-gcs-bucket>
      
    2. Recopila todo el contenido estático en una carpeta de manera local:

      python manage.py collectstatic
      
    3. Sube el contenido estático a Cloud Storage:

      gsutil rsync -R static/ gs://<your-gcs-bucket>/static
      
  2. Edita settings.py:

    1. Abre mysite/settings.py para edición.

    2. Configura STATIC_URL como la siguiente URL. Reemplaza <your-gcs-bucket> por el nombre del depósito que creaste anteriormente.

      https://storage.googleapis.com/<your-gcs-bucket>/static/
      
    3. Cierra y guarda settings.py.

  3. Edita app.yaml:

    1. Abre app.yaml para edición.

    2. Ejecuta el siguiente comando desde la línea de comandos:

      gcloud sql instances describe [YOUR_INSTANCE_NAME]
      
    3. En el resutado, copia el valor connectionName que se usará en el paso siguiente.

    4. Reemplaza <your-cloudsql-connection-string> por connectionName del paso anterior.

    5. Cierra y guarda app.yaml.

  4. Implemente la muestra

    gcloud app deploy
    

    Espera a que aparezca el mensaje que informa que la actualización se completó.

Visualiza la ejecución de la app en Google Cloud

Con el siguiente comando, se implementa la app como se describe en app.yaml y se establece la versión recién implementada como la versión predeterminada, lo que hace que entregue todo el tráfico nuevo.

  • En el navegador, ingresa la siguiente URL:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    Reemplaza los siguientes elementos:

Un servidor web que se ejecuta en el entorno flexible de App Engine entrega tu solicitud.

A medida que la app se implementa, es posible que veas varios mensajes repetidos mientras que la plataforma verifica si la app está atendiendo. Esto es normal. Espera a que aparezca el mensaje que informa que la actualización de la app se completó.

Si actualizas la app, implementarás la versión actualizada mediante el mismo comando que usaste para implementarla. La implementación crea una versión nueva de tu app y la promueve a la versión predeterminada. Las versiones anteriores de tu app se conservan, al igual que sus instancias de máquina virtual (VM) asociadas. Todas estas instancias de VM y versiones de la app son recursos facturables. Para reducir costos, borra las versiones no predeterminadas de tu app.

Para obtener información sobre cómo borrar las versiones no predeterminadas de tu app o detener tus instancias de VM, consulta Realiza una limpieza.

Producción

Cuando estés listo para entregar tu contenido en producción, en mysite/settings.py, cambia la variable DEBUG a False.

Comprende el código

La app de muestra de Django se creó con las herramientas estándar de Django.

  • Con los siguientes comandos, se crea el proyecto y la app de encuestas:

    django-admin startproject mysite
    
    python manage.py startapp polls
    
  • El archivo settings.py contiene la configuración de tu base de datos de SQL:

    DATABASES = {
        'default': {
            # If you are using Cloud SQL for MySQL rather than PostgreSQL, set
            # 'ENGINE': 'django.db.backends.mysql' instead of the following.
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'polls',
            'USER': '<your-database-user>',
            'PASSWORD': '<your-database-password>',
            # For MySQL, set 'PORT': '3306' instead of the following. Any Cloud
            # SQL Proxy instances running locally must also be set to tcp:3306.
            'PORT': '5432',
        }
    }
    # In the flexible environment, you connect to CloudSQL using a unix socket.
    # Locally, you can use the CloudSQL proxy to proxy a localhost connection
    # to the instance
    DATABASES['default']['HOST'] = '/cloudsql/<your-cloudsql-connection-string>'
    if os.getenv('GAE_INSTANCE'):
        pass
    else:
        DATABASES['default']['HOST'] = '127.0.0.1'
  • Para especificar cómo la app entrega contenido estático, en el archivo settings.py, configura el valor de STATIC_URL:

    # Fill in your cloud bucket and switch which one of the following 2 lines
    # is commented to serve static content from GCS
    # STATIC_URL = 'https://storage.googleapis.com/<your-gcs-bucket>/static/'
    STATIC_URL = '/static/'
  • El archivo app.yaml contiene la información de configuración para la implementación en el entorno flexible:

    runtime: python
    env: flex
    entrypoint: gunicorn -b :$PORT mysite.wsgi
    
    beta_settings:
        cloud_sql_instances: <your-cloudsql-connection-string>
    
    runtime_config:
      python_version: 3