Python: Deployen met GitHub Actions

Hoe u uw Python-code uitrolt met GitHub Actions

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Python cloud oplossing die tal van voordelen biedt, waaronder:

  • Implementeer uw applicatie in seconden met een eenvoudige git push.
  • Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
  • Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
  • Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Python cloud hosting oplossing van Stackhero te proberen!

GitHub Actions maakt het eenvoudig om taken te automatiseren, waaronder het direct uitrollen van uw Python-code naar productieomgevingen.

In deze handleiding ziet u hoe u GitHub Actions veilig en betrouwbaar instelt om uw Python-code te deployen naar zowel staging- als productieomgevingen.

Om het overzichtelijk te houden, gebruikt u twee branches: staging en production. Telkens wanneer u code pusht naar deze branches, wordt deze automatisch uitgerold naar de bijbehorende Stackhero-instantie.

Het hebben van een staging-instantie is niet verplicht. U kunt deze handleiding volgen en slechts één productie-instantie gebruiken. Toch wordt het sterk aanbevolen om zowel een staging- als een productie-instantie te onderhouden, zodat u soepel kunt deployen en met vertrouwen naar productie kunt uitrollen. Deze aanpak is een industriestandaard en een bewezen werkwijze die veel problemen kan voorkomen.

Voordat u begint, zorg ervoor dat u een GitHub-account heeft en een repository waarin uw code wordt gehost.

Ga naar uw Stackhero-dashboard en maak twee Stackhero-services aan: één voor staging en één voor productie. Voor de duidelijkheid kunt u ze bijvoorbeeld "Production" en "Staging" noemen.

Nog geen Stackhero-account? U kunt zich in slechts twee minuten gratis registreren en vervolgens uw Python cloud services met een paar klikken aanmaken.

Voorbeeld van productie- en staging-servicesVoorbeeld van productie- en staging-services

SSH-sleutels stellen GitHub Actions in staat om veilig verbinding te maken met uw Python-service voor het uitrollen van code. Deze stap is essentieel om uw Stackhero-services te beveiligen.

Op uw computer kunt u nieuwe SSH-sleutels genereren met het volgende commando:

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

Toon eerst de publieke sleutel die u zojuist heeft gegenereerd:

cat /tmp/ssh_key.pub

Ga vervolgens in uw Stackhero-dashboard naar uw "production" Python-service en klik op de knop "Configure".

Service-instellingen openenService-instellingen openen

Volg deze stappen:

  1. Klik onder SSH public keys op Add a public key.
  2. Vul bij Description in: GitHub Action.
  3. Plak bij Key de publieke sleutel die u zojuist heeft gekopieerd.

Publieke sleutel toevoegenPublieke sleutel toevoegen

Ga naar de pagina van uw GitHub-project, klik op Settings en vervolgens op Environments. Kies New environment.

GitHub-omgevingen configurerenGitHub-omgevingen configureren

Vul bij het veld Name "production" in en bevestig.

Omgeving instellenOmgeving instellen

Klik op de knop No restriction en selecteer Selected branches and tags.

Omgevingsrestricties instellenOmgevingsrestricties instellen

Klik vervolgens op Add deployment branch or tag rule, vul "production" in bij het veld Name pattern en klik op Add rule.

Omgevingsbranch instellenOmgevingsbranch instellen Omgevingsbranch instellenOmgevingsbranch instellen

Klik in de sectie Environment secrets op Add secret.

Secret toevoegenSecret toevoegen

Toon nu de private sleutel die u eerder heeft gegenereerd:

cat /tmp/ssh_key

Gebruik bij het instellen van de secret STACKHERO_SSH_PRIVATE_KEY als Naam en plak de private sleutel als Waarde.

SSH private key secret instellenSSH private key secret instellen

Klik vervolgens in de sectie Environment variables op Add variable.

Variabelen instellenVariabelen instellen

Voer STACKHERO_ENDPOINT in als Naam en plak het endpoint van uw Python-service als Waarde. U vindt dit endpoint in uw Stackhero-dashboard.

Endpointvariabele instellenEndpointvariabele instellen

Als u de domeinnaam van uw service heeft aangepast, gebruik dan de aangepaste versie in plaats van <XXXXXX>.stackhero-network.com.

Voor de veiligheid is het verstandig om de SSH-sleutels nu van uw computer te verwijderen, aangezien u ze niet meer nodig heeft:

rm /tmp/ssh_key /tmp/ssh_key.pub

Maak in uw Git-repository een map aan genaamd .github/workflows als deze nog niet bestaat. Voeg vervolgens een bestand toe met de naam deploy-to-stackhero.yml.

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

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

on:
  push:
    # Lijst van branches die de deploy-actie triggeren bij een git push.
    # Vergeet niet om een environment aan te maken die overeenkomt met de branchnaam in GitHub (onder "Settings"/"Environments").
    # Voeg vervolgens de bijbehorende secret "STACKHERO_SSH_PRIVATE_KEY" en variabele "STACKHERO_ENDPOINT" toe aan deze environment.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # De secret "STACKHERO_SSH_PRIVATE_KEY" en de variabele "STACKHERO_ENDPOINT" moeten zijn ingesteld in de bijbehorende branch environment op GitHub onder "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Nadat u het workflowbestand heeft toegevoegd, kunt u uw wijzigingen committen:

git add -A .
git commit -m "GitHub Actions toegevoegd voor deployment naar Stackhero"

U kunt een productiebranch aanmaken met:

git checkout -b production

En uw wijzigingen naar GitHub pushen:

git push --set-upstream origin production

Hiermee pusht u uw code naar de production branch op GitHub en wordt GitHub Actions getriggerd, die uw code uitrolt naar uw Stackhero-instantie.

Om de status van uw deployment te controleren, gaat u naar de pagina van uw GitHub-project en klikt u op Actions.

GitHub Actions die naar productie heeft gedeployedGitHub Actions die naar productie heeft gedeployed

Dat is alles. U heeft nu automatische deployments naar productie met GitHub Actions.

Het opzetten van een staging-omgeving is vrijwel identiek aan de productieconfiguratie. U kunt simpelweg bovenstaande stappen herhalen en overal production vervangen door staging.

Na het instellen van de omgeving kunt u een stagingbranch aanmaken met:

git checkout -b staging

En vervolgens uw stagingbranch naar GitHub pushen:

git push --set-upstream origin staging

Uw stagingbranch wordt nu automatisch uitgerold naar de Python-instantie die u voor staging heeft aangewezen.

Het is verstandig om de branches production en staging te beschermen om directe pushes te voorkomen. Met deze opzet moeten teamleden pull requests aanmaken naar de staging branch, die vervolgens worden beoordeeld en samengevoegd door gebruikers met de juiste rechten. Zodra de wijzigingen op het stagingplatform zijn gevalideerd, kan de pull request door een bevoegde persoon worden gemerged naar de production branch.

Deze workflow zorgt ervoor dat alleen goedgekeurde wijzigingen in productie terechtkomen en verhoogt de betrouwbaarheid door nieuwe features eerst op staging te testen voordat ze live gaan.