Ejecutar Django en el entorno estándar de App Engine

Comenzar a desarrollar apps de Django que se ejecuten en el entorno estándar de Google App Engine es fácil, y como App Engine posee ajustes de escala dinámicos en función del tráfico, puedes estar seguro de que escalarán para atender a todos tus usuarios, ya sean unos pocos o millones.

En este instructivo se da por hecho que tienes conocimientos de desarrollo web con Django. Te guiará en la implementación de la app de instructivo oficial de Django, Escribir tu primera app de Django. Te recomendamos completar ese instructivo antes de este, en especial si recién estás comenzando a desarrollar en Django. Los modelos de la app representan encuestas con preguntas y podrás interactuar con ellos mediante la consola del administrador de Django.

Este instructivo requiere Python 3.7.

Antes de comenzar

Marca cada paso que completes.

  1. check_box_outline_blank check_box Crear un proyecto en Google Cloud Platform Console.
    Si aún no has creado un proyecto, hazlo ahora. Los proyectos te permiten administrar todos los recursos de Google Cloud Platform de tu app, incluidos la implementación, el control de acceso, la facturación y los servicios.
    1. Abre GCP Console.
    2. En el menú desplegable de la parte superior, selecciona Crear un proyecto.
    3. Haz clic en Mostrar opciones avanzadas. En Ubicación de App Engine, selecciona una ubicación en Estados Unidos.
    4. Asigna un nombre a tu proyecto.
    5. Toma nota del ID de proyecto, que podría ser distinto del nombre del proyecto. El ID de proyecto se usa en comandos y configuraciones.
  2. check_box_outline_blank check_box Habilitar la facturación del proyectoy registrarte para una prueba gratuita.

    Si aún no has habilitado la facturación en el proyecto, habilítala ahoray regístrate para una prueba gratuita. Habilitar la facturación permite consumir recursos facturables, como la ejecución de instancias y el almacenamiento de datos. Durante el período de prueba gratuita, no se te cobrará ningún servicio.

  3. check_box_outline_blank check_box Instalar el SDK de Cloud.

    Si aún no lo has hecho, instala y, luego, inicializa el SDK de Cloud ahora. El SDK de Cloud contiene herramientas y bibliotecas que te permiten crear y administrar recursos en GCP.

  4. check_box_outline_blank check_box Habilitar las API para tu proyecto.

    Esto te llevará a GCP Console y habilitará automáticamente las API que usa este instructivo. Las API que se usan son: API de Google Cloud SQL.

Descargar y ejecutar la app

Una vez completados los requisitos, descarga e implementa la app de muestra de Django. Las secciones siguientes te guiarán a través de la configuración, ejecución e implementación de la app de muestra.

Clonar la app de Django

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

Clona el repositorio en tu máquina local:

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

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

Linux/macOS

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

Windows

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

De manera alternativa, puedes descargar la muestra como un archivo zip y extraerlo.

Configurar el entorno local

Tras la implementación, 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 de Cloud SQL en tu entorno de programación.

Obtén más información acerca del proxy de Cloud SQL.

Para realizar tareas administrativas básicas en la instancia de Cloud SQL, usa el cliente MySQL.

Instalar el proxy de SQL

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

Linux de 64 bits

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

Linux de 32 bits

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

macOS de 64 bits

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

macOS de 32 bits

  1. Descarga el proxy:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Haz que el proxy sea ejecutable:
    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…". Cámbiale el nombre a cloud_sql_proxy.exe.

Windows de 32 bits

Para descargar el proxy, haz clic con el botón derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe y selecciona "Guardar vínculo como…". Cámbiale el nombre a cloud_sql_proxy.exe.
Si tu sistema operativo no se incluye aquí, también puedes compilar el proxy desde la fuente.

Crear una instancia de Cloud SQL

  1. Crea una instancia de Cloud SQL para MySQL de segunda generación. Asigna a la instancia el nombre polls-instance o uno similar. Es posible que la instancia tarde algunos minutos en estar lista. Cuando esté lista, debería poder verse en la lista de instancias.
  2. Ahora, usa el SDK de Cloud desde la línea de comandos para ejecutar el siguiente comando. Copia el valor que se muestra para connectionName, ya que lo necesitarás en el paso siguiente.
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

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

