Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como executar o Django no ambiente flexível do App Engine

Os aplicativos do Django executados no ambiente flexível do App Engine são executados na mesma infraestrutura que capacita todos os produtos do Google, o que geralmente melhora a escalabilidade.

Este tutorial pressupõe que você esteja familiarizado com o desenvolvimento da Web do Django. Se você não está familiarizado com o desenvolvimento em Django, tente escrever seu primeiro aplicativo Django antes de continuar. Nesse tutorial, os modelos do app representam pesquisas que contêm perguntas, e é possível interagir com os modelos usando o console de administração do Django.

Este tutorial requer o Python 3.7 ou posterior.

Antes de começar

  1. Faça login na sua conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar a página do seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative a Cloud SQL Admin API.

    Ative a API

  5. Instale e inicialize o SDK do Cloud..

Fazer login no gcloud

Consiga novas credenciais para usar a API Cloud SQL Admin:

gcloud auth application-default login

Fazer o download e executar o app

Depois de concluir os pré-requisitos, faça o download e implante o app de amostra do Django. As seções a seguir contêm as etapas de configuração, execução e implantação do aplicativo.

Como clonar o app do Django

O código para o aplicativo de amostra Django está no repositório GoogleCloudPlatform/python-docs-samples no GitHub.

  1. É possível fazer o download da amostra como um arquivo ZIP e extraí-lo ou clonar o repositório na máquina local:

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

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

Como configurar o ambiente local

Quando implantado, seu aplicativo usa o Cloud SQL Proxy incorporado ao ambiente do App Engine para se comunicar com sua instância do Cloud SQL. No entanto, para testar o aplicativo no local, é necessário instalar e usar uma cópia local do proxy no ambiente de desenvolvimento.

Saiba mais sobre o Cloud SQL Proxy.

Para executar tarefas administrativas básicas na sua instância do Cloud SQL, use o cliente PostgreSQL.

Como instalar o Cloud SQL Proxy

Faça o download do Cloud SQL Proxy e instale-o. Ele se conectará à sua instância do Cloud SQL durante a execução local.

Linux de 64 bits

  1. Faça o download do proxy:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Torne o proxy executável:
    chmod +x cloud_sql_proxy
    

Linux de 32 bits

  1. Faça o download do proxy:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Torne o proxy executável:
    chmod +x cloud_sql_proxy
    

macOS de 64 bits

  1. Faça o download do proxy:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. Torne o proxy executável:
    chmod +x cloud_sql_proxy
    

macOS de 32 bits

  1. Faça o download do proxy:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Torne o proxy executável:
    chmod +x cloud_sql_proxy
    

Windows de 64 bits

Para fazer o download do proxy, clique com o botão direito em https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe e selecione Salvar link como. Renomeie o arquivo para cloud_sql_proxy.exe.

Windows de 32 bits

Para fazer o download do proxy, clique com o botão direito em https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe e selecione Salvar link como. Renomeie o arquivo para cloud_sql_proxy.exe.

Imagem de proxy do Docker

Por conveniência, a equipe do Cloud SQL mantém várias imagens de contêiner que contêm o Cloud SQL Proxy para uso dos nossos clientes. Para mais informações sobre essas imagens, consulte o repositório do Cloud SQL Proxy no GitHub. É possível extrair a imagem mais recente para sua máquina local usando o Docker com o seguinte comando:
docker pull gcr.io/cloudsql-docker/gce-proxy:1.19.1

Outros sistemas operacionais

Para outros sistemas operacionais não incluídos aqui, compile o proxy a partir da fonte.

