Wróć do case study

GitHub Actions + Biedahosting: Automatyczny deploy PHP za grosze

GitHub Actions + Biedahosting: Automatyczny deploy PHP za grosze

Większość poradników DevOps opisuje skomplikowane wdrożenia z użyciem AWS, kontenerów Docker, Kubernetes czy drogich instancji VPS. A co jeśli masz tradycyjny, tani hosting (np. „biedahosting”) za kilkanaście złotych rocznie, dostęp przez SSH i chcesz wdrażać kod za pomocą jednego git push?

Skoro Git i GitHub oferują darmowe narzędzia CI/CD, zmuśmy je do współpracy z budżetowym serwerem.

Pokazuję krok po kroku, jak skonfigurować w pełni automatyczny deployment projektu PHP.


Krok 1: Bezpieczne uwierzytelnianie (Klucze SSH)

Aby GitHub Actions mógł bezpiecznie wysyłać pliki na Twój serwer, musimy połączyć je kryptograficznie za pomocą kluczy SSH.

Zamiast używać swojego głównego klucza z komputera, najlepiej wygenerować nową, osobną parę kluczy technicznych dedykowaną wyłącznie pod ten projekt:

  1. Otwórz terminal na swoim komputerze i wpisz:
    ssh-keygen -t ed25519 -a 200 -C "kontakt@biedahosting.pl"
  2. Zapisz plik pod nową nazwą (np. id_ed25519_github).Jeżeli nie masz polecenia ssh-keygen zainstaluj je, na pewno gdzieś znajdziesz instrukcje. Otwórz klucz publiczny, czyli plik id_ed25519_github.pub i wklej w panelu biedahostingu. Przejdź do Funkcje zaawansowane -> Klucze SSH Użyj opcji wklej klucz w prawym górnym rogu i przekopiuj wygenerowany klucz publiczny.
  3. Klucz prywatny (id_ed25519_github) będzie nam za chwilę potrzebny w ustawieniach GitHuba.

Schowek na sekrety w GitHubie

Nigdy nie wrzucaj kluczy prywatnych ani danych logowania bezpośrednio do kodu źródłowego.

  1. Wejdź do swojego repozytorium na GitHubie.
  2. Przejdź do: Settings -> Secrets and variables -> Actions.
  3. Kliknij New repository secret i dodaj następujące zmienne:
    • SSH_HOST – adres IP lub host Twojego serwera (np. buser1.deploy.net.pl).
    • SSH_USER – Twoja nazwa użytkownika SSH. np. buser1
    • SSH_PORT – port SSH (w biedahostingu 57185 lub standardowo 22).
    • SSH_PRIVATE_KEY – zawartość wygenerowanego przed chwilą prywatnego klucza.

Krok 2: Konfiguracja GitHub Actions (deploy.yml)

W swoim repozytorium utwórz katalog .github/workflows/, a w nim plik o nazwie deploy.yml.

Najprostszym, najbardziej niezawodnym narzędziem do wysyłania plików przez SSH, czyszczenia starego katalogu i filtrowania zbędnych śmieci jest gotowa akcja bazująca na rsync. Wklej poniższą konfigurację. Uważaj na wcięcia to plik yaml!

name: Deploy PHP to Biedahosting

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Pobierz kod z repozytorium
        uses: actions/checkout@v4

      - name: Deploy przez rsync i SSH
        uses: easingthemes/ssh-deploy@main
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
          REMOTE_HOST: ${{ secrets.SSH_HOST }}
          REMOTE_USER: ${{ secrets.SSH_USER }}
          REMOTE_PORT: ${{ secrets.SSH_PORT }}    
          TARGET: "/home/twojUser/public_html/twojprojekt/"
          # Automatyczne czyszczenie folderu docelowego przed wrzuceniem nowej wersji
          CLEAN: true 
          # Pliki i katalogi, których NIE chcemy wysyłać na serwer produkcyjny
          EXCLUDE: "/.git/, /.github/, /README.md, /build_folder/"

Jak to działa?

  • Używamy sprawdzonego rozwiązania: Moduł easingthemes/ssh-deploy używa mnóstwo ludzi
  • Push do main wystawia pliki: Wykonaj push do brancha main, żeby automatycznie wystawić pliki do katalogu TARGET. Jeżeli chcesz wiecej branchy, dodaj je w branches
  • Uzupełnij swoje dane:Wpisz w target lokalizacje, gdzie mają lądować pliki
  • Automatyczne czyszczenie (CLEAN: true): Serwer po każdym wdrożeniu idealnie odzwierciedla stan gałęzi main. Nie zostają żadne „osierocone” pliki po starych wersjach. Ale uważaj - nie wykasuj potrzebnych plików.
  • Filtrowanie (EXCLUDE): Ukryte katalogi gita (.git/, .github/) oraz pliki dokumentacji zostają na maszynie budującej i nie trafiają do publicznej sieci.
  • Budżetowo i szybko: Cały proces trwa zaledwie kilka sekund i mieści się w darmowych limitach GitHub Actions.

Podsumowanie

Automatyzacja nie wymaga drogiej infrastruktury w chmurze. Połączenie GitHub Actions z tanim hostingiem przez SSH i rsync daje pełen komfort pracy znany z dużych projektów komercyjnych – robisz git push, a aplikacja po chwili sama aktualizuje się na produkcji.

Koniec z ręcznym kopiowaniem plików. Czas na kodowanie! 💻🔥

👉 Powrót do oferty BiedaHostingu

Chcę przetestować