Python: Implementar com GitHub Actions

Como implementar o seu código Python utilizando o 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 facilita a automatização de tarefas, incluindo a implementação do seu código Python diretamente nos servidores de produção.

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

Para manter a organização, irá utilizar dois ramos: 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. Pode seguir este guia e ter apenas uma instância de produção. No entanto, para garantir implementações sem problemas e ter total confiança ao implementar em produção, é fortemente recomendado manter tanto uma instância de staging como uma de produção. Esta prática é um padrão da indústria e uma abordagem sólida que pode ajudar a evitar inúmeros problemas.

Antes de começar, certifique-se de que tem uma conta GitHub e um repositório onde o seu código está alojado.

Aceda ao seu dashboard Stackhero e crie dois serviços Stackhero, um para staging e outro para produção. Para maior clareza, pode nomeá-los como "Production" e "Staging".

Ainda não tem conta Stackhero? Pode registar-se gratuitamente em apenas dois minutos 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 ligue de forma segura ao seu serviço Python para a implementação do código. Este passo é fundamental para proteger os seus serviços Stackhero.

No seu computador, pode gerar novas chaves SSH executando:

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

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

cat /tmp/ssh_key.pub

De seguida, no seu dashboard Stackhero, selecione o seu serviço Python "production" e clique no botão "Configure".

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

Siga estes passos:

  1. Em SSH public keys, clique em Add a public key.
  2. Em Description, introduza GitHub Action.
  3. Em Key, cole a chave pública que copiou.

Adicionar chave públicaAdicionar chave pública

Vá à página do seu projeto GitHub, clique em Settings e depois em Environments. Escolha New environment.

Configurar ambientes no GitHubConfigurar ambientes no GitHub

No campo Name, escreva "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

Depois, 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 segredoAdicionar segredo

Agora, mostre a chave privada que gerou anteriormente:

cat /tmp/ssh_key

Na configuração do segredo, utilize 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

De seguida, na secção Environment variables, clique em Add variable.

Definir variáveisDefinir variáveis

Introduza STACKHERO_ENDPOINT como Nome e cole o endpoint do seu serviço Python como Valor. 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 agora as chaves SSH do seu computador, pois já não irá precisar delas:

rm /tmp/ssh_key /tmp/ssh_key.pub

No seu repositório Git, crie uma pasta chamada .github/workflows caso ainda não exista. Depois, adicione um ficheiro chamado deploy-to-stackhero.yml dentro dessa pasta.

# Ficheiro: .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 ao nome do ramo 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 do ramo correspondente no GitHub em "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Depois de adicionar o ficheiro de workflow, pode confirmar as suas alterações:

git add -A .
git commit -m "Adicionar GitHub Actions para deploy no Stackhero"

Pode criar um ramo de produção com:

git checkout -b production

E fazer push das suas alterações para o GitHub:

git push --set-upstream origin production

Isto irá enviar o seu código para o ramo production no GitHub e acionar o GitHub Actions, implementando o seu código na sua instância Stackhero.

Para verificar o estado da sua implementação, basta aceder à página do seu projeto GitHub e clicar em Actions.

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

E está feito. Agora tem implementações automáticas em produção utilizando o GitHub Actions.

A configuração de um ambiente de staging é praticamente idêntica à configuração da produção. Basta repetir os passos acima, substituindo production por staging em todos os locais onde aparece.

Depois de configurar o ambiente, pode criar um ramo de staging assim:

git checkout -b staging

Depois faça push do seu ramo de staging para o GitHub:

git push --set-upstream origin staging

O seu ramo de staging será agora automaticamente implementado na instância Python que designou para staging.

É aconselhável proteger os ramos production e staging para evitar pushes diretos. Com esta configuração, os membros da equipa terão de criar pull requests para o ramo staging, que deverão ser revistos e integrados por utilizadores com as permissões adequadas. Assim que as alterações forem validadas na plataforma de staging, a pull request pode ser integrada no ramo production por alguém autorizado.

Este workflow ajuda a garantir que apenas alterações aprovadas chegam à produção, ao mesmo tempo que melhora a fiabilidade ao testar novas funcionalidades em staging antes de entrarem em produção.