Os aplicativos Django executados no padrão do App Engine são escalonados dinamicamente de acordo com o tráfego.
Neste tutorial, presume-se que você esteja familiarizado com o desenvolvimento de Web com o Django. Se você é novo no desenvolvimento do Django, é uma boa ideia trabalhar com como escrever seu primeiro app Django antes de continuar.
Embora este tutorial demonstre especificamente o Django, é possível usar esse processo de implantação com outros frameworks baseados em Django, como Wagtail e Django CMS.
Este tutorial usa o Django 4, que requer pelo menos o Python 3.8. O padrão do App Engine é compatível com Python 3.7 e superior, incluindo Python 3.8.
Objetivos
Com este tutorial, você vai:
- Criar e conectar um banco de dados do Cloud SQL.
- Criar e usar valores de secret do Secret Manager.
- Implantar um aplicativo Django no ambiente padrão do App Engine.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- 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
- Se ainda não tiver feito isso, inicialize o App Engine e selecione a região de sua preferência:
gcloud app create
Preparar o ambiente
Clonar um aplicativo de exemplo
O código do app de exemplo em Django está na GoogleCloudPlatform/python-docs-samples no GitHub.
Você pode fazer o download da amostra como um arquivo ZIP e extraia-o ou clone o repositório na sua máquina local:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Acesse o diretório que contém o código de amostra:
Linux/MacOS
cd python-docs-samples/appengine/standard_python3/django
Windows
cd python-docs-samples\appengine\standard_python3\django
Confirmar a configuração do Python
Este tutorial depende do Python para executar o aplicativo de amostra na máquina. O exemplo de código também requer a instalação de dependências
Para mais detalhes, consulte o guia do ambiente de desenvolvimento em Python.
Confirme se a versão do Python é a 3.8 ou mais recente.
python -V
Você verá
Python 3.8.0
ou superior.Crie um ambiente virtual do Python e instale as dependências:
Linux/macOS
python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt
Windows
python -m venv venv venv\scripts\activate pip install --upgrade pip pip install -r requirements.txt
Baixe o Cloud SQL Auth Proxy para se conectar ao Cloud SQL de sua máquina local
Quando implantado, o app usa o proxy do Cloud SQL Auth integrado ao o ambiente padrão do App Engine para se comunicar com o Cloud SQL instância. No entanto, para testar o aplicativo no local, é necessário instalar e usar uma cópia local do proxy no ambiente de desenvolvimento. Para mais detalhes, consulte a Guia do proxy do Cloud SQL Auth
O proxy do Cloud SQL Auth usa a API Cloud SQL para interagir com sua instância do SQL. Para isso, é preciso autenticar o aplicativo pela CLI gcloud.
Autentique e receba as credenciais da API:
gcloud auth application-default login
Faça o download e instale o proxy do Cloud SQL Auth na sua máquina local.
Linux de 64 bits
- Faça o download do proxy do Cloud SQL Auth:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.linux.amd64
- Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
Linux de 32 bits
- Faça o download do proxy do Cloud SQL Auth:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.linux.386
- Se o comando
curl
não for encontrado, executesudo apt install curl
e repita o comando de download. - Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
macOS de 64 bits
- Faça o download do proxy do Cloud SQL Auth:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.darwin.amd64
- Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
Mac M1
- Faça o download do proxy do Cloud SQL Auth:
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.darwin.arm64
- Torne o proxy do Cloud SQL Auth executável:
chmod +x cloud-sql-proxy
Windows de 64 bits
Clicar com o botão direito https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.x64.exe e selecione Salvar link como para fazer o download do proxy do Cloud SQL Auth. Renomeie o arquivo paracloud-sql-proxy.exe
.Windows de 32 bits
Clicar com o botão direito https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.x86.exe e selecione Salvar link como para fazer o download do proxy do Cloud SQL Auth. Renomeie o arquivo paracloud-sql-proxy.exe
.Imagem Docker do proxy do Cloud SQL Auth
O proxy do Cloud SQL Auth tem imagens de contêiner diferentes, como
distroless
,alpine
ebuster
. A imagem de contêiner padrão do proxy do Cloud SQL Auth usadistroless
, que não contém shell. Se você precisar de um shell ou de ferramentas relacionadas, faça o download de uma imagem baseada emalpine
oubuster
. Para mais informações, consulte Imagens de contêiner do proxy do Cloud SQL Auth.Você pode extrair a imagem mais recente para sua máquina local usando o Docker usando o seguinte comando:
docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.13.0
Outros SOs
Para outros sistemas operacionais não incluídos aqui, compile o proxy do Cloud SQL Auth a partir do código-fonte.Você pode optar por mover o download para um lugar comum, como um local no
PATH
ou seu diretório principal. Se optar por fazer isso, ao iniciar o proxy de autenticação do Cloud SQL posteriormente no tutorial, lembre-se de mencionar o local escolhido ao usar comandoscloud-sql-proxy
.- Faça o download do proxy do Cloud SQL Auth:
Criar serviços de apoio
Neste tutorial, usamos vários serviços do Google Cloud para fornecer o banco de dados, o armazenamento de mídia e o armazenamento de secrets que oferecem suporte ao projeto Django implantado. Esses serviços são implantados em uma região específica. Para garantir a eficiência entre os serviços, todos eles precisam ser implantados na mesma região. Para mais informações sobre a região mais próxima de você, consulte Produtos disponíveis por região.
Este tutorial usa os mecanismos integrados de hospedagem de recursos estáticos no ambiente padrão do App Engine.Configurar uma instância do Cloud SQL para PostgreSQL
O Django oficialmente oferece suporte a vários bancos de dados relacionais, mas oferece a maior parte do suporte para o PostgreSQL. O PostgreSQL conta com o suporte do Cloud SQL. Portanto, este tutorial escolhe usar esse tipo de banco de dados.
A seção a seguir descreve a criação de uma instância, um banco de dados e um usuário do banco de dados do PostgreSQL para o aplicativo.
Crie a instância do PostgreSQL:
Console
No console do Google Cloud, acesse a página Instâncias do Cloud SQL.
Clique em Create Instance.
Clique em PostgreSQL.
No campo ID da instância, insira
INSTANCE_NAME
.Insira uma senha para o usuário postgres.
Mantenha os valores padrão dos outros campos.
Clique em Criar.
Leva alguns minutos para criar a instância e ela deve estar pronta para uso.
gcloud
Crie a instância do PostgreSQL:
gcloud sql instances create INSTANCE_NAME \ --project PROJECT_ID \ --database-version POSTGRES_13 \ --tier db-f1-micro \ --region REGION
Substitua:
INSTANCE_NAME
: o nome da instância do Cloud SQL.PROJECT_ID
: o ID do projeto do Google CloudREGION
: a região do Google Cloud
Leva alguns minutos para criar a instância e ela deve estar pronta para uso.
Na instância criada, crie um banco de dados:
Console
- Na página da instância, acesse a guia Bancos de dados.
- Clique em Create database.
- Na caixa de diálogo Nome do banco de dados, insira
DATABASE_NAME
. - Clique em Criar.
gcloud
Crie o banco de dados na instância recém-criada:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAME
Substitua
DATABASE_NAME
por um nome para o banco de dados dentro da instância.
Crie um usuário de banco de dados:
Console
- Na página da instância, acesse a guia Usuários.
- Clique em Adicionar conta de usuário.
- Na caixa de diálogo Adicionar uma conta de usuário à instância, em "Autenticação integrada":
- Digite o nome de usuário
DATABASE_USERNAME
. - Insira a senha
DATABASE_PASSWORD
- Clique em Add.
gcloud
Crie o usuário na instância recém-criada:
gcloud sql users create DATABASE_USERNAME \ --instance INSTANCE_NAME \ --password DATABASE_PASSWORD
Substitua
PASSWORD
por uma senha segura.
Armazenar valores do secret no Secret Manager
Agora que os serviços de backup estão configurados, o Django precisa de informações sobre esses serviços. Em vez de colocar esses valores diretamente no código-fonte do Django, este tutorial usa o Secret Manager para armazenar essas informações com segurança.
O padrão do App Engine interage com secrets usando a conta de serviço.Criar o arquivo de ambiente Django como um secret do Secret Manager
Você armazena as configurações necessárias para iniciar o Django em um arquivo env protegido.
O app de exemplo usa a API Secret Manager para recuperar o secret
e o valor de django-environ
para carregar os valores no ambiente Django. O secret é configurado
para ser acessível pelo ambiente padrão do App Engine.
Crie um arquivo chamado
.env
, definindo a string de conexão do banco de dados, o nome do bucket de mídia e um novo valorSECRET_KEY
: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
Armazene o secret no Secret Manager:
Console
No console do Google Cloud, acesse a página do Secret Manager.
Clique em Criar secret.
No campo Nome, use
django_settings
.Na caixa de diálogo Valor do secret, cole o conteúdo do arquivo
.env
.Clique em Criar secret.
Exclua o arquivo local para evitar modificações de configuração locais.
gcloud
Crie um novo secret,
django_settings
, com o valor do arquivo.env
:gcloud secrets create django_settings --data-file .env
Para confirmar a criação do secret, verifique-o:
gcloud secrets describe django_settings gcloud secrets versions access latest --secret django_settings
Exclua o arquivo local para evitar modificações de configuração locais:
rm .env
Configure o acesso ao secret:
Console
- Clique na guia Permissões.
- Clique em Add.
- No campo Novos membros, digite
PROJECT_ID@appspot.gserviceaccount.com
e pressioneEnter
. - No menu suspenso Papel, selecione Acessador de secrets do Secret Manager.
- Clique em Salvar.
gcloud
Conceda acesso ao secret para a conta de serviço padrão do App Engine:
gcloud secrets add-iam-policy-binding django_settings \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/secretmanager.secretAccessor
Executar o app no computador local
Com os serviços de backup configurados, agora você pode executar o aplicativo no seu computador. Essa configuração permite o desenvolvimento local, a criação de um superusuário e a aplicação de migrações de banco de dados.
Em um terminal separado, inicie o proxy do Cloud SQL Auth:
Linux/macOS
./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAME
Windows
cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAME
Essa etapa estabelece uma conexão do computador local com a instância do Cloud SQL para testes locais. Mantenha o Proxy do Cloud SQL Auth em execução durante todo o teste local do app. A execução desse processo em um terminal separado permite que você continue trabalhando enquanto esse processo é executado.
No terminal original, defina o ID do projeto localmente (usado pela API Secret Manager):
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Windows
set GOOGLE_CLOUD_PROJECT=PROJECT_ID
Defina uma variável de ambiente para indicar que você está usando o proxy de autenticação do Cloud SQL (esse valor é reconhecido no código):
Linux/macOS
export USE_CLOUD_SQL_AUTH_PROXY=true
Windows
set USE_CLOUD_SQL_AUTH_PROXY=true
Execute as migrações do Django para configurar os modelos e os recursos:
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate python manage.py collectstatic
Inicie o servidor da Web do Django:
python manage.py runserver 8080
No navegador, acesse http://localhost:8080.
Se você estiver no Cloud Shell, clique no botão Visualização na Web e selecione Visualizar na porta 8080.
A página exibe o seguinte texto: "Hello, world. Você está no índice de pesquisas". O servidor da Web do Django em execução no seu computador exibe as páginas do aplicativo de amostra.
Pressione
Ctrl
/Cmd
+C
para interromper o servidor da Web local.
Como usar o console de administração do Django
Para fazer login no Admin Console do Django, você precisa criar um superusuário. Como você tem uma conexão acessível localmente com o banco de dados, é possível executar comandos de gerenciamento:
Crie um superusuário. Você será solicitado a inserir um nome de usuário, e-mail e senha.
python manage.py createsuperuser
Inicie um servidor da Web local:
python manage.py runserver
No navegador, acesse http://localhost:8000/admin.
Faça login no site de administração usando o nome de usuário e a senha que você usou ao executar
createsuperuser
.
Como implantar o aplicativo no ambiente padrão do App Engine
Com todos os serviços de backup configurados e o aplicativo testado localmente, você pode implantar o aplicativo no ambiente padrão do App Engine:
- Faça upload do app executando o seguinte comando, que implanta o app conforme descrito em
app.yaml
e define a versão recém-implantada como padrão, veiculando todo o tráfego novo:gcloud app deploy
- Quando solicitado, confirme as configurações digitando "sim".
- Aguarde a notificação sobre a conclusão da atualização.
- Abra
app.yaml
e atualize o valor deAPPENGINE_URL
com o URL implantado:... env_variables: APPENGINE_URL: https://PROJECT_ID.uc.r.appspot.com
- Faça upload das mudanças de configuração:
gcloud app deploy
Como executar o aplicativo implantado
O app foi implantado e agora pode ser acessado:
Abra o site implantado:
gcloud app browse
Como alternativa, exiba o URL e abra manualmente:
gcloud app describe --format "value(defaultHostname)"
Sua solicitação é veiculada por um servidor da Web em execução no ambiente padrão do App Engine.
Atualização do aplicativo
Para atualizar seu aplicativo, faça alterações no código e execute o comando gcloud app deploy
novamente.
A implantação cria um nova versão do app e a promove à versão padrão. As versões anteriores do seu app são mantidas. Todas essas versões do app são recursos faturáveis. Para reduzir custos, exclua as versões não padrão do seu app.
Como configurar para produção
Agora você tem uma implantação do Django funcionando, mas pode seguir algumas etapas para garantir que seu aplicativo esteja pronto para produção.
Desativar depuração
Confirme se a variável DEBUG
em mysite/settings.py
está definida como False
. Isso
impedirá que as páginas de erro detalhadas sejam exibidas para o usuário, o que pode vazar informações sobre as configurações.
Limitar os privilégios de usuário do banco de dados
Todos os usuários criados com o Cloud SQL têm os privilégios associados ao
papel cloudsqlsuperuser
:
CREATEROLE
, CREATEDB
e LOGIN
.
Para impedir que o usuário do banco de dados do Django tenha essas permissões, crie-o manualmente no PostgreSQL. Você precisará ter o terminal interativo psql
instalado ou usar o Cloud Shell com essa ferramenta pré-instalada.
Console
-
In the Google Cloud console, activate Cloud Shell.
No Cloud Shell, use o terminal integrado para se conectar à instância
INSTANCE_NAME
:gcloud sql connect INSTANCE_NAME --user postgres
Insira a senha do usuário do postgres.
Agora você está usando o
psql
. Você verá o promptpostgres=>
.Crie um usuário:
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Substitua
PASSWORD
por uma senha aleatória e exclusiva.Conceda direitos totais sobre o novo banco de dados para o novo usuário:
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Saia de
psql
:\q
gcloud
Inicie uma conexão com a instância do SQL:
gcloud sql connect INSTANCE_NAME --user postgres
Substitua
INSTANCE_NAME
pela instância criada do Cloud SQL.Insira a senha do usuário do postgres.
Agora você está usando o
psql
. Você verá o promptpostgres=>
.Crie um usuário:
CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
Conceda direitos totais sobre o novo banco de dados para o novo usuário:
GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
Saia de
psql
:\q
Entenda o código
Exemplo de aplicativo
O app de exemplo do Django foi criado com ferramentas padrão do Django. Os comandos a seguir criam o projeto e o aplicativo de pesquisa:
django-admin startproject mysite
python manage.py startapp polls
As visualizações básicas, os modelos e as configurações de rota foram copiados de Como criar seu primeiro app Django (Parte 1 e Parte 2).
Secrets do Secret Manager
O arquivo settings.py
contém o código que usa a API Secret Manager Python para recuperar a versão mais recente do secret nomeado e extraí-la para o ambiente (usando django-environ
):
O secret foi usado para armazenar diversos valores de secret para reduzir o número de diferentes secrets que precisavam ser configurados.
Configurações de CSRF
O Django tem proteção integrada contra falsificação de solicitações entre sites (CSRF, na sigla em inglês). A partir do Django 4.0, alterações no modo como isso funciona significam que é importante informar ao Django qual é o URL hospedado dele. Assim, ele oferece as melhores proteções para os usuários que enviam dados.
Forneça o URL do app como uma variável de ambiente no arquivo settings.py
.
Esse é o valor que o Django usa para as configurações relevantes.
Substituições de secret local
Se um arquivo .env
for encontrado no sistema de arquivos local, ele será usado no lugar do valor do Secret Manager. Criar um arquivo .env
localmente pode ajudar com testes locais. Por exemplo, desenvolvimento local em um banco de dados SQLite ou outras configurações locais.
Conexão com o banco de dados
O arquivo settings.py
contém a configuração do banco de dados SQL. Ela usa o auxiliar env.db()
.
de django-environ
para carregar a string de conexão definida em DATABASE_URL
na configuração DATABASES
.
Ao executar o aplicativo localmente e usar o proxy de autenticação do Cloud SQL para acessar o
banco de dados hospedado, a flag USE_CLOUD_SQL_AUTH_PROXY
ajusta o banco de dados
para usar o proxy.
Conteúdo estático hospedado
O app.yaml
contém as informações de configuração para implantação no App Engine.
Este arquivo app.yaml
especifica que o App Engine exibe arquivos estáticos
do diretório static/
:
Ao executar o app localmente com o DEBUG
ativado, esses arquivos são exibidos localmente pelo Django:
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Exclua o projeto
- 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.
A seguir
- Saiba como configurar o PostgreSQL para produção
- Saiba mais sobre o Django no Google Cloud.