PHP: Wdrażanie za pomocą GitHub Actions

Jak wdrożyć swój kod PHP przy użyciu GitHub Actions

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie PHP 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 PHP cloud hosting Stackhero zajmuje tylko 5 minut!

GitHub Actions to potężne narzędzie umożliwiające automatyzację workflow, w tym wdrażanie kodu PHP bezpośrednio na serwery produkcyjne. W tym przewodniku pokażemy, jak bezpiecznie wdrożyć aplikację PHP zarówno na środowisko staging, jak i produkcyjne, korzystając z GitHub Actions.

Zalecanym podejściem jest utrzymywanie dwóch gałęzi w repozytorium: staging oraz production. Za każdym razem, gdy wypchniesz kod do tych gałęzi, zostanie on automatycznie wdrożony na odpowiadającą im instancję Stackhero.

Posiadanie instancji staging nie jest obowiązkowe. Jednak korzystanie zarówno z instancji staging, jak i produkcyjnej jest zdecydowanie zalecane, aby zapewnić płynność wdrożeń i większą pewność podczas wdrażania na produkcję. Takie podejście jest zgodne ze standardami branżowymi i pomaga zapobiegać potencjalnym problemom.

Aby rozpocząć, potrzebujesz konta GitHub z kodem PHP umieszczonym w repozytorium.

Najpierw zaloguj się do swojego panelu Stackhero i utwórz dwie usługi PHP: jedną dla staging, drugą dla produkcji. Dla przejrzystości możesz zmienić ich nazwy na "Production" i "Staging".

Jeśli nie masz jeszcze konta Stackhero, możesz je założyć za darmo w ciągu dwóch minut i skonfigurować swoje usługi PHP w chmurze kilkoma kliknięciami.

Przykład usług produkcyjnej i stagingPrzykład usług produkcyjnej i staging

Klucze SSH to zalecana metoda umożliwiająca GitHub Actions bezpieczne połączenie z usługą PHP podczas wdrożenia. W tym przewodniku utworzysz dedykowaną parę kluczy SSH do tego celu.

Aby wygenerować nowe klucze SSH, uruchom poniższe polecenie na swoim komputerze:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

Następnie pobierz klucz publiczny, wykonując:

cat /tmp/ssh_key.pub

Przejdź do panelu Stackhero i wybierz usługę PHP "Production". Kliknij "Configure" i wykonaj następujące kroki:

  1. W sekcji SSH public keys kliknij "Add a public key".
  2. W polu Description wpisz "GitHub Action".
  3. Wklej właśnie pobrany klucz publiczny do pola Key.

Pobierz ustawienia usługiPobierz ustawienia usługi

Teraz dodaj klucz prywatny do projektu GitHub, aby mógł być używany podczas wdrożenia:

  • Przejdź do Settings, następnie wybierz Environments i kliknij New environment.

    Konfiguracja środowisk GitHubKonfiguracja środowisk GitHub

  • W polu Name wpisz "production" i zatwierdź.

    Ustawianie środowiskaUstawianie środowiska

  • Kliknij przycisk No restriction i 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.

    Dodawanie sekretuDodawanie sekretu

Pobierz wcześniej wygenerowany klucz prywatny, wykonując:

cat /tmp/ssh_key

W ustawieniach środowiska GitHub:

  • W polu Name wpisz STACKHERO_SSH_PRIVATE_KEY i wklej swój klucz prywatny do pola Value.

    Ustawianie sekretu klucza prywatnego SSHUstawianie sekretu klucza prywatnego SSH

  • W sekcji Environment variables kliknij Add variable.

    Ustawianie zmiennychUstawianie zmiennych

  • W polu Name wpisz STACKHERO_ENDPOINT i wklej endpoint swojej usługi PHP do pola Value. Endpoint znajdziesz w panelu Stackhero.

    Ustawianie zmiennej endpointUstawianie zmiennej endpoint

Jeśli spersonalizowałeś nazwę domeny swojej usługi, użyj tej wersji zamiast <XXXXXX>.stackhero-network.com.

Ze względów bezpieczeństwa warto usunąć wygenerowane klucze SSH z komputera po zakończeniu konfiguracji:

rm /tmp/ssh_key /tmp/ssh_key.pub

Teraz skonfigurujesz plik workflow GitHub Actions, aby zautomatyzować wdrożenia. W repozytorium utwórz katalog .github/workflows i dodaj plik o nazwie deploy-to-stackhero.yml z poniższą zawartością:

# File: .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 wywołają akcję wdrożenia po git push
    # Nie zapomnij utworzyć odpowiadającego środowiska w GitHub ("Settings" -> "Environments") dla każdej gałęzi
    # Następnie dodaj sekret "STACKHERO_SSH_PRIVATE_KEY" oraz 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" oraz zmienna "STACKHERO_ENDPOINT" powinny być zdefiniowane w odpowiednim środowisku GitHub ("Settings" -> "Environments")
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Po dodaniu tego pliku możesz zatwierdzić zmiany, wykonując poniższe polecenia w terminalu:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

Aby utworzyć gałąź produkcyjną, możesz wykonać:

git checkout -b production

Następnie wypchnij zmiany do GitHub:

git push --set-upstream origin production

To wypchnie Twój kod do gałęzi production na GitHub. GitHub Actions automatycznie uruchomi workflow i wdroży kod na powiązaną instancję Stackhero. Aby sprawdzić status wdrożenia, odwiedź swój projekt na GitHub i kliknij Actions.

GitHub Actions, które wdrożyły na produkcjęGitHub Actions, które wdrożyły na produkcję

Gratulacje! Twój projekt jest teraz skonfigurowany do automatycznego wdrażania na produkcję przy użyciu GitHub Actions.

Środowisko staging możesz skonfigurować w taki sam sposób jak produkcyjne. Wystarczy powtórzyć powyższe kroki, zamieniając production na staging tam, gdzie to konieczne.

Po skonfigurowaniu ustawień utwórz gałąź staging w następujący sposób:

git checkout -b staging

Następnie wypchnij ją do GitHub:

git push --set-upstream origin staging

GitHub Actions automatycznie wdroży kod z gałęzi staging do usługi PHP skonfigurowanej dla staging.

Aby zapewnić niezawodność i bezpieczeństwo aplikacji, warto zabezpieczyć gałęzie production i staging przed bezpośrednimi pushami. Możesz na przykład wymusić, aby zmiany były wprowadzane poprzez pull requesty, a gałąź staging była przeglądana i scalana tylko przez osoby z uprawnieniami do wdrażania. Po zatwierdzeniu zmian w staging, upoważnieni użytkownicy mogą scalić je do gałęzi production.

Takie podejście gwarantuje, że na produkcję trafia tylko zweryfikowany kod, a nowe funkcjonalności są testowane w staging przed wdrożeniem na produkcję, co daje Tobie i Twojemu zespołowi dodatkowy spokój.