Django CMS в Cloud Run

1. Введение

89eb4723767d4525.png

Cloud Run — это управляемая вычислительная платформа, позволяющая запускать контейнеры без сохранения состояния, вызываемые через HTTP-запросы. Cloud Run — это бессерверная платформа: она абстрагирует все управление инфраструктурой, позволяя вам сосредоточиться на самом важном — создании превосходных приложений.

Он также имеет встроенную связь со многими другими компонентами экосистемы Google Cloud, включая Cloud SQL для управляемых баз данных, Cloud Storage для унифицированного объектного хранилища и Secret Manager для управления секретами.

Django CMS — это корпоративная система управления контентом (CMS), построенная на основе Django. Django — это высокоуровневый веб-фреймворк на языке Python.

В этом руководстве вы используете эти компоненты для развертывания небольшого проекта Django CMS.

Примечание: Данная практическая работа была в последний раз проверена с использованием Django CMS 4.1.2 через django-cms/cms-template v4.1 .

Что вы узнаете

  • Как использовать Cloud Shell
  • Как создать базу данных Cloud SQL
  • Как создать хранилище Cloud Storage
  • Как создать секреты в Secret Manager
  • Как использовать секреты из различных сервисов Google Cloud
  • Как подключить компоненты Google Cloud к сервису Cloud Run
  • Как использовать Container Registry для хранения собранных контейнеров
  • Как развернуть приложение в Cloud Run
  • Как выполнить миграцию схемы базы данных в Cloud Build

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Google Cloud Shell

Хотя Google Cloud можно запускать удалённо с ноутбука, в этом практическом занятии мы будем использовать Google Cloud Shell — среду командной строки, работающую в облаке.

Активировать Cloud Shell

  1. В консоли Cloud нажмите «Активировать Cloud Shell» . d1264ca30785e435.png .

cb81e7c8e34bc8d.png

Если вы запускаете Cloud Shell впервые, вам будет показан промежуточный экран с описанием его возможностей. Если вам был показан промежуточный экран, нажмите «Продолжить» .

d95252b003979716.png

Подготовка и подключение к Cloud Shell займут всего несколько минут.

7833d5e1c5d18f54.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Большая часть, если не вся, ваша работа в этом практическом задании может быть выполнена с помощью браузера.

После подключения к Cloud Shell вы увидите, что прошли аутентификацию и что проект настроен на ваш идентификатор проекта.

  1. Выполните следующую команду в Cloud Shell, чтобы подтвердить свою аутентификацию:
gcloud auth list

вывод команды

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project

вывод команды

[core]
project = <PROJECT_ID>

Если это не так, вы можете установить это с помощью следующей команды:

gcloud config set project <PROJECT_ID>

вывод команды

Updated property [core/project].

3. Включите облачные API.

В оболочке Cloud Shell включите облачные API для используемых компонентов:

gcloud services enable \
  run.googleapis.com \
  sql-component.googleapis.com \
  sqladmin.googleapis.com \
  compute.googleapis.com \
  cloudbuild.googleapis.com \
  secretmanager.googleapis.com \
  artifactregistry.googleapis.com

Поскольку вы впервые обращаетесь к API из gcloud, вам будет предложено авторизоваться, используя ваши учетные данные, для выполнения этого запроса. Это будет происходить один раз за сеанс Cloud Shell.

Выполнение этой операции может занять несколько минут.

После завершения должно появиться сообщение об успешном завершении, похожее на это:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

4. Создайте шаблон проекта.

В качестве примера проекта Django CMS вы будете использовать шаблон Django CMS cms-template .

Для создания этого шаблонного проекта используйте Cloud Shell, чтобы создать новую директорию с именем djangocms-cloudrun и перейдите в неё:

mkdir ~/djangocms-cloudrun
cd ~/djangocms-cloudrun

Установите пакет django-cms во временную виртуальную среду:

virtualenv venv
source venv/bin/activate
pip install djangocms-frontend\[cms-4]

