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.
Tworzenie usług Python
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 staging
Konfiguracja kluczy SSH
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 ""
Ustaw klucz publiczny
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ługi
Postępuj zgodnie z tymi krokami:
- W
SSH public keyskliknijAdd a public key. - W
DescriptionwpiszGitHub Action. - W
Keywklej klucz publiczny skopiowany z komputera.
Dodaj klucz publiczny
Ustaw klucz prywatny
Przejdź do strony projektu GitHub i kliknij Settings, a następnie Environments. Wybierz New environment.
Konfiguracja środowisk GitHub
W polu Name wpisz "production" i potwierdź.
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 gałęzi środowiska
Ustawianie gałęzi środowiska
W sekcji Environment secrets kliknij Add secret.
Dodaj 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 SSH
Następnie w sekcji Environment variables kliknij Add variable.
Ustawianie 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 endpointu
Jeśli dostosowałeś nazwę domeny swojej usługi, użyj wersji dostosowanej zamiast xxxxxx.stackhero-network.com.
Usuń wygenerowane klucze
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
Konfiguracja workflow GitHub Actions
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 produkcji
Gratulacje, teraz możesz automatycznie wdrażać swój kod do produkcji za pomocą GitHub Actions!
Tworzenie środowiska staging
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.
Idąc dalej
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.