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 rozwiązanie Node.js 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 Node.js cloud hosting Stackhero zajmuje tylko 5 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ę.