Создайте копию проекта cms-template:

django-admin startproject --template https://github.com/django-cms/cms-template/archive/4.1.zip myproject .

Переименуйте файл requirements.in в requirements.txt . (Файл .in генерируется pip-tools для создания файлов requirements.txt, но его можно использовать как есть, если изменить расширение. На последующих этапах pip ожидает расширение .txt .)

mv requirements.in requirements.txt

Теперь у вас будет шаблон проекта Django CMS в папке с именем myproject :

ls -F
manage.py*  media/  myproject/  project.db requirements.txt  static/ venv/

Теперь вы можете выйти и удалить свою временную виртуальную среду:

deactivate
rm -rf venv

Отсюда внутри контейнера будет вызвана система управления контентом Django CMS.

5. Создайте вспомогательные сервисы.

Теперь вам нужно будет создать вспомогательные сервисы: выделенную учетную запись службы, реестр артефактов, базу данных Cloud SQL, хранилище Cloud Storage и ряд значений Secret Manager.

Защита паролей, используемых при развертывании, важна для безопасности любого проекта и гарантирует, что никто случайно не поместит пароли туда, куда им не следует (например, непосредственно в файлы настроек или введет их непосредственно в терминале, откуда их можно будет восстановить из истории).

Для начала установите две базовые переменные среды, одну из которых будет содержать идентификатор проекта:

PROJECT_ID=$(gcloud config get-value core/project)

И еще один для этого региона:

REGION=us-central1

Создайте учетную запись службы

Чтобы ограничить доступ сервиса к другим частям Google Cloud, создайте выделенную учетную запись сервиса:

gcloud iam service-accounts create cloudrun-serviceaccount

В последующих разделах этого практического занятия вы будете ссылаться на этот аккаунт по адресу электронной почты. Установите это значение в переменной среды:

SERVICE_ACCOUNT=$(gcloud iam service-accounts list \
    --filter cloudrun-serviceaccount --format "value(email)")

Создать реестр артефактов

Для сохранения созданного образа контейнера создайте реестр контейнеров в выбранном вами регионе:

gcloud artifacts repositories create containers --repository-format docker --location $REGION

В последующих разделах этого практического занятия вы будете ссылаться на этот реестр по имени:

ARTIFACT_REGISTRY=${REGION}-docker.pkg.dev/${PROJECT_ID}/containers

Создайте базу данных

Создайте экземпляр Cloud SQL:

gcloud sql instances create myinstance --project $PROJECT_ID \
  --database-version POSTGRES_14 --tier db-f1-micro --region $REGION

Выполнение этой операции может занять несколько минут.

В этом случае создайте базу данных:

gcloud sql databases create mydatabase --instance myinstance

В этом же случае создайте пользователя:

DJPASS="$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1)"
gcloud sql users create djuser --instance myinstance --password $DJPASS

Предоставьте учетной записи службы разрешение на подключение к экземпляру:

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/cloudsql.client

Создайте хранилище (сумку для хранения).

Создайте сегмент Cloud Storage (обратите внимание, что имя должно быть уникальным во всем мире):

GS_BUCKET_NAME=${PROJECT_ID}-media
gcloud storage buckets create gs://${GS_BUCKET_NAME} --location ${REGION} 

Предоставьте учетной записи службы права на администрирование хранилища:

gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET_NAME} \
    --member serviceAccount:${SERVICE_ACCOUNT} \
    --role roles/storage.admin

Поскольку объекты, хранящиеся в хранилище, будут иметь другой источник (URL хранилища, а не URL Cloud Run), необходимо настроить параметры совместного использования ресурсов между источниками (CORS) .

Создайте новый файл с именем cors.json со следующим содержимым:

touch cors.json
cloudshell edit cors.json

cors.json

[
    {
      "origin": ["*"],
      "responseHeader": ["Content-Type"],
      "method": ["GET"],
      "maxAgeSeconds": 3600
    }
]