Inicializar la instancia de Cloud SQL

  1. Inicia el proxy de Cloud SQL con el valor de connectionName del paso anterior.

    Linux/macOS

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

    Windows

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

    Reemplaza [YOUR_INSTANCE_CONNECTION_NAME] con el valor de connectionName que guardaste en el paso anterior.

    Este paso establece una conexión desde tu computadora local hasta 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. Luego, crea un usuario y una base de datos de Cloud SQL nuevos.

    CONSOLE

    1. Crea una base de datos nueva con GCP Console para la instancia de Cloud SQL polls-instance. Por ejemplo, usa el nombre polls.
    2. Crea un usuario nuevo con GCP Console para la instancia de Cloud SQL polls-instance.

    CLIENTE MYSQL

    1. En una pestaña independiente de la línea de comandos, usa el cliente MySQL o un programa similar para conectarte a tu instancia. Ingresa la contraseña raíz que configuraste cuando te la pidan.
      mysql --host 127.0.0.1 --user root --password
      
    2. Usa los siguientes comandos para crear las bases de datos, los usuarios y los permisos de acceso necesarios en tu base de datos de Cloud SQL. Reemplaza [MYSQL_USER] y [MYSQL_PASSWORD] por el nombre de usuario y la contraseña que desees.
      CREATE DATABASE polls;
      CREATE USER '[MYSQL_USER]' IDENTIFIED BY '[MYSQL_PASSWORD]';
      GRANT ALL ON . TO '[MYSQL_USER]';
      

Configurar la base de datos

  1. Edita el archivo mysite/settings.py.

  2. En dos lugares, reemplaza [YOUR-USERNAME] y [YOUR-PASSWORD] por el nombre de usuario y la contraseña que creaste anteriormente en el paso "Crear una instancia de Cloud SQL". Esto ayuda a configurar la conexión a la base de datos durante la implementación en App Engine y las pruebas locales.

  3. Ejecuta el siguiente comando. Copia el valor de connectionName que obtuviste y guárdalo para el paso siguiente.

    gcloud sql instances describe [YOUR_INSTANCE_NAME]
    
  4. Reemplaza [YOUR-CONNECTION-NAME] por el connectionName del paso anterior.

  5. Reemplaza [YOUR-DATABASE] por el nombre que elegiste en el paso "Inicializar la instancia de Cloud SQL".

  6. Guarda el archivo settings.py y ciérralo.

Ejecutar la app en la computadora local

  1. Para ejecutar la app Django en tu computadora local, tendrás que configurar un entorno de programación de Python que incluya a Python, pip y virtualenv. Para obtener instrucciones, consulta Configurar un entorno de desarrollo de Python para Google Cloud Platform.

  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 el navegador web, ingresa la siguiente dirección:

    http://localhost:8000
    

Deberías ver una página web sencilla con el siguiente texto: "Hello, world. You're at the polls index". El servidor web de Django en ejecución en tu computadora proporciona las páginas de la app de muestra. Cuando quieras avanzar, presiona Ctrl+C para detener el servidor web local.

Usar la consola del administrador de Django

  1. Crea un superusuario:

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

    python manage.py runserver
    
  3. Ingresa la siguiente dirección en el navegador web. Para acceder al sitio del administrador, usa el mismo nombre de usuario y contraseña que creaste cuando ejecutaste createsuperuser.

    http://localhost:8000/admin/
    

Implementar la app en el entorno estándar de App Engine

  1. Recopila todo el contenido estático en una sola carpeta: Este comando mueve todos los archivos estáticos de la app a la carpeta que STATIC_ROOT especifica en settings.py:

    python manage.py collectstatic
    
  2. Para subir la app, ejecuta el siguiente comando desde el directorio python-docs-samples/appengine/standard/django de la aplicación donde se encuentra el archivo app.yaml:

    gcloud app deploy
    

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

Ver la app ejecutándose en la nube

En el navegador web, ingresa la siguiente dirección:

https://<your_project_id>.appspot.com

Esta vez, un servidor web que se ejecuta en el entorno estándar de App Engine atiende la solicitud.

Este comando implementa la aplicación según se describe en el archivo app.yaml y configura la versión recién implementada como la versión predeterminada, lo que hará que procese todo el tráfico nuevo.

Si actualizas tu app, podrás implementar la versión actualizada mediante el mismo comando que usaste para implementar la app por primera vez. La implementación nueva crea una versión nueva de la app y la convierte en la versión predeterminada. Se conservan las versiones anteriores de la app. Ten en cuenta que todas estas versiones de la app son recursos facturables. Para obtener información acerca de cómo borrar las versiones no predeterminadas de tu app, consulta Limpiar.

Producción

Cuando todo esté listo para procesar tu contenido en producción, realiza el siguiente cambio en la configuración:

  1. En mysite/settings.py, cambia la variable DEBUG a False.

Comprender el código

La app de muestra de Django se creó con las herramientas estándar de Django. Los comandos siguientes crean 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 la base de datos de SQL. El código en settings.py usa la variable de entorno GAE_APPLICATION para determinar si la app se ejecuta en App Engine o en tu computadora local. Cuando la app se ejecuta en App Engine, se conecta al host MySQL mediante un socket /cloudsql de Unix. Cuando la app se ejecuta en tu computadora local, se conecta al host de MySQL mediante el TCP, que necesita un nombre de usuario y una contraseña.

if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
        }
    }

El archivo app.yaml contiene información de configuración para la implementación en App Engine. Este archivo app.yaml especifica que App Engine entregará archivos estáticos desde el directorio static/.

runtime: python37

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/

# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...