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 flexível 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.
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:
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>
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
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 usarcp
.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
A publicação de ficheiros a partir da sua app é normalmente simples. No entanto, existem algumas desvantagens que deve considerar:
- Os pedidos de ficheiros estáticos podem usar recursos que, de outra forma, seriam usados para pedidos dinâmicos.
- Consoante a configuração, o envio de ficheiros a partir da sua app pode resultar em latência de resposta, o que também pode afetar o momento em que são criadas novas instâncias para processar a carga.
Exemplo de publicação de ficheiros estáticos com a sua app
Go
O exemplo seguinte demonstra como publicar ficheiros estáticos com a sua app.
Pode usar a aplicação de exemplo neste guia para qualquer versão suportada do Go especificando a versão do tempo de execução
e o sistema operativo no ficheiro app.yaml
.
Pode usar o padrão
http.FileServer
ou http.ServeFile
para publicar ficheiros diretamente a partir da sua app.
Java
O exemplo seguinte demonstra como publicar ficheiros estáticos com a sua app.
Pode usar a aplicação de exemplo neste guia para qualquer versão suportada do Java especificando a versão do tempo de execução e o sistema operativo no ficheiro app.yaml
.
O contentor de servlets do tempo de execução Java usa o descritor de implementação da sua app, o ficheiro web.xml
, para mapear URLs para servlets, incluindo recursos estáticos. Se não especificar um web.xml
, é usada uma predefinição que mapeia tudo para o servlet predefinido.
Neste exemplo, ./src/main/webapp/index.html
refere-se a uma folha de estilos publicada
a partir de /stylesheets/styles.css
.
O ficheiro styles.css
está localizado em ./src/main/webapp/stylesheets/styles.css
.
Pode configurar explicitamente a forma como os ficheiros estáticos são processados no ficheiro web.xml
.
Por exemplo, se quiser mapear pedidos para todos os ficheiros com a extensão:.jpg
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
Se estiver a usar uma framework Web, como o Play, tem de consultar a documentação da framework sobre recursos estáticos.
Node.js
O exemplo seguinte demonstra como publicar ficheiros estáticos com a sua app.
Pode usar a aplicação de exemplo neste guia para qualquer versão suportada do Node.js especificando
a versão do tempo de execução e o sistema operativo no seu ficheiro app.yaml
.
A maioria das frameworks Web inclui suporte para a publicação de ficheiros estáticos. Neste exemplo,
a aplicação usa o middleware
express.static
para publicar ficheiros do diretório ./public
no URL /static
.
A vista refere-se a /static/main.css
.
A folha de estilos encontra-se em ./public/css
, que é servida a partir de
/static/main.css
.
Outras frameworks do Node.js, como Hapi, Koa e Sails suportam normalmente a publicação de ficheiros estáticos diretamente a partir da aplicação. Consulte a respetiva documentação para ver detalhes sobre como configurar e usar conteúdo estático.
PHP
O tempo de execução do PHP executa o nginx para publicar a sua app, que está configurada para publicar ficheiros estáticos no diretório do projeto. Tem de declarar a raiz do documento especificando document_root
no ficheiro app.yaml
. Pode usar a aplicação de exemplo
neste guia para qualquer versão suportada do PHP especificando
a versão de tempo de execução e o sistema operativo no ficheiro app.yaml
.
Python
O exemplo seguinte demonstra como publicar ficheiros estáticos com a sua app.
Pode usar a aplicação de exemplo neste guia para qualquer versão suportada do Python especificando a versão do tempo de execução e o sistema operativo no seu ficheiro app.yaml
.
A maioria das frameworks Web inclui suporte para a publicação de ficheiros estáticos. Neste exemplo,
a app usa a capacidade integrada do Flask
para publicar ficheiros no diretório ./static
a partir do URL /static
.
A app inclui uma vista que renderiza o modelo. O Flask disponibiliza automaticamente tudo no diretório ./static
sem configuração adicional.
O modelo renderizado pela vista inclui uma folha de estilos localizada em
/static/main.css
.
A folha de estilos encontra-se em ./static/main.css
.
Outras frameworks Python, como o Django, o Pyramid e o Bottle, normalmente, suportam a publicação de ficheiros estáticos diretamente a partir da app. Consulte a respetiva documentação para ver detalhes sobre como configurar e usar conteúdo estático.
Ruby
A maioria das frameworks Web inclui suporte para a publicação de ficheiros estáticos.
O exemplo seguinte demonstra como publicar ficheiros estáticos com a sua app.
Pode usar a aplicação de exemplo neste guia para qualquer versão suportada do Ruby especificando a versão do tempo de execução e o sistema operativo no seu ficheiro app.yaml
.
Sinatra
Por predefinição, a framework Web Sinatra publica ficheiros a partir do diretório ./public
. Esta app inclui uma vista que se refere a /application.css
.
A folha de estilos está localizada em ./public/application.css
, que é servida
a partir de /application.css
.
Ruby on Rails
A framework Web Ruby on Rails serve ficheiros do diretório ./public
por predefinição. Os ficheiros JavaScript e CSS estáticos também podem ser gerados pelo pipeline de recursos do Rails.
Estas apps de exemplo contêm uma vista de esquema que inclui todas as folhas de estilo da aplicação.
A própria folha de estilos é um ficheiro .css
localizado em ./public/application.css
.
Por predefinição, as apps Rails não geram nem publicam recursos estáticos quando são executadas em produção.
O tempo de execução do Ruby executa rake assets:precompile
durante a implementação
para gerar recursos estáticos e define a variável de ambiente RAILS_SERVE_STATIC_FILES
para ativar a publicação de ficheiros estáticos em produção.
.NET
O exemplo seguinte demonstra como publicar ficheiros estáticos com a sua app.
Pode usar a aplicação de exemplo neste guia para qualquer versão suportada do .NET especificando a versão do tempo de execução e o sistema operativo no ficheiro app.yaml
.
Para ativar o serviço de ficheiros estáticos, adicione:
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.