Примените эту конфигурацию CORS к только что созданному сегменту хранения:

gsutil cors set cors.json gs://$GS_BUCKET_NAME

Сохраняйте конфигурацию в качестве секрета.

После настройки вспомогательных служб вам необходимо сохранить эти значения в файле, защищенном с помощью Secret Manager.

Secret Manager позволяет хранить, управлять и получать доступ к секретам в виде двоичных данных или текстовых строк. Он хорошо подходит для хранения информации о конфигурации, такой как пароли к базам данных, ключи API или TLS-сертификаты, необходимые приложению во время выполнения.

Сначала создайте файл со значениями для строки подключения к базе данных , медиатеки, секретного ключа для Django (используемого для криптографической подписи сессий и токенов), а также для включения отладки:

echo DATABASE_URL=\"postgres://djuser:${DJPASS}@//cloudsql/${PROJECT_ID}:${REGION}:myinstance/mydatabase\" > .env

echo GS_BUCKET_NAME=\"${GS_BUCKET_NAME}\" >> .env

echo SECRET_KEY=\"$(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 50 | head -n 1)\" >> .env

echo DEBUG=True >> .env

Затем создайте секрет с именем application_settings , используя этот файл в качестве секрета:

gcloud secrets create application_settings --data-file .env

Предоставьте учетной записи службы доступ к этому секретному ключу:

gcloud secrets add-iam-policy-binding application_settings \
  --member serviceAccount:${SERVICE_ACCOUNT} --role roles/secretmanager.secretAccessor

Подтвердите создание секрета, перечислив все секреты:

gcloud secrets versions list application_settings

После подтверждения создания секрета удалите локальный файл:

rm .env

6. Настройте ваше приложение.

Учитывая созданные вами сервисы поддержки, вам потребуется внести некоторые изменения в шаблон проекта в соответствии с вашими потребностями.

Это включает в себя внедрение django-environ для использования переменных окружения в качестве параметров конфигурации, которые вы будете заполнять значениями, определенными вами в качестве секретов. Для реализации этого вам потребуется расширить настройки шаблона. Вам также потребуется добавить дополнительные зависимости Python.

Настройка параметров

Переместите файл settings.py , переименовав его в basesettings.py:

mv myproject/settings.py myproject/basesettings.py

С помощью веб-редактора Cloud Shell создайте новый файл settings.py со следующим кодом:

touch myproject/settings.py
cloudshell edit myproject/settings.py

myproject/settings.py

import io
import os
from urllib.parse import urlparse

import environ

# Import the original settings from each template
from .basesettings import *

# Load the settings from the environment variable
env = environ.Env()
env.read_env(io.StringIO(os.environ.get("APPLICATION_SETTINGS", None)))

# Setting this value from django-environ
SECRET_KEY = env("SECRET_KEY")

# Ensure myproject is added to the installed applications
if "myproject" not in INSTALLED_APPS:
    INSTALLED_APPS.append("myproject")

# If defined, add service URLs to Django security settings
CLOUDRUN_SERVICE_URLS = env("CLOUDRUN_SERVICE_URLS", default=None)
if CLOUDRUN_SERVICE_URLS:
    CSRF_TRUSTED_ORIGINS = env("CLOUDRUN_SERVICE_URLS").split(",")
    # Remove the scheme from URLs for ALLOWED_HOSTS
    ALLOWED_HOSTS = [urlparse(url).netloc for url in CSRF_TRUSTED_ORIGINS]
else:
    ALLOWED_HOSTS = ["*"]

# Default false. True allows default landing pages to be visible
DEBUG = env("DEBUG", default=False)

# Set this value from django-environ
DATABASES = {"default": env.db()}

# Change database settings if using the Cloud SQL Auth Proxy
if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None):
    DATABASES["default"]["HOST"] = "127.0.0.1"
    DATABASES["default"]["PORT"] = 5432

