Python: Wdrażanie z GitHub Actions

Jak wdrożyć swój kod Python za pomocą GitHub Actions

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Python cloud, które zapewnia wiele korzyści, w tym:

  • Wdrażaj swoją aplikację w kilka sekund za pomocą prostego git push.
  • Używaj własnej nazwy domeny i korzystaj z automatycznej konfiguracji certyfikatów HTTPS dla zwiększonego bezpieczeństwa.
  • Ciesz się spokojem dzięki automatycznym kopiom zapasowym, aktualizacjom jednym kliknięciem oraz prostemu, przejrzystemu i przewidywalnemu cennikowi.
  • Uzyskaj optymalną wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj sobie życie: wypróbowanie rozwiązania Python cloud hosting Stackhero zajmuje tylko 5 minut!

GitHub Actions umożliwia łatwą automatyzację zadań, w tym wdrażanie kodu Python bezpośrednio na serwery produkcyjne.

W tym przewodniku dowiesz się, jak bezpiecznie i niezawodnie skonfigurować GitHub Actions do wdrażania kodu Python zarówno na środowiska staging, jak i produkcyjne.

Aby zachować porządek, będziesz korzystać z dwóch branchy: staging oraz production. Za każdym razem, gdy wypchniesz kod na te branche, zostanie on automatycznie wdrożony na odpowiadającą im instancję Stackhero.

Posiadanie instancji staging nie jest obowiązkowe. Możesz postępować zgodnie z tym przewodnikiem i mieć tylko jedną instancję produkcyjną. Jednak aby zapewnić płynność wdrożeń i mieć pełną pewność podczas wdrażania na produkcję, zdecydowanie zaleca się utrzymywanie zarówno instancji staging, jak i produkcyjnej. To standard branżowy i sprawdzona praktyka, która pozwala uniknąć wielu problemów.

Zanim zaczniesz, upewnij się, że masz konto GitHub oraz repozytorium, w którym znajduje się Twój kod.

Przejdź do swojego panelu Stackhero i utwórz dwie usługi Stackhero: jedną dla staging, drugą dla produkcji. Dla przejrzystości możesz nazwać je „Production” i „Staging”.

Nie masz jeszcze konta Stackhero? Możesz zarejestrować się za darmo w dwie minuty, a następnie utworzyć swoje usługi cloud Python kilkoma kliknięciami.

Przykład usług produkcyjnej i stagingPrzykład usług produkcyjnej i staging

Klucze SSH umożliwiają GitHub Actions bezpieczne połączenie z Twoją usługą Python w celu wdrożenia kodu. Ten krok jest kluczowy dla ochrony Twoich usług Stackhero.

Na swoim komputerze możesz wygenerować nowe klucze SSH poleceniem:

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

Najpierw wyświetl wygenerowany klucz publiczny:

cat /tmp/ssh_key.pub

Następnie w panelu Stackhero wybierz swoją usługę Python „production” i kliknij przycisk „Configure”.

Pobierz ustawienia usługiPobierz ustawienia usługi

Wykonaj następujące kroki:

  1. W sekcji SSH public keys kliknij Add a public key.
  2. W polu Description wpisz GitHub Action.
  3. W polu Key wklej właśnie skopiowany klucz publiczny.

Dodaj klucz publicznyDodaj klucz publiczny

Przejdź do strony swojego projektu na GitHub, kliknij Settings, następnie Environments. Wybierz New environment.

Konfiguracja środowisk GitHubKonfiguracja środowisk GitHub

W polu Name wpisz „production” i zatwierdź.

Ustawianie środowiskaUstawianie środowiska

Kliknij przycisk No restriction i wybierz Selected branches and tags.

Ustawianie ograniczeń środowiskaUstawianie ograniczeń środowiska

Następnie kliknij Add deployment branch or tag rule, wpisz „production” w polu Name pattern i kliknij Add rule.

