Python: Wdrażanie z GitHub Actions

Jak wdrożyć 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 automatyzację zadań, takich jak wdrażanie kodu Python na serwery produkcyjne.

W tym przewodniku dowiesz się, jak bezpiecznie i niezawodnie używać GitHub Actions do wdrażania kodu Python w środowiskach staging i produkcyjnym.

Aby to osiągnąć, będziesz utrzymywać dwie gałęzie: staging i production. Kod wypchnięty do tych gałęzi będzie automatycznie wdrażany na odpowiednią instancję Stackhero.

Posiadanie instancji staging nie jest obowiązkowe. Możesz postępować zgodnie z tym przewodnikiem, mając tylko jedną instancję produkcyjną. Jednak aby zapewnić płynne wdrożenia i pełną pewność podczas wdrażania do produkcji, zdecydowanie zaleca się utrzymywanie zarówno instancji staging, jak i produkcyjnej. Ta praktyka jest standardem branżowym i rozsądnym podejściem, które może pomóc uniknąć wielu problemów.

Przed rozpoczęciem upewnij się, że masz konto GitHub z repozytorium hostującym Twój kod.

Odwiedź swój panel Stackhero i utwórz dwie usługi Stackhero, jedną dla staging i jedną dla produkcji. Dla jasności możesz rozważyć zmianę nazw tych usług na "Production" i "Staging".

Nie masz jeszcze konta Stackhero? Możesz zarejestrować się w zaledwie dwie minuty za darmo, a następnie utworzyć swoje usługi chmurowe Python za pomocą kilku kliknięć.

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

Klucze SSH pozwalają GitHub Actions na bezpieczne połączenie z Twoją usługą Python w celu wdrożenia kodu. Ten krok jest niezbędny do ochrony Twoich usług Stackhero.

Na swoim komputerze wygeneruj nowe klucze SSH, uruchamiając:

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

Najpierw pobierz wygenerowany klucz publiczny:

cat /tmp/ssh_key.pub

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

Uzyskaj ustawienia usługiUzyskaj ustawienia usługi

Postępuj zgodnie z tymi krokami:

  1. W SSH public keys kliknij Add a public key.
  2. W Description wpisz GitHub Action.
  3. W Key wklej klucz publiczny skopiowany z komputera.

Dodaj klucz publicznyDodaj klucz publiczny

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

Konfiguracja środowisk GitHubKonfiguracja środowisk GitHub

W polu Name wpisz "production" i potwierdź.

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 gałęzi środowiskaUstawianie gałęzi środowiska Ustawianie gałęzi środowiskaUstawianie gałęzi środowiska

W sekcji Environment secrets kliknij Add secret.

Dodaj sekretDodaj sekret

Teraz pobierz wcześniej wygenerowany klucz prywatny:

cat /tmp/ssh_key

W konfiguracji sekretu użyj STACKHERO_SSH_PRIVATE_KEY jako Nazwa i wklej klucz prywatny jako Wartość.

Ustawianie sekretu klucza prywatnego SSHUstawianie sekretu klucza prywatnego SSH

Następnie w sekcji Environment variables kliknij Add variable.

Ustawianie zmiennychUstawianie zmiennych

Wpisz STACKHERO_ENDPOINT jako Nazwa i wklej endpoint swojej usługi Python jako Wartość. Możesz znaleźć ten endpoint w swoim panelu Stackhero.

Ustawianie zmiennej endpointuUstawianie zmiennej endpointu

Jeśli dostosowałeś nazwę domeny swojej usługi, użyj wersji dostosowanej zamiast xxxxxx.stackhero-network.com.

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

rm /tmp/ssh_key /tmp/ssh_key.pub

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

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

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

on:
  push:
    # Lista gałęzi, które uruchomią akcję wdrożenia po wypchnięciu git.
    # Nie zapomnij utworzyć środowiska odpowiadającego nazwie gałęzi w GitHub (w "Settings"/"Environments").
    # Następnie dodaj odpowiedni sekret "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:
        # Sekret "STACKHERO_SSH_PRIVATE_KEY" i zmienna "STACKHERO_ENDPOINT" powinny być zdefiniowane w odpowiednim środowisku gałęzi na GitHub pod "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Zatwierdź te zmiany, uruchamiając:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

Następnie utwórz gałąź produkcyjną:

git checkout -b production

Na koniec wypchnij swoje zmiany do GitHub:

git push --set-upstream origin production

To polecenie wypycha Twój kod do gałęzi production na GitHub i uruchamia GitHub Actions, aby wdrożyć kod na Twoją instancję Stackhero.

Aby sprawdzić wdrożenie, odwiedź stronę projektu GitHub i kliknij Actions.

GitHub Actions, które wdrożyły do produkcjiGitHub Actions, które wdrożyły do produkcji

Gratulacje, teraz możesz automatycznie wdrażać swój kod do produkcji za pomocą GitHub Actions!

Konfiguracja środowiska staging jest bardzo podobna do konfiguracji środowiska produkcyjnego. Po prostu powtórz powyższe kroki, zastępując production staging.

Po skonfigurowaniu środowiska utwórz gałąź staging:

git checkout -b staging

Następnie wypchnij swoją gałąź staging do GitHub:

git push --set-upstream origin staging

GitHub Actions automatycznie wdroży Twoją gałąź staging na instancję Python przeznaczoną do staging.

Zaleca się ochronę gałęzi production i staging, aby zapobiec bezpośrednim wypchnięciom. W tej konfiguracji muszą być tworzone pull requesty dla gałęzi staging i scalane przez członków zespołu z odpowiednimi uprawnieniami. Po zatwierdzeniu na platformie staging, pull request może być scalony do gałęzi production przez te same uprawnione osoby.

To podejście zwiększa bezpieczeństwo, zapewniając, że tylko zatwierdzone zmiany są wdrażane, i poprawia niezawodność, testując nowe funkcje na platformie staging, zanim trafią do produkcji.