# Define static storage via django-storages[google]
GS_BUCKET_NAME = env("GS_BUCKET_NAME")
STATICFILES_DIRS = []
GS_DEFAULT_ACL = "publicRead"
STORAGES = {
    "default": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
    "staticfiles": {
        "BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
    },
}

Пожалуйста, уделите время ознакомлению с комментариями, добавленными к каждой конфигурации.

Обратите внимание, что в этом файле могут появиться ошибки проверки синтаксиса. Это ожидаемо. Cloud Shell не располагает информацией о требованиях к этому проекту и, следовательно, может сообщать о недопустимых и неиспользуемых импортах.

зависимости Python

Найдите файл requirements.txt и добавьте в него следующие пакеты:

cloudshell edit requirements.txt

requirements.txt (добавить)

gunicorn
psycopg2-binary
django-storages[google]
django-environ

Определите образ вашего приложения

Cloud Run запустит любой контейнер, если он соответствует контракту Cloud Run Container Contract . В этом руководстве Dockerfile отсутствует, вместо него используются Cloud Native Buildpacks . Buildpacks помогают создавать контейнеры для распространенных языков программирования, включая Python.

В этом руководстве предлагается настроить Procfile используемый для запуска веб-приложения.

Для контейнеризации шаблонного проекта сначала создайте новый файл с именем Procfile в корневом каталоге вашего проекта (в той же директории, что и manage.py ) и скопируйте в него следующее содержимое:

touch Procfile
cloudshell edit Procfile

Procfile

web: gunicorn --bind 0.0.0.0:$PORT --workers 1 --threads 8 --timeout 0 myproject.wsgi:application

7. Настройка, создание и выполнение шагов миграции.

Для создания схемы базы данных в вашей базе данных Cloud SQL и заполнения вашего хранилища Cloud Storage статическими ресурсами необходимо выполнить команды migrate и collectstatic .

Эти базовые команды миграции Django необходимо запускать в контексте созданного вами образа контейнера, имеющего доступ к вашей базе данных.

Вам также потребуется запустить createsuperuser , чтобы создать учетную запись администратора для входа в административную панель Django.

Для этого вам понадобятся задания Cloud Run. Задания Cloud Run позволяют запускать процессы с заданным завершением, что делает их идеальными для административных задач.

Задайте пароль суперпользователя Django

Для создания суперпользователя используется неинтерактивная версия команды createsuperuser . Эта команда требует наличия специальной переменной среды, которая будет использоваться вместо запроса на ввод пароля.

Создайте новый секретный ключ, используя случайно сгенерированный пароль:

echo -n $(cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 30 | head -n 1) | gcloud secrets create django_superuser_password --data-file=-

Предоставьте вашей служебной учетной записи доступ к этому секретному ключу:

gcloud secrets add-iam-policy-binding django_superuser_password \
  --member serviceAccount:${SERVICE_ACCOUNT} \
  --role roles/secretmanager.secretAccessor

Обновите свой Procfile.

Для большей ясности при работе с заданиями Cloud Run создайте ярлыки в файле Procfile , добавив в него следующие точки входа:

migrate: python manage.py migrate && python manage.py collectstatic --noinput --clear
createuser: python manage.py createsuperuser --username admin --email noop@example.com --noinput

Теперь у вас должно быть три записи: точка входа web по умолчанию, точка входа migrate для применения миграций базы данных и точка входа createuser для выполнения команды createsuperuser .

Создайте образ вашего приложения.

После внесения изменений в файл Procfile выполните сборку образа:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

Создание заданий Cloud Run

Теперь, когда образ создан, вы можете создавать задания Cloud Run, используя его.

Эти задания используют ранее созданный образ, но применяют другие значения command . Они сопоставляются со значениями в Procfile .

Создайте задание для миграции:

gcloud run jobs create migrate \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --command migrate

Создайте задание для создания пользователя:

gcloud run jobs create createuser \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --set-secrets DJANGO_SUPERUSER_PASSWORD=django_superuser_password:latest \
  --service-account $SERVICE_ACCOUNT \
  --command createuser

