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.
Python-services aanmaken
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-services
SSH-sleutels configureren
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 ""
De publieke sleutel instellen
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 openen
Volg deze stappen:
- Klik onder
SSH public keysopAdd a public key. - Vul bij
Descriptionin:GitHub Action. - Plak bij
Keyde publieke sleutel die u zojuist heeft gekopieerd.
Publieke sleutel toevoegen
De private sleutel instellen
Ga naar de pagina van uw GitHub-project, klik op Settings en vervolgens op Environments. Kies New environment.
GitHub-omgevingen configureren
Vul bij het veld Name "production" in en bevestig.
Omgeving instellen
Klik op de knop No restriction en selecteer Selected branches and tags.
Omgevingsrestricties instellen
Klik vervolgens op Add deployment branch or tag rule, vul "production" in bij het veld Name pattern en klik op Add rule.
Omgevingsbranch instellen
Omgevingsbranch instellen
Klik in de sectie Environment secrets op Add secret.
Secret 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 instellen
Klik vervolgens in de sectie Environment variables op Add variable.
Variabelen 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 instellen
Als u de domeinnaam van uw service heeft aangepast, gebruik dan de aangepaste versie in plaats van <XXXXXX>.stackhero-network.com.
De gegenereerde sleutels verwijderen
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
De GitHub Actions workflow configureren
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 gedeployed
Dat is alles. U heeft nu automatische deployments naar productie met GitHub Actions.
De staging-omgeving aanmaken
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.
Verder gaan
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.