Node.js: Wdrażanie za pomocą GitHub Actions
Dowiedz się, jak wdrażać swój kod Node.js przy użyciu GitHub Actions
👋 Witamy w dokumentacji Stackhero!
Stackhero oferuje gotowe do użycia środowisko Node.js cloud, które pozwala przyspieszyć Twoją pracę:
- Wdrażaj na produkcję w kilka sekund za pomocą prostego
git push. Nie są wymagane żadne dodatkowe narzędzia ani ręczna konfiguracja.- Skorzystaj z własnej domeny i ciesz się automatycznymi certyfikatami HTTPS, które zapewniają bezpieczeństwo Twojej aplikacji bez dodatkowej konfiguracji.
- Automatyczne kopie zapasowe, aktualizacje jednym kliknięciem oraz przewidywalne ceny pozwalają Ci skupić się na rozwoju funkcjonalności, a Stackhero zajmuje się infrastrukturą za Ciebie.
- Oparte na prywatnej, dedykowanej infrastrukturze dla zapewnienia stałej wydajności i wysokiego poziomu bezpieczeństwa.
Oszczędzaj czas i ograniczaj koszty operacyjne: Twoja aplikacja może działać na Node.js cloud hosting Stackhero już w kilka minut.
GitHub Actions umożliwia łatwą automatyzację zadań, takich jak wdrażanie kodu Node.js na serwery produkcyjne. W tym przewodniku pokażemy, jak bezpiecznie i niezawodnie wdrażać aplikację Node.js zarówno na środowiska staging, jak i produkcyjne, korzystając z GitHub Actions.
Zalecamy utrzymywanie dwóch gałęzi: staging oraz production. Po wypchnięciu kodu do jednej z tych gałęzi, zmiany są automatycznie wdrażane na odpowiadającą im usługę Stackhero.
Posiadanie instancji staging jest opcjonalne. Możesz korzystać z tego przewodnika, używając wyłącznie instancji produkcyjnej. Aby usprawnić wdrożenia i mieć pewność przed uruchomieniem na produkcji, zdecydowanie zaleca się utrzymywanie zarówno środowiska staging, jak i produkcyjnego. Takie podejście jest szeroko stosowane w branży i pomaga uniknąć typowych problemów z wdrożeniami.
Zanim zaczniesz, upewnij się, że masz konto GitHub oraz repozytorium z kodem Node.js.
Tworzenie usług Node.js
Najpierw zaloguj się do swojego panelu Stackhero i utwórz dwie usługi Stackhero: jedną dla staging, drugą dla produkcji. Dla przejrzystości możesz nazwać te usługi "Staging" i "Production".
Jeśli nie masz jeszcze konta Stackhero, możesz je założyć w dwie minuty za darmo i skonfigurować swoje usługi cloud Node.js w kilku kliknięciach.
Przykład usług Node.js
Konfiguracja kluczy SSH
Klucze SSH umożliwiają GitHub Actions bezpieczne połączenie z Twoją usługą Node.js podczas wdrażania kodu. To kluczowy krok w celu ochrony usług Stackhero.
Na swoim komputerze możesz wygenerować nowe klucze SSH poleceniem:
ssh-keygen -C "" -f /tmp/ssh_key -N ""
Ustaw klucz publiczny
Aby wyświetlić właśnie utworzony klucz publiczny, użyj:
cat /tmp/ssh_key.pub
Następnie w panelu Stackhero wybierz swoją usługę Node.js (produkcja) i kliknij przycisk Configure.
Pobierz ustawienia usługi
Wykonaj następujące kroki:
- W sekcji SSH public keys kliknij Add a public key.
- W polu Description wpisz
GitHub Action. - W polu Key wklej wcześniej skopiowany klucz publiczny.
Pobierz ustawienia usługi
Ustaw klucz prywatny
Teraz przejdź do GitHub i otwórz repozytorium swojego projektu. Kliknij Settings, następnie wybierz Environments. Wybierz New environment.
Konfiguracja środowisk GitHub
W polu Name wpisz "production" i zatwierdź.
Ustawianie środowiska
Kliknij przycisk No restriction, a następnie wybierz Selected branches and tags.
Ustawianie ograniczeń środowiska
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
Aby pobrać wygenerowany klucz prywatny, użyj:
cat /tmp/ssh_key
W GitHub użyj STACKHERO_SSH_PRIVATE_KEY jako Name i wklej swój klucz prywatny do pola Value.
Ustawianie sekretu 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 Node.js do pola Value. Endpoint znajdziesz w panelu Stackhero.
Ustawianie zmiennej endpoint
Jeśli ustawiłeś własną nazwę domeny dla swojej usługi, użyj swojej domeny zamiast <XXXXXX>.stackhero-network.com.
Usuń wygenerowane klucze
Ze względów bezpieczeństwa warto usunąć klucze SSH z komputera po ich skonfigurowaniu na Stackhero i GitHub:
rm /tmp/ssh_key /tmp/ssh_key.pub
Konfiguracja workflow GitHub Actions
W swoim repozytorium Git utwórz katalog .github/workflows, jeśli jeszcze nie istnieje. Następnie dodaj plik o nazwie deploy-to-stackhero.yml:
# File: .github/workflows/deploy-to-stackhero.yml
name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero
on:
push:
# Wymień gałęzie, które uruchamiają akcję wdrożeniową. Upewnij się, że dla każdej gałęzi istnieje środowisko w GitHub ("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:
# STACKHERO_SSH_PRIVATE_KEY i STACKHERO_ENDPOINT powinny być ustawione w odpowiednim środowisku GitHub.
ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
endpoint: ${{ vars.STACKHERO_ENDPOINT }}
Po utworzeniu pliku workflow możesz zatwierdzić zmiany poleceniem:
git add -A .
git commit -m "Dodaj GitHub Actions do wdrażania na Stackhero"
Aby utworzyć gałąź produkcyjną, użyj:
git checkout -b production
Następnie wypchnij zmiany do GitHub:
git push --set-upstream origin production
To polecenie wysyła Twój kod do gałęzi production i uruchamia GitHub Actions, które wdrożą kod na usługę Stackhero. Aby potwierdzić wdrożenie, otwórz projekt na GitHub i kliknij Actions.
GitHub Actions, które wdrożyły na produkcję
To wszystko. Twój kod jest teraz skonfigurowany do automatycznego wdrażania na produkcję przez GitHub Actions.
Tworzenie środowiska staging
Konfiguracja środowiska staging przebiega niemal identycznie jak dla produkcji. Wystarczy powtórzyć powyższe kroki, zamieniając production na staging tam, gdzie to konieczne.
Rozpocznij od utworzenia gałęzi staging:
git checkout -b staging
Następnie wypchnij gałąź staging do GitHub:
git push --set-upstream origin staging
GitHub Actions automatycznie wdroży Twoją gałąź staging na przypisaną usługę Node.js.
Dalsze kroki
Warto zabezpieczyć gałęzie production i staging, aby uniemożliwić bezpośrednie pushowanie. Zamiast tego możesz tworzyć pull requesty do gałęzi staging i scalać zmiany z gałęzi deweloperskiej. Po zatwierdzeniu zmian na platformie staging, scal pull request do gałęzi production.
Taki workflow zapewnia, że tylko uprawnieni współpracownicy mogą wprowadzać zmiany na staging i produkcję, a także dodaje dodatkową warstwę testów przed wdrożeniem nowych funkcjonalności na produkcję.