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.

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.jsPrzykład usług Node.js

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 ""

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ługiPobierz ustawienia usługi

Wykonaj następujące kroki:

  1. W sekcji SSH public keys kliknij Add a public key.
  2. W polu Description wpisz GitHub Action.
  3. W polu Key wklej wcześniej skopiowany klucz publiczny.

Pobierz ustawienia usługiPobierz ustawienia usługi

Teraz przejdź do GitHub i otwórz repozytorium swojego projektu. Kliknij Settings, następnie wybierz Environments. Wybierz New environment.

Konfiguracja środowisk GitHubKonfiguracja środowisk GitHub

W polu Name wpisz "production" i zatwierdź.

Ustawianie środowiskaUstawianie środowiska

Kliknij przycisk No restriction, a następnie wybierz Selected branches and tags.

Ustawianie ograniczeń środowiskaUstawianie ograniczeń środowiska

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

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 SSHUstawianie sekretu klucza prywatnego SSH

Następnie w sekcji Environment variables kliknij Add variable.

Ustawianie zmiennychUstawianie zmiennych

Wpisz STACKHERO_ENDPOINT jako Name i wklej endpoint swojej usługi Node.js do pola Value. Endpoint znajdziesz w panelu Stackhero.

Ustawianie zmiennej endpointUstawianie zmiennej endpoint

Jeśli ustawiłeś własną nazwę domeny dla swojej usługi, użyj swojej domeny zamiast <XXXXXX>.stackhero-network.com.

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

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ę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.

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.

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ę.