Armazenar e publicar ficheiros estáticos

As aplicações precisam frequentemente de publicar ficheiros estáticos, como JavaScript, imagens e CSS, além de processar pedidos dinâmicos. As apps no ambiente padrão podem publicar ficheiros estáticos a partir de uma Google Cloud opção, como o Cloud Storage, publicá-los diretamente ou usar uma rede de fornecimento de conteúdo (CDN) de terceiros.

O alojamento do seu site estático no Google Cloud pode custar menos do que usar um fornecedor de alojamento tradicional, uma vez que o Google Cloud oferece um nível gratuito.

Publicar ficheiros a partir do Cloud Storage

O Cloud Storage pode alojar recursos estáticos para apps Web dinâmicas. As vantagens de usar o Cloud Storage em vez de publicar diretamente a partir da sua app incluem:

  • Essencialmente, o Cloud Storage funciona como uma rede de distribuição de conteúdo. Isto não requer nenhuma configuração especial porque, por predefinição, qualquer objeto legível publicamente é colocado em cache na rede global do Cloud Storage.
  • A carga da sua app é reduzida ao transferir a publicação de recursos estáticos para o Cloud Storage. Consoante o número de recursos estáticos que tiver e a frequência de acesso, isto pode reduzir significativamente o custo de execução da sua app.
  • As cobranças de largura de banda para aceder a conteúdo podem ser frequentemente inferiores com o Cloud Storage.

Pode carregar os seus recursos para o Cloud Storage através da CLI do Google Cloud ou da API Cloud Storage.

A biblioteca de cliente do Google Cloud fornece um cliente idiomático para o Cloud Storage, para armazenar e obter dados com o Cloud Storage numa app do App Engine.

Exemplo de publicação a partir de um contentor do Cloud Storage

Este exemplo cria um contentor do Cloud Storage e carrega recursos estáticos através da CLI gcloud:

  1. Crie um contentor. É comum, mas não obrigatório, dar ao contentor o nome do ID do projeto. O nome do contentor tem de ser globalmente exclusivo.

    gcloud storage buckets create gs://<var>your-bucket-name</var>
    
  2. Defina a Política IAM para conceder acesso de leitura público aos itens no contentor.

    gcloud storage buckets add-iam-policy-binding gs://<var>your-bucket-name</var> --member=allUsers --role=roles/storage.objectViewer
    
  3. Carregue itens para o contentor. Normalmente, o comando rsync é a forma mais rápida e fácil de carregar e atualizar recursos. Também pode usar cp.

    gcloud storage rsync ./static gs://<var>your-bucket-name</var>/static --recursive
    

Agora, pode aceder aos seus recursos estáticos através do https://storage.googleapis.com/<var>your-bucket-name</var>/static/....

Para mais detalhes sobre como usar o Cloud Storage para publicar recursos estáticos, incluindo como publicar a partir de um nome de domínio personalizado, consulte o artigo Como alojar um Website estático.

Publicação de ficheiros de outros Google Cloud serviços

Também tem a opção de usar o Cloud CDN ou outros serviços de armazenamento Google Cloud .

Publicar ficheiros diretamente a partir da sua app

Para publicar ficheiros estáticos no ambiente padrão, defina os controladores no ficheiro app.yaml usando os elementos static_dir ou static_files.

O conteúdo nos ficheiros estáticos ou diretórios estáticos não é afetado pelas definições de escalabilidade no seu ficheiro app.yaml. Os pedidos de ficheiros estáticos ou diretórios estáticos são processados diretamente pela infraestrutura do App Engine e não chegam ao tempo de execução da linguagem da aplicação.

Configurar os controladores de ficheiros estáticos

Para configurar a sua app para publicar o diretório ./public a partir do URL /static, define um controlador no ficheiro app.yaml.

O exemplo seguinte demonstra como publicar os ficheiros estáticos do diretório ./public de uma app de exemplo. O modelo da página index.html desta app indica ao navegador que carregue o ficheiro main.css, por exemplo:

<link type="text/css" rel="stylesheet" href="/static/css/main.css">

O diretório ./public é definido no elemento static_dir do ficheiro app.yaml do projeto:

handlers:
  - url: /favicon\.ico
    static_files: favicon.ico
    upload: favicon\.ico

  - url: /static
    static_dir: public

  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

A secção handlers no exemplo acima processa três padrões de URL:

  • O controlador /favicon.ico mapeia um pedido especificamente para /favicon.ico para um ficheiro denominado favicon.ico no diretório raiz da app.

  • O controlador /static mapeia pedidos de URLs que começam por /static. Quando o App Engine recebe um pedido de um URL que começa por /static, mapeia o resto do caminho para ficheiros no diretório ./public. Se for encontrado um ficheiro adequado no diretório, o conteúdo desse ficheiro é devolvido ao cliente.

  • O controlador /.* corresponde a todos os outros URLs e direciona-os para a sua app.

Os padrões de caminho do URL são testados pela ordem em que aparecem em app.yaml. Por isso, o padrão dos seus ficheiros estáticos deve ser definido antes do padrão /.*. Para mais informações, consulte a app.yaml referência.

Publicação a partir de uma rede de fornecimento de conteúdo de terceiros

Pode usar qualquer RFC externa de terceiros para publicar os seus ficheiros estáticos e colocar em cache pedidos dinâmicos, mas a sua app pode sofrer um aumento da latência e dos custos.

Para um desempenho melhorado, deve usar uma CDN de terceiros que suporte o CDN Interconnect.