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.
Tworzenie usług Python
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 staging
Konfiguracja kluczy SSH
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 ""
Ustaw klucz publiczny
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ługi
Wykonaj następujące kroki:
- W sekcji
SSH public keyskliknijAdd a public key. - W polu
DescriptionwpiszGitHub Action. - W polu
Keywklej właśnie skopiowany klucz publiczny.
Dodaj klucz publiczny
Ustaw klucz prywatny
Przejdź do strony swojego projektu na GitHub, kliknij Settings, następnie Environments. Wybierz New environment.
Konfiguracja środowisk GitHub
W polu Name wpisz „production” i zatwierdź.
Ustawianie środowiska
Kliknij przycisk No restriction i wybierz Selected branches and tags.
Ustawianie ograniczeń środowiska
Następnie kliknij Add deployment branch or tag rule, wpisz „production” w polu Name pattern i kliknij Add rule.
Ustawianie brancha środowiska
Ustawianie brancha środowiska
W sekcji Environment secrets kliknij Add secret.
Dodaj 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 SSH
Następnie w sekcji Environment variables kliknij Add variable.
Ustawianie zmiennych
Wpisz STACKHERO_ENDPOINT jako Name i wklej endpoint swojej usługi Python jako Value. Endpoint znajdziesz w panelu Stackhero.
Ustawianie zmiennej endpoint
Jeśli spersonalizowałeś nazwę domeny swojej usługi, użyj tej wersji zamiast <XXXXXX>.stackhero-network.com.
Usuń wygenerowane klucze
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
Konfiguracja workflow GitHub Actions
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ę
To wszystko. Masz teraz automatyczne wdrożenia na produkcję dzięki GitHub Actions.
Tworzenie środowiska staging
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.
Dalsze kroki
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ą.