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:
- Otwórz terminal na swoim komputerze i wpisz:
ssh-keygen -t ed25519 -a 200 -C "kontakt@biedahosting.pl" - 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ź doFunkcje zaawansowane -> Klucze SSHUżyj opcji wklej klucz w prawym górnym rogu i przekopiuj wygenerowany klucz publiczny. - 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.
- Wejdź do swojego repozytorium na GitHubie.
- Przejdź do: Settings -> Secrets and variables -> Actions.
- 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. buser1SSH_PORT– port SSH (w biedahostingu57185lub standardowo22).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łęzimain. 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