criar uma instância do Cloud SQL;

  1. <a{: class="internal" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,track-metadata-end-goal,class,target" l10n-encrypted-href="lsL4NbV5FI0DRuRANJcTZKJysOQGKX761P3ItELRG1PjHEtGnUIGGfDSUdzN6k/z" target="_blank" track-metadata-end-goal="createInstance" track-metadata-position="body" track-name="internalLink" track-type="python" }=""> Crie uma uma instância do Cloud SQL para PostgreSQL.

    Atribua o nome polls-instance ou outro similar à instância. Pode demorar alguns minutos para a instância ficar pronta. Quando isso acontecer, ela estará visível na lista de instâncias.

    </a{:>
  2. Use o SDK do Cloud para executar o comando a seguir, em que [YOUR_INSTANCE_NAME] representa o nome da instância do Cloud SQL:
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

    Na saída, observe o valor mostrado para [CONNECTION_NAME].

    O valor [CONNECTION_NAME] está no formato [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].

Como inicializar a instância do Cloud SQL

  1. Inicie o Cloud SQL Proxy usando o valor [CONNECTION_NAME] da etapa 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

    Substitua [YOUR_INSTANCE_CONNECTION_NAME] pelo valor de [CONNECTION_NAME] registrado na etapa anterior.

    Essa etapa estabelece uma conexão do computador local com a instância do Cloud SQL para testes locais. Mantenha o Cloud SQL Proxy em execução durante todo o teste local do aplicativo.

  2. Crie um usuário e um banco de dados do Cloud SQL:

    Cloud Console

    1. Crie um novo banco de dados usando o Cloud Console para a instância polls-instance do Cloud SQL. Por exemplo, use o nome polls.
    2. Crie um novo usuário com o Console do Cloud para a instância do Cloud SQLpolls-instance.

    Cliente Postgres

    1. Em uma guia de linha de comando separada, instale o cliente Postgres (em inglês).
      sudo apt-get install postgresql
    2. Use o cliente Postgres ou programa semelhante para se conectar à instância. Quando solicitado, use a senha raiz configurada.
      psql --host 127.0.0.1 --user postgres --password
    3. Crie os bancos de dados, usuários e permissões de acesso necessários no banco de dados do Cloud SQL usando os comandos a seguir. Substitua [POSTGRES_USER] e [POSTGRES_PASSWORD] pelo nome de usuário e senha que você quer usar.
      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];
      

Como definir as configurações do banco de dados

  1. Abra mysite/settings.py para edição.

    1. Para usar o MySQL em vez do PostgreSQL:

      1. Siga as instruções nos comentários do arquivo para ativar o driver do banco de dados MySQL.
      2. Abra requirements.txt para editar e siga as instruções para adicionar o driver do banco de dados MySQL às dependências.
    2. Para ajudar a configurar a conexão com o banco de dados para implantação e teste local do App Engine, defina <your-database-user> e <your-database-password> como o nome de usuário e a senha criados anteriormente na etapa Como criar uma instância do Cloud SQL

    3. Veja os valores da sua instância:

      gcloud sql instances describe [YOUR_INSTANCE_NAME]
      
    4. Na saída, copie o valor connectionName para usar na próxima etapa.

    5. Defina <your-cloudsql-connection-string> como connectionName da etapa anterior.

  2. Feche e salve settings.py.

Como executar o app no computador local

  1. Para executar o app do Django no seu computador local, configure um ambiente de desenvolvimento do Python, incluindo Python, pip e virtualenv.

  2. Crie um ambiente Python isolado e instale as dependências:

    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. Execute as migrações do Django para definir seus modelos:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    
  4. Inicie um servidor da Web local:

    python manage.py runserver
    
  5. No navegador, acesse http://localhost:8000/.

    http://localhost:8000
    

    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.

  6. Pressione Control+C para interromper o servidor da Web local.

Como usar o console de administração do Django

  1. Crie um superusuário. Você precisa definir um nome de usuário e uma senha.

    python manage.py createsuperuser
    
  2. Inicie um servidor da Web local:

    python manage.py runserver
    
  3. No navegador, acesse http://localhost:8000/admin.

    http://localhost:8000/admin
    
  4. 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 flexível do App Engine

Quando o aplicativo é implantado no Google Cloud, ele usa o servidor Gunicorn. Como o conteúdo estático não é transmitido pelo Gunicorn, o Cloud Storage é usado para disponibilizar esse tipo de conteúdo.

  1. Crie um bucket do Cloud Storage:

    1. Crie um bucket do Cloud Storage e torne-o acessível para leitura pública. Substitua <your-gcs-bucket> por um nome de intervalo de sua escolha. Por exemplo, você pode usar seu ID do projeto como um nome de bucket.

      gsutil mb gs://<your-gcs-bucket>
      gsutil defacl set public-read gs://<your-gcs-bucket>
      
    2. Reúna todo o conteúdo estático em uma pasta.

      python manage.py collectstatic
      
    3. Faça o upload de todo conteúdo estático no Cloud Storage:

      gsutil rsync -R static/ gs://<your-gcs-bucket>/static
      
  2. Edite settings.py:

    1. Abra mysite/settings.py para edição.

    2. Defina o valor de STATIC_URL como o seguinte URL. Substitua <your-gcs-bucket> pelo nome do intervalo criado anteriormente.

      https://storage.googleapis.com/<your-gcs-bucket>/static/
      
    3. Feche e salve settings.py.

  3. Edite app.yaml:

    1. Abra app.yaml para edição.

    2. Execute o seguinte comando na linha de comando:

      gcloud sql instances describe [YOUR_INSTANCE_NAME]
      
    3. Na saída, copie o valor connectionName para usar na próxima etapa.

    4. Substitua <your-cloudsql-connection-string> por connectionName da etapa anterior.

    5. Feche e salve app.yaml.

  4. Implante a amostra:

    gcloud app deploy
    

    Aguarde a notificação sobre a conclusão da atualização.

Como ver o aplicativo executado no Google Cloud

O comando a seguir implanta o aplicativo conforme descrito em app.yaml e define a versão recém-implantada como padrão. Com isso, ela veicula todo o tráfego novo.

Sua solicitação é atendida por um servidor da Web em execução no ambiente flexível do App Engine.

Durante a implantação do app, várias mensagens repetidas podem ser vistas, enquanto é verificado pela plataforma se o app está veiculando. Isso é normal. Aguarde a mensagem notificando que a atualização do app foi concluída.

Se você atualizar o app, implante a versão atualizada inserindo o mesmo comando usado para implantá-lo. A implantação cria uma nova versão do app e a define como padrão. As versões anteriores do app são mantidas, assim como as instâncias de máquina virtual (VM, na sigla em inglês) associadas. Todas essas versões de app e instâncias de VM são recursos faturáveis. Para reduzir custos, exclua as versões não padrão do seu app.

Para informações sobre como excluir as versões não padrão do app ou interromper as instâncias de VM, consulte Como fazer a limpeza.

Produção

Quando você estiver pronto para veicular seu conteúdo na produção, em mysite/settings.py, altere a variável DEBUG para False.

Como entender o código

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
    
  • O arquivo settings.py contém a configuração do banco de dados 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'
  • Para especificar como o aplicativo exibe conteúdo estático, defina o valor de STATIC_URL no arquivo settings.py:

    # 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/'
  • O arquivo app.yaml contém informações de configuração da implantação para o ambiente flexível:

    runtime: python
    env: flex
    entrypoint: gunicorn -b :$PORT mysite.wsgi
    
    beta_settings:
        cloud_sql_instances: <your-cloudsql-connection-string>
    
    runtime_config:
      python_version: 3