Ustawianie brancha środowiskaUstawianie brancha środowiska Ustawianie brancha środowiskaUstawianie brancha środowiska

W sekcji Environment secrets kliknij Add secret.

Dodaj secretDodaj secret

Teraz wyświetl wcześniej wygenerowany klucz prywatny:

cat /tmp/ssh_key

W konfiguracji secret użyj STACKHERO_SSH_PRIVATE_KEY jako Name i wklej klucz prywatny jako Value.

Ustawianie secret dla klucza prywatnego SSHUstawianie secret dla klucza prywatnego SSH

Następnie w sekcji Environment variables kliknij Add variable.

Ustawianie zmiennychUstawianie zmiennych

Wpisz STACKHERO_ENDPOINT jako Name i wklej endpoint swojej usługi Python jako Value. Endpoint znajdziesz w panelu Stackhero.

Ustawianie zmiennej endpointUstawianie zmiennej endpoint

Jeśli spersonalizowałeś nazwę domeny swojej usługi, użyj tej wersji zamiast <XXXXXX>.stackhero-network.com.

Ze względów bezpieczeństwa warto teraz usunąć klucze SSH z komputera, ponieważ nie będą już potrzebne:

rm /tmp/ssh_key /tmp/ssh_key.pub

W swoim repozytorium utwórz katalog .github/workflows, jeśli jeszcze nie istnieje. Następnie dodaj plik o nazwie deploy-to-stackhero.yml w tym katalogu.

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

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

on:
  push:
    # Lista branchy, które wywołają akcję wdrożenia po git push.
    # Nie zapomnij utworzyć środowiska odpowiadającego nazwie brancha na GitHub (w "Settings"/"Environments").
    # Następnie dodaj odpowiedni secret "STACKHERO_SSH_PRIVATE_KEY" i zmienną "STACKHERO_ENDPOINT" w tym środowisku.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Secret "STACKHERO_SSH_PRIVATE_KEY" oraz zmienna "STACKHERO_ENDPOINT" powinny być zdefiniowane w odpowiednim środowisku brancha na GitHub w "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Po dodaniu pliku workflow możesz zatwierdzić zmiany:

git add -A .
git commit -m "Dodaj GitHub Actions do wdrażania na Stackhero"

Możesz utworzyć branch produkcyjny poleceniem:

git checkout -b production

I wypchnąć zmiany na GitHub:

git push --set-upstream origin production

To wypchnie Twój kod na branch production na GitHub i uruchomi GitHub Actions, które wdrożą kod na Twojej instancji Stackhero.

Aby sprawdzić status wdrożenia, wystarczy wejść na stronę projektu na GitHub i kliknąć Actions.

GitHub Actions, które wdrożyły na produkcjęGitHub Actions, które wdrożyły na produkcję

To wszystko. Masz teraz automatyczne wdrożenia na produkcję dzięki GitHub Actions.

Konfiguracja środowiska staging jest niemal identyczna jak produkcji. Wystarczy powtórzyć powyższe kroki, zamieniając wszędzie production na staging.

Po skonfigurowaniu środowiska możesz utworzyć branch staging poleceniem:

git checkout -b staging

Następnie wypchnij branch staging na GitHub:

git push --set-upstream origin staging

Twój branch staging będzie teraz automatycznie wdrażany na instancji Python przeznaczonej do stagingu.

Warto zabezpieczyć branche production i staging, aby uniemożliwić bezpośrednie pushowanie zmian. Przy takiej konfiguracji członkowie zespołu będą musieli tworzyć pull requesty do brancha staging, które powinny być przeglądane i scalane przez osoby z odpowiednimi uprawnieniami. Po zatwierdzeniu zmian na platformie staging pull request może zostać scalony do brancha production przez osobę uprawnioną.

Taki workflow pozwala mieć pewność, że do produkcji trafiają tylko zatwierdzone zmiany, a niezawodność wdrożeń wzrasta dzięki testowaniu nowych funkcji na stagingu przed ich publikacją.