Las apps de ⌘ que se ejecutan en el entorno flexible de App Engine escalan de forma dinámica según el tráfico.
En este instructivo, se presupone que estás familiarizado con el desarrollo web de ⌘. Si es la primera vez que usas el desarrollo de ⌘, te recomendamos trabajar con la escritura de tu primera app de ⌘ antes de continuar.
Si bien en este instructivo se muestra Django de forma específica, puedes usar este proceso de implementación con otros marcos de trabajo basados en Django, como Wagtail y el Django CMS.
En este instructivo, se usa Django 3.que requiere al menos Python 3.7. El entorno flexible de App Engine es compatible con Python 3.7.
Objetivos
En este instructivo, podrás:
- Crear y conectar una base de datos de Cloud SQL
- Crea y usa los valores secretos de Secret Manager.
Implementa una app de ⌘ en el entorno flexible de App Engine.
Alojar archivos estáticos en Cloud Storage
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Si aún no lo hiciste, inicializa App Engine y selecciona la región que prefieras:
gcloud app create
Prepara el entorno
Clona una app de ejemplo
El código de la app de muestra de Django está en el repositorio GoogleCloudPlatform/python-docs-samples en GitHub.
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
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
Confirme su configuración de Python
Este instructivo se basa en Python para ejecutar la aplicación de ejemplo en tu máquina. El código de muestra también requiere instalar dependencias
Para obtener más detalles, consulta la guía del entorno de desarrollo de Python.
Asegúrate de que tu versión de Python sea la 3.7.
python -V
Debería ver
Python 3.7.3
o una versión posterior.Cree un entorno virtual de Python y, luego, instale las dependencias:
Linux/macOS
python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt
Windows
python -m venv env venv\scripts\activate pip install --upgrade pip pip install -r requirements.txt
Descarga el proxy de Cloud SQL Auth para conectarte a Cloud SQL desde tu máquina local
Cuando se implementa, la aplicación usa el proxy de Cloud SQL Auth integrado en el entorno flexible de App Engine para comunicarse con la 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. Para obtener más detalles, consulta la guía del proxy de Cloud SQL Auth.
El proxy de Cloud SQL Auth utiliza la API de Cloud SQL para interactuar con su instancia de SQL. Para hacerlo, se necesita la autenticación de aplicación a través de gcloud.
Autentica y adquiere credenciales para la API:
gcloud auth application-default login
Descarga e instala el proxy de Cloud SQL Auth en tu máquina local.
Linux de 64 bits
- Descarga el proxy de autenticación de Cloud SQL:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
Linux de 32 bits
- Descarga el proxy de autenticación de Cloud SQL:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
- Si no se encuentra el comando
wget
, ejecutasudo apt-get install wget
y repite el comando de descarga. - Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
macOS de 64 bits
- Descarga el proxy de autenticación de Cloud SQL:
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
macOS de 32 bits
- Descarga el proxy de autenticación de Cloud SQL:
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
Mac M1
- Descarga el proxy de autenticación de Cloud SQL:
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.arm64
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
Windows de 64 bits
Para descargar el proxy de autenticación de Cloud SQL, 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 porcloud_sql_proxy.exe
.Windows de 32 bits
Para descargar el proxy de autenticación de Cloud SQL, 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 porcloud_sql_proxy.exe
.Imagen de Docker del proxy de Cloud SQL Auth
Para mayor comodidad, varias imágenes de contenedor que contienen el proxy de autenticación de Cloud SQL están disponibles en GitHub en el repositorio del proxy de autenticación de Cloud SQL. Puedes extraer la última imagen a tu máquina local usando Docker mediante el siguiente comando:docker pull gcr.io/cloudsql-docker/gce-proxy:1.30.1
Otro SO
Para otros sistemas operativos que no se incluyen aquí, puedes compilar el proxy de Cloud SQL Auth desde la fuente.Puedes optar por mover la descarga a un lugar común, como una ubicación en tu
PATH
o el directorio de inicio. Si eliges hacerlo, cuando inicies el proxy de Cloud SQL Auth más adelante en el instructivo, recuerda hacer referencia a la ubicación que elijas cuando uses los comandos decloud_sql_proxy
.- Descarga el proxy de autenticación de Cloud SQL:
Crear servicios de copia de seguridad
En este instructivo, se usan varios servicios de Google Cloud para proporcionar la base de datos, el almacenamiento de contenido multimedia y el almacenamiento secreto que admiten el proyecto implementado de ⌘. Estos servicios se implementan en una región específica. Para obtener eficiencia entre los servicios, todos los servicios deben implementarse en la misma región. Si quieres obtener más información sobre la región más cercana, consulta Productos disponibles por región.
Configura una instancia de Cloud SQL para PostgreSQL
TeamYouTube admite oficialmente varias bases de datos relacionales, pero ofrece la mayor compatibilidad con PostgreSQL. PostgreSQL es compatible con Cloud SQL, por lo que este instructivo elige usar ese tipo de base de datos.
En la siguiente sección, se describe la creación de una instancia, una base de datos y un usuario de base de datos para PostgreSQL para la app.
Crea la instancia de PostgreSQL:
Console
En Cloud Console, ve a la página Instancias de Cloud SQL.
Haga clic en Crear instancia.
Haz clic en PostgreSQL.
En el campo ID de instancia, ingresa
INSTANCE_NAME
.Ingresa una contraseña para el usuario de postgres.
Mantén los valores predeterminados en los otros campos.
Haga clic en Crear.
La instancia tarda unos minutos en crearse y estar lista para usarse.
gcloud
Crea la instancia de PostgreSQL:
gcloud sql instances create INSTANCE_NAME \ --project PROJECT_ID \ --database-version POSTGRES_13 \ --tier db-f1-micro \ --region REGION
Reemplaza lo siguiente:
INSTANCE_NAME
: Es el nombre de la instancia de Cloud SQL.PROJECT_ID
: El ID del proyecto de Google CloudREGION
: la región de Google Cloud
La instancia tarda unos minutos en crearse y estar lista para usarse.
En la instancia creada, cree una base de datos:
Console
- En la página de la instancia, ve a la pestaña Bases de datos.
- Haga clic en Create database.
- En el diálogo Nombre de la base de datos, ingresa
DATABASE_NAME
. - Haga clic en Crear.
gcloud
Cree la base de datos en la instancia creada recientemente:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAME
Reemplaza
DATABASE_NAME
por un nombre para la base de datos dentro de la instancia.
Cree un usuario de base de datos:
Console
- En la página de tu instancia, ve a la pestaña Usuarios.
- Haz clic en Agregar cuenta de usuario.
- En el cuadro de diálogo Agregar una cuenta de usuario a la instancia en la autenticación integrada, haz lo siguiente:
- Ingresa el nombre de usuario
DATABASE_USERNAME
. - Ingresa la contraseña
DATABASE_PASSWORD
- Haga clic en Agregar.
gcloud
Cree el usuario en la instancia creada recientemente:
gcloud sql users create DATABASE_USERNAME \ --instance INSTANCE_NAME \ --password DATABASE_PASSWORD
Reemplaza
PASSWORD
por una contraseña segura.
Configure un bucket de Cloud Storage
Con Cloud Storage, puedes almacenar elementos estáticos incluidos en JobScheduler, así como contenido multimedia subido por el usuario.
El paquete django-storages[google]
controla la interacción de ⌘ con este backend de almacenamiento.
Console
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create bucket.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
- For Name your bucket, enter a name that meets the bucket naming requirements.
- For Location, select the following: MEDIA_BUCKET
- For Choose a default storage class for your data, select the following: Standard.
- For Choose how to control access to objects, select an Access control option.
- For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
- Click Create.
gcloud
Se instaló la herramienta de línea de comandos de gsutil
como parte de la instalación de la CLI de gcloud.
Cree un bucket de Cloud Storage:
gsutil mb -l REGION gs://PROJECT_ID_MEDIA_BUCKET
Reemplaza
MEDIA_BUCKET
por un sufijo para el bucket de contenido multimedia. Esto, junto con el ID del proyecto, crea un nombre de bucket único.
Almacena valores secretos en el Secret Manager
Ahora que los servicios de copia de seguridad están configurados, JobScheduler necesita información sobre ellos. En este instructivo, en lugar de colocar estos valores directamente en el código fuente de ⌘, se usa Secret Manager para almacenar esta información de forma segura.
El entorno flexible de App Engine interactúa con los secretos a través de su cuenta de servicio.Cree un archivo de entorno de Django como un secreto del Secret Manager
Almacena la configuración necesaria para iniciar JobScheduler en un archivo de entorno seguro.
La app de muestra usa la API de Secret Manager para recuperar el valor del secreto, y el paquete django-environ
a fin de cargar los valores en el entorno de ⌘. El secreto está configurado para que el entorno flexible de App Engine pueda acceder a él.
Crea un archivo llamado
.env
, que defina la string de conexión de la base de datos, el nombre del bucket de medios y un valorSECRET_KEY
nuevo:echo DATABASE_URL=postgres://DATABASE_USERNAME:DATABASE_PASSWORD@//cloudsql/PROJECT_ID:REGION:INSTANCE_NAME/DATABASE_NAME > .env echo GS_BUCKET_NAME=PROJECT_ID_MEDIA_BUCKET >> .env echo SECRET_KEY=$(cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]'| fold -w 50 | head -n1) >> .env
Almacene el Secret en Secret Manager:
Console
En Cloud Console, ve a la página Secret Manager.
Haz clic en Crear Secreto.
En el campo Nombre, ingresa
django_settings
.En el diálogo Valor del Secret, pega el contenido de tu archivo
.env
.Haz clic en Crear secreto.
Borra el archivo local para evitar las anulaciones de configuración local.
gcloud
Crea un secreto nuevo,
django_settings
, con el valor del archivo.env
:gcloud secrets create django_settings --data-file .env
Para confirmar la creación del secreto, revísalo:
gcloud secrets describe django_settings gcloud secrets versions access latest --secret django_settings
Borra el archivo local para evitar las anulaciones de configuración local:
rm .env
Configure el acceso al secreto:
Console
- Haz clic en la pestaña Permisos.
- Haga clic en Agregar.
- En el campo Nuevos miembros, ingresa
PROJECT_ID@appspot.gserviceaccount.com
y, luego, presionaEnter
. - En el menú desplegable Función, selecciona Descriptor de acceso a secretos de Secret Manager.
- Haz clic en Guardar.
gcloud
Otorga acceso al secreto a la cuenta de servicio flexible de App Engine:
gcloud secrets add-iam-policy-binding django_settings \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Cómo ejecutar la app en una computadora local
Con los servicios de copia de seguridad configurados, ahora puedes ejecutar la app en tu computadora. Esta configuración permite el desarrollo local, la creación de un superusuario y la aplicación de migraciones de bases de datos.
En una terminal separada, inicie el proxy de Cloud SQL Auth:
Linux/macOS
./cloud_sql_proxy -instances="PROJECT_ID:REGION:INSTANCE_NAME"=tcp:5432
Windows
cloud_sql_proxy.exe -instances="PROJECT_ID:REGION:INSTANCE_NAME"=tcp:5432
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 Auth en ejecución durante todo el tiempo que pruebes la app de manera local. Ejecutar este proceso en una terminal separada te permite seguir trabajando mientras se ejecuta.
En una terminal nueva, configura el ID del proyecto de forma local (que usa la API de Secret Manager):
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Windows
set GOOGLE_CLOUD_PROJECT=PROJECT_ID
Establezca una variable de entorno para indicar que utiliza el proxy de Cloud SQL Auth (este valor se reconoce en el código):
Linux/macOS
export USE_CLOUD_SQL_AUTH_PROXY=true
Windows
set USE_CLOUD_SQL_AUTH_PROXY=true
Ejecuta las migraciones de ⌘ para configurar tus modelos y elementos:
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate python manage.py collectstatic
Inicia el servidor web de ⌘:
python manage.py runserver
En tu navegador, ve a 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.
Presiona
Ctrl
/Cmd
+C
para detener el servidor web local.
Usar la Consola del administrador de Django
Para acceder a la Consola del administrador de ⌘, debes crear un superusuario. Dado que tiene una conexión de acceso local a la base de datos, puede ejecutar los siguientes comandos de administración:
Crea un superusuario. Se le pedirá que ingrese un nombre de usuario, un correo electrónico y una contraseña.
python manage.py createsuperuser
Inicia un servidor web local:
python manage.py runserver
En tu navegador, ve a http://localhost:8000/admin.
Accede al sitio del administrador con el nombre de usuario y la contraseña que usaste cuando ejecutaste
createsuperuser
.
Implementar la app en el entorno flexible App Engine
Con todos los servicios de copia de seguridad configurados y la aplicación probada de forma local, ahora puede implementar la aplicación en el entorno flexible de App Engine:
- Abre
app.yaml
y actualiza el valor decloud_sql_instances
con la string de tu instancia de Cloud SQL:... beta_settings: cloud_sql_instances: PROJECT_ID:REGION:INSTANCE_NAME
- Para subir la app, ejecuta el siguiente comando, que implementa la app como se describe en
app.yaml
y configura la versión recién implementada como la versión predeterminada, lo que hará que se entregue todo el tráfico nuevo:gcloud app deploy
- Para confirmar la configuración, escribe “sí” cuando se te solicite.
- Espera a que aparezca el mensaje que informa que la actualización se completó.
Ejecuta la app implementada
Ya se implementó la aplicación y ahora es posible acceder a ella:
Abre el sitio web implementado:
gcloud app browse
También puedes mostrar la URL y abrirla de forma manual:
gcloud app describe --format "value(defaultHostname)"
Un servidor web que se ejecuta en el entorno flexible de App Engine entrega tu solicitud.
Actualizar la aplicación
Para actualizar tu aplicación, realiza cambios en el código y vuelve a ejecutar el comando gcloud app deploy
.
La implementación nueva crea una versión nueva de tu app y la convierte en 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.
Configuración para producción
Ahora tienes una implementación de ⌘ en funcionamiento, pero hay más pasos que puedes seguir para asegurarte de que tu aplicación esté lista para producción.
Inhabilitar depuración
Confirma que la variable DEBUG
de mysite/settings.py
esté configurada en False
. Esto evitará que el usuario vea páginas de error detalladas, lo que puede filtrar información sobre las configuraciones.
Limita los privilegios de usuario de la base de datos.
Todos los usuarios que se crean mediante Cloud SQL tienen los privilegios asociados a la función de cloudsqlsuperuser
: CREATEROLE
, CREATEDB
y LOGIN
.
Crea el usuario de PostgreSQL de forma manual para evitar que tenga permisos. Deberás tener instalada la terminal interactiva psql
o usar Cloud Shell, que tenga esta herramienta preinstalada.
Console
-
In the Google Cloud console, activate Cloud Shell.
En Cloud Shell, usa la terminal integrada para conectarte a tu instancia de
INSTANCE_NAME
:gcloud sql connect INSTANCE_NAME --user postgres
Ingresa la contraseña de usuario de postgres.
Ahora estás usando
psql
. Deberías ver el mensaje depostgres=>
.Crear un usuario
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Reemplaza
PASSWORD
por una contraseña aleatoria.Otorga todos los derechos sobre la base de datos nueva al usuario nuevo:
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Salga de
psql
:\q
gcloud
Inicia una conexión a la instancia de SQL:
gcloud sql connect INSTANCE_NAME --user postgres
Reemplaza
INSTANCE_NAME
por la instancia de Cloud SQL creada.Ingresa la contraseña de usuario de postgres.
Ahora estás usando
psql
. Deberías ver el mensaje depostgres=>
.Crear un usuario
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Otorga todos los derechos sobre la base de datos nueva al usuario nuevo:
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Salga de
psql
:\q
Examine el código
Aplicación de muestra
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
Las vistas base, los modelos y las configuraciones de ruta se copiaron de Cómo escribir tu primera app de npm (Parte 1 y Parte 2).
Secretos del Secret Manager
El archivo settings.py
contiene código que usa la API de Python de Secret Manager para recuperar la versión más reciente del secreto con nombre y extraerlo en el entorno (con django-environ
):
El secreto se usa para almacenar varios valores de Secrets a fin de reducir la cantidad de Secrets diferentes que se deben configurar.
Anulaciones de Secrets locales
Si se encuentra un archivo .env
en el sistema de archivos local, se usa en lugar del valor de Secret Manager. Crear un archivo .env
de forma local puede ayudarte con las pruebas locales (p.ej., el desarrollo local en función de una base de datos SQLite o cualquier otra configuración local).
Conexión a base de datos
El archivo settings.py
contiene la configuración de tu base de datos de SQL: Si
configuras USE_CLOUD_SQL_AUTH_PROXY
, la configuración DATABASES
cambia para inferir
el uso del proxy de Cloud SQL Auth.
Estática almacenada en la nube
El archivo settings.py
también usa django-storages
para integrar el bucket de medios de Cloud Storage directamente en el proyecto:
app.yaml
de App Engine
El archivo app.yaml
contiene información de configuración para la implementación en el entorno flexible:
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
¿Qué sigue?
- Aprende a configurar PostgreSQL para producción
- Obtén más información sobre Django en Google Cloud