Ejecutar Django en el entorno flexible de App Engine

Comenzar a desarrollar apps de Django que se ejecuten en el entorno flexible de Google App Engine es fácil. Como las apps que crees se ejecutarán en la misma infraestructura en la que se basan todos los productos de Google, ten la confianza 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 3.4 o superior.

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_blankcheck_boxHabilita 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 muestra de Django

El código de la app de muestra de Django está en el repositorio de muestras de Python 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/flexible/django_cloudsql

Windows

cd python-docs-samples\appengine/flexible\django_cloudsql

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 tu instancia de Cloud SQL, usa el cliente PostgreSQL.

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 PostgreSQL.

    Ponle a la instancia el nombre polls-instance o uno similar. Es posible que la instancia necesite algunos minutos para estar lista. Una vez que 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:5432

    Windows

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

    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 POSTGRES

    1. En una pestaña separada de la línea de comandos, instala el cliente 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. Usa los siguientes comandos para crear las bases de datos, usuarios y permisos de acceso requeridos en tu base de datos de Cloud SQL. Reemplaza [POSTGRES_USER] y [POSTGRES_PASSWORD] por el nombre de usuario y la contraseña que quieras.
      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];
      

Configurar la base de datos

  1. Edita el archivo mysite/settings.py.

  2. Reemplaza <your-database-user> y <your-database-password> por el nombre de usuario y la contraseña que creaste anteriormente.

  3. Ejecuta el siguiente comando desde la línea de comandos. Copia el valor de connectionName que obtuviste y guárdalo para el paso siguiente.

    gcloud beta sql instances describe [YOUR_INSTANCE_NAME]
    
  4. Reemplaza <your-cloudsql-connection-string> por el valor de connectionName que obtuviste del paso anterior.

  5. 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. Ejecuta el programa principal:

    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 flexible App Engine

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

    Crea un depósito 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 depósito:

    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
    
  4. En mysite/settings.py, configura el valor de STATIC_URL en esta URL:

    https://storage.googleapis.com/<your-gcs-bucket>/static/
    
  5. En app.yaml, remplaza <your-cloudsql-connection-string> con el valor de connectionName que obtengas del siguiente comando:

    gcloud beta sql instances describe [YOUR_INSTANCE_NAME]
    
  6. Ingresa este comando para implementar la muestra:

    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 flexible App Engine atiende tu 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. 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 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 tu app y la convierte a la versión predeterminada. Las versiones anteriores de la app se conservan, al igual que sus instancias de VM asociadas. Ten en cuenta que todas estas instancias de VM y versiones de la app son recursos facturables. Para obtener información acerca de cómo borrar o detener las instancias de VM, consulta Limpieza.

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ó usando 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:

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'

Además, puedes configurar el valor de STATIC_URL en el archivo settings.py para especificar el modo en que la app procesa el contenido estático:

# 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
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...