ID da região
O REGION_ID
é um código abreviado que a Google atribui com base na região que seleciona quando cria a sua app. O código não corresponde a um país ou uma província, embora alguns IDs de regiões possam parecer semelhantes aos códigos de países e províncias usados frequentemente. Para apps criadas após
fevereiro de 2020, REGION_ID.r
está incluído nos
URLs do App Engine. Para apps existentes criadas antes desta data, o
ID da região é opcional no URL.
Saiba mais acerca dos IDs de regiões.
Saiba como criar uma app no App Engine com a versão 7.4 ou 8.1 do PHP. A app de exemplo permite que os utilizadores publiquem os títulos, os autores, as descrições, a data de publicação e as imagens dos seus livros favoritos numa página Web. A app armazena os dados textuais numa base de dados do Cloud SQL e as imagens num contentor do Cloud Storage.
Estrutura do guia
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Instale o Composer, a ferramenta de gestão de dependências do PHP. Tem de instalar o Composer globalmente em sistemas Linux e Mac OS X.
- Devido a alterações no comportamento predefinido da forma como o Cloud Build usa as contas de serviço em novos projetos e alterações à política organizacional segura por predefinição, pode ter de conceder funções adicionais à sua conta de serviço de implementação. Para mais informações sobre a concessão de funções específicas, consulte o guia de resolução de problemas.
Explore o código no GitHub
Transfira ou clone a app.
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
Em alternativa, transfira o exemplo como um ficheiro ZIP e extraia-o.
Navegue para o diretório
getting-started
.cd php-docs-samples/appengine/standard/getting-started
Abra o ficheiro
composer.json
para rever todas as dependências diretas:Para instalar as dependências e produzir um ficheiro
composer.lock
, execute o seguinte comando:composer install
O ficheiro
composer.lock
ajuda a sua app a obter as mesmas versões dos pacotes que usa em várias compilações e ambientes.Se tiver êxito, vê o seguinte resultado:
Creating gs://BUCKET_NAME/
Se não for bem-sucedido, pode ver o seguinte resultado:
ServiceException: 409 Bucket BUCKET_NAME already exists
Tente novamente com um nome de contentor diferente.
Defina a variável
GOOGLE_STORAGE_BUCKET
com o nome do seu contentor do Cloud Storage.Defina a variável
CLOUDSQL_CONNECTION_NAME
como app-name:region:instance-name Pode obter os detalhes necessários através do seguinte comandogcloud
:gcloud sql instances describe INSTANCE
Para uma instância do Cloud SQL de segunda geração, o
CLOUDSQL_CONNECTION_NAME
está no seguinte formato:your_project_name:your_region:your_instance
Descomente e defina a variável
CLOUD_SQL_DATABASE_NAME
se a base de dados que criou tiver um nome diferente debookshelf
. Neste exemplo, a base de dados foi criada com o nomebook-data
.Reveja o ficheiro
app.yaml
, que deve ter um aspeto semelhante ao seguinte:Para implementar a aplicação, navegue para o diretório
getting-started
e execute o seguinte comando:gcloud app deploy
Quando for apresentado o pedido de localização, escolha uma localização perto dos utilizadores da sua app. O App Engine é regional, o que significa que a infraestrutura que executa a sua app está localizada numa área geográfica específica. Por exemplo, este tutorial usou a região
us-central1
para implementar os respetivos recursos de armazenamento. Implemente a app na mesma região para diminuir a latência e melhorar o desempenho.Em geral, escolher uma localização perto dos seus utilizadores é uma boa ideia, mas existem casos em que é recomendado implementar a sua aplicação perto da localização dos respetivos recursos. Leia acerca das localizações do App Engine disponíveis e das localizações de recursos.
Veja a aplicação:
gcloud app browse
- Saiba como autenticar utilizadores.
- Saiba mais sobre como escrever registos de aplicações e interpretar registos do sistema em Ler e escrever registos de aplicações.
- Saiba como realizar tarefas em segundo plano de forma assíncrona após o seu pedido através do Cloud Tasks.
- Leia acerca do processamento de pedidos e do encaminhamento de pedidos.
- Para uma análise mais detalhada do funcionamento do App Engine, consulte o ambiente de execução do PHP.
Transfira a app de exemplo
Especifique dependências com o ficheiro composer.json
A app usa um controlador frontal para encaminhar pedidos. O código de exemplo neste guia usa o Slim Framework, mas pode usar um framework Web à sua escolha.
Inicializar a app e definir controladores frontais
O ficheiro index.php
inicializa a app e encaminha todos os pedidos para os controladores definidos no ficheiro ./src/controllers.php
.
Para mais informações sobre o processamento de pedidos, leia acerca do início da aplicação e do processamento de pedidos.
Integração com os serviços Google Cloud
O App Engine requer que as apps sejam integradas com sistemas externos para o armazenamento de dados. A app de exemplo armazena dados textuais no Cloud SQL e imagens no Cloud Storage.
Consulte a página Escolher uma opção de armazenamento para ver todas as Google Cloud opções de armazenamento.
Usar o Cloud SQL
Na app de exemplo, os utilizadores publicam livros numa página Web. A app usa uma base de dados do Cloud SQL para armazenar os títulos, os autores, a data de publicação e as descrições dos livros.
Tem de criar uma instância do Cloud SQL antes de adicionar conteúdo à base de dados da app.
Criar uma instância do Cloud SQL
Use a CLI gcloud para criar uma instância do Cloud SQL:
gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION
Por exemplo, se quiser dar o nome bookshelf
à sua instância e usar o tipo de máquina db-n1-standard-2
na região central dos Estados Unidos:
gcloud sql instances create bookshelf --tier=db-n1-standard-2 --region=us-central1
Configurar o utilizador root do MySQL
Pode usar a CLI gcloud para definir a palavra-passe do utilizador root da sua instância do Cloud SQL:
gcloud sql users set-password USER --host=HOST --instance=INSTANCE_NAME --password=PASSWORD
Por exemplo, se quiser definir a palavra-passe do utilizador root para a instância do Cloud SQL bookshelf
como passw0rd!
:
gcloud sql users set-password root --host=% --instance=bookshelf --password=passw0rd!
Configurar uma base de dados na instância do Cloud SQL
Para armazenar os autores, os títulos, a data de publicação e as descrições dos livros, crie uma base de dados MySQL:
gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME
Por exemplo, se quiser criar uma base de dados denominada book-data
na instância do Cloud SQL bookshelf
:
gcloud sql databases create book-data --instance=bookshelf
Efetuar a associação à base de dados do Cloud SQL
A app de exemplo usa o PDO do PHP para interagir com a base de dados MySQL.
Para este tutorial, estes parâmetros são especificados como variáveis de ambiente abaixo em Configurar a app.
Consultar uma única linha
Quando o utilizador clica num livro, a app consulta a base de dados e devolve uma única linha que inclui o título, o autor, a data de publicação e a descrição do livro.
Usar o Cloud Storage
A app de exemplo usa o Cloud Storage para armazenar as imagens, que são ficheiros binários, carregadas pelos utilizadores.
Criar um contentor do Cloud Storage
O Cloud Storage usa contentores para organizar e controlar o acesso aos seus dados.
Use a CLI gcloud para criar um contentor do Cloud Storage:
gcloud storage buckets create gs://BUCKET_NAME/ --location=BUCKET_REGION
Por exemplo, se quiser criar um contentor denominado picture-storage
na região
us-central1
:
gcloud storage buckets create gs://picture-storage/ --location=us-central1
Associar um projeto a um contentor do Cloud Storage
Para usar o Cloud Storage, tem de especificar a biblioteca do Cloud Storage.
Armazenar imagens
Agora que criou um contentor do Cloud Storage e configurou uma associação, pode armazenar imagens. As imagens podem ser carregadas com listas de controlo de acesso (LCA) predefinidas para controlar o acesso às imagens.
Nesta app de exemplo, as imagens carregadas têm a ACL predefinida
public-read
. Pode aceder ao URL público através da propriedade mediaLink
do seu objeto do Cloud Storage. Pode usar este URL numa etiqueta de imagem HTML.
Para obter instruções sobre como ler um objeto privado do Cloud Storage, consulte a página de transferência de objetos.
A eliminar imagens
Quando um utilizador elimina um livro da app, este código remove a imagem do contentor do Cloud Storage.
Configurar a app
Configura as aplicações para serem executadas no App Engine através de um ficheiro app.yaml, que especifica o tempo de execução, as variáveis de ambiente e outras definições da aplicação.
Para uma app com requisitos de configuração mínimos, o ficheiro app.yaml
pode ser uma única linha:
PHP 8.1
runtime: php81
PHP 7.4
runtime: php74
Pode adicionar mais opções de configuração e variáveis de ambiente específicas da aplicação ao ficheiro de configuração app.yaml
.
Adicionar variáveis de ambiente
O ficheiro app.yaml
é onde a configuração do ambiente é fornecida à app.
O exemplo de estante de livros usado neste guia precisa de configuração fornecida
como variáveis de ambiente para saber como estabelecer ligação à instância
do Cloud SQL e ao contentor do Cloud Storage corretos.
Para implementar a sua app, tem de editar o app.yaml
ficheiro de configuração:
PHP 8.1
runtime: php81
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
PHP 7.4
runtime: php74
env_variables:
GOOGLE_STORAGE_BUCKET: picture-storage
CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
CLOUDSQL_USER: root
CLOUDSQL_PASSWORD: passw0rd!
CLOUDSQL_DATABASE_NAME: book-data
Implementar a aplicação
Limpar
Elimine o projeto Google Cloud para parar a faturação dos recursos usados no projeto.
Para eliminar o seu projeto com o seguinte comando:
gcloud projects delete PROJECT_ID
Para verificar se o projeto foi eliminado, liste os seus projetos:
gcloud projects list