Выполнить задания Cloud Run

После настройки параметров задания выполните миграции:

gcloud run jobs execute migrate --region $REGION --wait

Убедитесь, что в выводе этой команды указано, что выполнение "успешно завершено".

Эту команду вы выполните позже при внесении изменений в приложение.

После настройки базы данных создайте пользователя, используя задание:

gcloud run jobs execute createuser --region $REGION --wait

Убедитесь, что в выводе этой команды указано, что выполнение "успешно завершено".

Вам не потребуется запускать эту команду снова.

8. Развертывание в облаке.

После создания и заполнения необходимых параметров для вспомогательных служб, вы можете создать службу Cloud Run для доступа к ним.

Первоначальное развертывание вашего контейнеризированного приложения в Cloud Run осуществляется с помощью следующей команды:

gcloud run deploy djangocms-cloudrun \
  --region $REGION \
  --image ${ARTIFACT_REGISTRY}/myimage \
  --set-cloudsql-instances ${PROJECT_ID}:${REGION}:myinstance \
  --set-secrets APPLICATION_SETTINGS=application_settings:latest \
  --service-account $SERVICE_ACCOUNT \
  --allow-unauthenticated

Подождите несколько минут, пока развертывание завершится. В случае успеха в командной строке отобразится URL-адрес службы:

Service [djangocms-cloudrun] revision [djangocms-cloudrun-00001-...] has been deployed and is serving 100 percent of traffic.
Service URL: https://djangocms-cloudrun-...run.app

Теперь вы можете получить доступ к развернутому контейнеру, открыв этот URL-адрес в веб-браузере:

e1fb6858bf11626a.png

Поскольку это новая установка, вы будете автоматически перенаправлены на страницу входа в систему.

9. Доступ к административной панели Django

Одной из главных особенностей Django CMS является интерактивная административная панель.

Обновление настроек CSRF

Django включает защиту от межсайтовой подделки запросов (CSRF) . При каждой отправке формы на вашем сайте Django, включая вход в административную панель Django, проверяется параметр «Доверенные источники». Если он не соответствует источнику запроса, Django возвращает ошибку.

В файле mysite/settings.py , если определена переменная среды CLOUDRUN_SERVICE_URL она используется в настройках CSRF_TRUSTED_ORIGINS и ALLOWED_HOSTS . Хотя определение ALLOWED_HOSTS не является обязательным, рекомендуется добавить его, поскольку оно уже требуется для CSRF_TRUSTED_ORIGINS .

Поскольку вам нужен URL-адрес вашей службы, эту конфигурацию нельзя добавить до первого развертывания.

Вам потребуется обновить свой сервис, чтобы добавить эту переменную окружения. Ее можно добавить в секрет application_settings или напрямую как переменную окружения.

Приведенная ниже реализация использует преимущества форматирования и экранирования gcloud.

Получите URL-адрес вашей службы:

CLOUDRUN_SERVICE_URLS=$(gcloud run services describe djangocms-cloudrun \
  --region $REGION  \
  --format "value(metadata.annotations[\"run.googleapis.com/urls\"])" | tr -d '"[]')
echo $CLOUDRUN_SERVICE_URLS

Установите это значение в качестве переменной среды в вашей службе Cloud Run:

gcloud run services update djangocms-cloudrun \
  --region $REGION \
  --update-env-vars "^##^CLOUDRUN_SERVICE_URLS=$CLOUDRUN_SERVICE_URLS"

Вход в административную панель Django

Для доступа к административному интерфейсу Django добавьте /admin к URL-адресу вашего сервиса.

Теперь войдите в систему под именем пользователя "admin" и получите свой пароль, используя следующую команду:

gcloud secrets versions access latest --secret django_superuser_password && echo ""

da10a148bc1c7994.png

10. Применение обновлений приложения

В процессе разработки приложения вам потребуется протестировать его локально. Для этого вам нужно будет подключиться либо к вашей базе данных Cloud SQL (в производственной среде), либо к локальной базе данных (в тестовой среде).

