Python: Implementar com GitHub Actions

Como implementar o seu código Python usando GitHub Actions

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

Stackhero oferece uma solução cloud Python 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 preços simples, transparentes e previsíveis.
  • 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 hospedagem cloud Python do Stackhero!

O GitHub Actions permite automatizar tarefas, como a implementação do seu código Python em servidores de produção.

Neste guia, aprenderá a usar o GitHub Actions de forma segura e fiável para implementar o seu código Python em ambientes de staging e produção.

Para isso, manterá duas branches: staging e production. O código enviado para estas branches será automaticamente implementado na instância correspondente do Stackhero.

Ter uma instância de staging não é obrigatório. Pode seguir este guia e ter apenas uma instância de produção. No entanto, para garantir implementações suaves e estar totalmente confiante ao implementar em produção, é fortemente recomendado manter tanto uma instância de staging quanto uma de produção. Esta prática é um padrão da indústria e uma abordagem sensata que pode ajudar a evitar inúmeros problemas.

Antes de começar, certifique-se de ter uma conta GitHub com um repositório que hospede o seu código.

Visite o seu painel de controlo Stackhero e crie dois serviços Stackhero, um para staging e outro para produção. Para maior clareza, pode considerar renomear estes serviços para "Produção" e "Staging".

Ainda não tem uma conta Stackhero? Pode inscrever-se em apenas dois minutos gratuitamente e depois criar os seus serviços cloud Python com apenas alguns cliques.

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

As chaves SSH permitem que o GitHub Actions se conecte de forma segura ao seu serviço Python para a implementação do código. Este passo é essencial para proteger os seus serviços Stackhero.

No seu computador, gere novas chaves SSH executando:

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

Primeiro, recupere a chave pública que acabou de gerar:

cat /tmp/ssh_key.pub

Depois, no painel de controlo do Stackhero, selecione o seu serviço Python "production" e clique no botão "Configurar".

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

Siga estes passos:

  1. Em Chaves públicas SSH, clique em Adicionar uma chave pública.
  2. Em Descrição, insira GitHub Action.
  3. Em Chave, cole a chave pública que copiou do seu computador.

Adicionar chave públicaAdicionar chave pública

Navegue até à página do seu projeto GitHub e clique em Settings, depois em Environments. Selecione New environment.

Configurar ambientes GitHubConfigurar ambientes GitHub

No campo Name, digite "production" e confirme.

Definir o ambienteDefinir o ambiente

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

Definir restrições de ambienteDefinir restrições de ambiente

Em seguida, clique em Add deployment branch or tag rule, insira "production" no campo Name pattern, e clique em Add rule.

Definir branch de ambienteDefinir branch de ambiente Definir branch de ambienteDefinir branch de ambiente

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

Adicionar segredoAdicionar segredo

Agora, recupere a chave privada que gerou anteriormente:

cat /tmp/ssh_key

Na configuração do segredo, use STACKHERO_SSH_PRIVATE_KEY como Nome e cole a chave privada como Valor.

Definir o segredo da chave privada SSHDefinir o segredo da chave privada SSH

Depois, na seção Environment variables, clique em Add variable.

Definir variáveisDefinir variáveis

Insira STACKHERO_ENDPOINT como Nome e cole o endpoint do seu serviço Python como Valor. Pode encontrar este endpoint no seu painel de controlo Stackhero.

Definir a variável de endpointDefinir a variável de endpoint

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

Por razões de segurança, remova as chaves SSH do seu computador, pois não precisará mais delas:

rm /tmp/ssh_key /tmp/ssh_key.pub

No seu repositório Git, crie um diretório chamado .github/workflows se ainda não existir. Depois, crie um ficheiro chamado deploy-to-stackhero.yml nesse diretório.

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

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

on:
  push:
    # Lista de branches que irão acionar a ação de implementação após um push git.
    # Não se esqueça de criar um ambiente correspondente ao nome da branch no GitHub (em "Settings"/"Environments").
    # Depois adicione o segredo correspondente "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 segredo "STACKHERO_SSH_PRIVATE_KEY" e a variável "STACKHERO_ENDPOINT" devem ser definidos no ambiente da branch correspondente no GitHub em "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Confirme estas alterações executando:

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

Depois, crie uma branch de produção:

git checkout -b production

Por fim, envie as suas alterações para o GitHub:

git push --set-upstream origin production

Este comando envia o seu código para a branch production do GitHub e aciona o GitHub Actions para implementar o código na sua instância Stackhero.

Para verificar a implementação, visite a página do projeto GitHub e clique em Actions.

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

Parabéns, agora pode implementar automaticamente o seu código em produção usando o GitHub Actions!

Configurar o ambiente de staging é muito semelhante à configuração do ambiente de produção. Basta repetir os passos acima, substituindo production por staging.

Após configurar o ambiente, crie uma branch de staging:

git checkout -b staging

Depois, envie a sua branch de staging para o GitHub:

git push --set-upstream origin staging

O GitHub Actions irá automaticamente implementar a sua branch de staging na instância Python designada para staging.

É uma boa prática proteger as branches production e staging para evitar envios diretos. Com esta configuração, pull requests devem ser criadas para a branch staging e fundidas por membros da equipa com os direitos apropriados. Uma vez validadas na plataforma de staging, as pull requests podem ser fundidas na branch production pelas mesmas pessoas autorizadas.

Esta abordagem melhora a segurança garantindo que apenas alterações aprovadas são implementadas e melhora a fiabilidade testando novas funcionalidades na plataforma de staging antes de chegarem à produção.