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.
Criar os serviços Python
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 staging
Configurar as chaves SSH
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 ""
Definir a chave pública
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ço
Siga estes passos:
- Em
SSH public keys, clique emAdd a public key. - Em
Description, introduzaGitHub Action. - Em
Key, cole a chave pública que copiou.
Adicionar chave pública
Definir a chave privada
Vá à página do seu projeto GitHub, clique em Settings e depois em Environments. Escolha New environment.
Configurar ambientes no GitHub
No campo Name, escreva "production" e confirme.
Definir o ambiente
Clique no botão No restriction e selecione Selected branches and tags.
Definir 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 ambiente
Definir ramo do ambiente
Na secção Environment secrets, clique em Add secret.
Adicionar 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 SSH
De seguida, na secção Environment variables, clique em Add variable.
Definir 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 endpoint
Se personalizou o nome de domínio do seu serviço, utilize a versão personalizada em vez de <XXXXXX>.stackhero-network.com.
Apagar as chaves geradas
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
Configurar o workflow do GitHub Actions
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ção
E está feito. Agora tem implementações automáticas em produção utilizando o GitHub Actions.
Criar o ambiente de staging
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.
Para ir mais longe
É 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.