Подключитесь к вашей производственной базе данных.

Вы можете подключиться к своим экземплярам Cloud SQL, используя Cloud SQL Auth Proxy . Это приложение устанавливает соединение с вашей локальной машины с базой данных.

После установки Cloud SQL Auth Proxy выполните следующие действия:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Run the Cloud SQL Auth Proxy
./cloud-sql-proxy ${PROJECT_ID}:${REGION}:myinstance

# In a new tab, start the local web server using these new settings
USE_CLOUD_SQL_AUTH_PROXY=true APPLICATION_SETTINGS=$(cat temp_settings) python manage.py runserver

Обязательно удалите файл temp_settings после завершения работы.

Подключитесь к локальной базе данных SQLite.

В качестве альтернативы при разработке приложения можно использовать локальную базу данных. Django поддерживает как PostgreSQL, так и SQLite, и хотя у PostgreSQL есть некоторые функции, которых нет у SQLite, во многих случаях функциональность идентична.

Для настройки SQLite вам потребуется обновить параметры приложения, указав локальную базу данных, а затем применить миграции схемы.

Для настройки этого метода:

# Create a virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

# Copy the application settings to your local machine
gcloud secrets versions access latest --secret application_settings > temp_settings

# Edit the DATABASE_URL setting to use a local sqlite file. For example:
DATABASE_URL=sqlite:////tmp/my-tmp-sqlite.db

# Set the updated settings as an environment variable
APPLICATION_SETTINGS=$(cat temp_settings) 

# Apply migrations to the local database
python manage.py migrate

# Start the local web server
python manage.py runserver

Обязательно удалите файл temp_settings после завершения работы.

Создание миграций

При внесении изменений в модели базы данных может потребоваться генерация файлов миграций Django с помощью команды python manage.py makemigrations .

Эту команду можно выполнить после настройки подключения к производственной или тестовой базе данных. В качестве альтернативы, вы можете сгенерировать файлы миграции без базы данных, указав пустые параметры:

SECRET_KEY="" DATABASE_URL="" GS_BUCKET_NAME="" python manage.py makemigrations

Применение обновлений приложения

Для внесения изменений в ваше приложение вам потребуется:

  • Внесите внесенные изменения в новый образ.
  • Примените любые миграции базы данных или статические миграции, а затем
  • Обновите службу Cloud Run, чтобы она использовала новый образ.

Для создания вашего образа:

gcloud builds submit --pack image=${ARTIFACT_REGISTRY}/myimage

Если вам необходимо применить какие-либо миграции, запустите задание Cloud Run:

gcloud run jobs execute migrate --region $REGION --wait

Чтобы обновить ваш сервис с помощью нового образа:

gcloud run services update djangocms-cloudrun \
  --platform managed \
  --region $REGION \
  --image gcr.io/${PROJECT_ID}/myimage

11. Поздравляем!

Вы только что развернули сложный проект в Cloud Run!

  • Cloud Run автоматически и горизонтально масштабирует образ контейнера для обработки поступающих запросов, а затем уменьшает масштаб при снижении спроса. Вы платите только за ресурсы ЦП, памяти и сети, используемые во время обработки запросов.
  • Cloud SQL позволяет автоматически создавать и поддерживать управляемый экземпляр PostgreSQL, который также интегрируется со многими системами Google Cloud.
  • Cloud Storage позволяет получить доступ к облачному хранилищу в Django без каких-либо проблем.
  • Secret Manager позволяет хранить секреты и предоставлять к ним доступ определенным частям Google Cloud, но не всем.

Уборка

Чтобы избежать списания средств с вашего счета Google Cloud Platform за ресурсы, использованные в этом руководстве:

  • В консоли Cloud перейдите на страницу «Управление ресурсами» .
  • В списке проектов выберите свой проект и нажмите «Удалить» .
  • В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.

Узнать больше