PHP: Implementar com GitHub Actions

Como implementar o seu código PHP utilizando o GitHub Actions

👋 Bem-vindo à documentação do Stackhero!

Stackhero oferece uma solução PHP cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Implemente a sua aplicação em segundos com um simples git push.
  • Utilize o seu próprio nome de domínio e beneficie da configuração automática de certificados HTTPS para uma segurança reforçada.
  • Desfrute de tranquilidade com backups automáticos, atualizações com um clique, e uma tarifação simples, transparente e previsível.
  • Obtenha performance ótima e segurança robusta graças a uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: só leva 5 minutos para experimentar a solução de PHP cloud hosting do Stackhero!

O GitHub Actions é uma ferramenta poderosa que permite automatizar workflows, incluindo a implementação do seu código PHP diretamente nos seus servidores de produção. Neste guia, vamos mostrar como pode implementar a sua aplicação PHP de forma segura tanto em ambientes de staging como de produção utilizando o GitHub Actions.

A abordagem recomendada é manter dois ramos no seu repositório: staging e production. Sempre que fizer push de código para estes ramos, este será automaticamente implementado na instância Stackhero correspondente.

Ter uma instância de staging não é obrigatório. No entanto, utilizar instâncias separadas para staging e produção é fortemente recomendado para garantir implementações mais seguras e fiáveis. Esta prática está alinhada com os padrões do setor e ajuda a prevenir potenciais problemas.

Para começar, vai precisar de uma conta GitHub com o seu código PHP alojado num repositório.

Primeiro, aceda ao seu dashboard Stackhero e crie dois serviços PHP, um para staging e outro para produção. Para maior clareza, pode renomear estes serviços para "Production" e "Staging".

Se ainda não tem uma conta Stackhero, pode criar uma gratuitamente em apenas dois minutos e configurar os seus serviços cloud PHP com alguns cliques.

Exemplo de serviços de produção e stagingExemplo de serviços de produção e staging

As chaves SSH são o método recomendado para permitir que o GitHub Actions se ligue de forma segura ao seu serviço PHP durante a implementação. Neste guia, irá criar um par de chaves SSH exclusivo para este fim.

Para gerar novas chaves SSH, execute este comando no seu computador:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

De seguida, obtenha a chave pública executando:

cat /tmp/ssh_key.pub

Aceda ao seu dashboard Stackhero e selecione o seu serviço PHP "Production". Clique em "Configure" e siga estes passos:

  1. Em SSH public keys, clique em "Add a public key".
  2. Defina a Description como "GitHub Action".
  3. Cole a chave pública que acabou de obter no campo Key.

Obter definições do serviçoObter definições do serviço

Agora, adicione a chave privada ao seu projeto GitHub para que possa ser utilizada durante a implementação:

  • Vá a Settings, selecione Environments e clique em New environment.

    Configurar ambientes GitHubConfigurar ambientes GitHub

  • No campo Name, introduza "production" e confirme.

    Definir o ambienteDefinir o ambiente

  • Clique no botão No restriction e selecione Selected branches and tags.

    Definir restrições do ambienteDefinir restrições do ambiente

  • Clique em Add deployment branch or tag rule, introduza "production" no campo Name pattern e clique em Add rule.

    Definir ramo do ambienteDefinir ramo do ambiente Definir ramo do ambienteDefinir ramo do ambiente

  • Na secção Environment secrets, clique em Add secret.

    Adicionar secretAdicionar secret

Obtenha a chave privada que gerou anteriormente executando:

cat /tmp/ssh_key

Nas definições de ambiente do GitHub:

  • Em Name, introduza STACKHERO_SSH_PRIVATE_KEY e cole a sua chave privada no campo Value.

    Definir o secret da chave privada SSHDefinir o secret da chave privada SSH

  • Na secção Environment variables, clique em Add variable.

    Definir variáveisDefinir variáveis

  • Em Name, introduza STACKHERO_ENDPOINT e cole o endpoint do seu serviço PHP no campo Value. Pode encontrar este endpoint no seu dashboard Stackhero.

    Definir a variável endpointDefinir a variável endpoint

Se personalizou o nome de domínio do seu serviço, utilize a versão personalizada em vez de <XXXXXX>.stackhero-network.com.

Por motivos de segurança, é aconselhável remover as chaves SSH geradas do seu computador após a configuração:

rm /tmp/ssh_key /tmp/ssh_key.pub

Agora vai criar um ficheiro de workflow do GitHub Actions para automatizar as suas implementações. No seu repositório Git, crie uma pasta chamada .github/workflows e adicione um ficheiro chamado deploy-to-stackhero.yml com o seguinte conteúdo:

# File: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # Lista de ramos que irão acionar a ação de deploy após um git push
    # Não se esqueça de criar um ambiente correspondente no GitHub (em "Settings" -> "Environments") para cada ramo
    # Depois adicione o secret "STACKHERO_SSH_PRIVATE_KEY" e a variável "STACKHERO_ENDPOINT" nesse ambiente
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # O secret "STACKHERO_SSH_PRIVATE_KEY" e a variável "STACKHERO_ENDPOINT" devem estar definidos no ambiente GitHub correspondente (em "Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Depois de adicionar este ficheiro, pode confirmar as alterações executando estes comandos no seu terminal:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

Para criar o ramo de produção, pode executar:

git checkout -b production

Depois faça push das alterações para o GitHub:

git push --set-upstream origin production

Isto irá enviar o seu código para o ramo production no GitHub. O GitHub Actions irá então executar automaticamente e implementar o seu código na instância Stackhero associada. Para verificar o estado da implementação, pode aceder ao seu projeto GitHub e clicar em Actions.

GitHub Actions que implementou em produçãoGitHub Actions que implementou em produção

Parabéns! O seu projeto está agora configurado para implementação automática em produção utilizando o GitHub Actions.

Pode configurar o seu ambiente de staging da mesma forma que o ambiente de produção. Basta repetir os passos acima, substituindo production por staging onde for apropriado.

Depois de configurar tudo, pode criar o seu ramo de staging assim:

git checkout -b staging

E fazer push para o GitHub:

git push --set-upstream origin staging

O GitHub Actions irá implementar automaticamente o código do seu ramo de staging no serviço PHP que configurou para staging.

Para garantir que a sua aplicação se mantém fiável e segura, é aconselhável proteger os ramos production e staging contra pushes diretos. Pode, por exemplo, definir que as alterações sejam feitas através de pull requests, permitindo que o ramo staging seja revisto e integrado apenas por utilizadores com permissões de implementação. Depois de as alterações serem validadas em staging, os utilizadores autorizados podem integrá-las no ramo production.

Esta abordagem garante que apenas código validado chega à produção e permite-lhe testar novas funcionalidades em staging antes de as disponibilizar em produção, proporcionando maior tranquilidade a si e à sua equipa.