Jak zautomatyzować wdrażanie WordPressa przy użyciu Git i GitHub Actions

Ręczne aktualizowanie plików przez FTP to już przeszłość.
Nowoczesne środowiska programistyczne stawiają na automatyzację wdrożeń (CI/CD), która pozwala błyskawicznie publikować zmiany z repozytorium Git na serwerze.

W tym poradniku pokażę, jak:

  • skonfigurować repozytorium WordPressa w GitHubie,
  • przygotować serwer do odbierania wdrożeń,
  • użyć GitHub Actions do automatycznego wdrażania zmian.

To rozwiązanie jest w pełni darmowe, bez zewnętrznych narzędzi – wystarczy GitHub i dostęp SSH do serwera.


1. Dlaczego warto wdrożyć automatyzację?

Automatyczne wdrożenia mają kilka kluczowych zalet:

  • 🔁 Spójność środowisk – każda zmiana w kodzie przechodzi przez ten sam proces,
  • 🚀 Szybkość – commit na GitHubie = automatyczne wdrożenie,
  • 🔒 Bezpieczeństwo – brak ryzyka pomyłek przy ręcznym kopiowaniu plików,
  • 🧩 Wersjonowanie – możliwość powrotu do dowolnej wersji strony.

Dzięki temu Twój WordPress staje się łatwiejszy w utrzymaniu i bardziej odporny na błędy ludzkie.


2. Przygotowanie środowiska Git

a) Inicjalizacja repozytorium

W katalogu WordPressa (np. lokalnie):

git init
git add .
git commit -m "Initial commit WordPress project"

Zaleca się nie dodawać katalogu wp-content/uploads (z plikami użytkowników).
W pliku .gitignore dodaj:

wp-content/uploads/
wp-config.php
node_modules/
vendor/

b) Dodanie zdalnego repozytorium

git remote add origin git@github.com:twoj-login/twoja-strona.git
git push -u origin main

Repozytorium jest gotowe — teraz czas na automatyzację wdrożeń.


3. Przygotowanie serwera produkcyjnego

Najwygodniej, jeśli masz dostęp SSH do serwera.
Utwórz tam katalog projektu:

cd /var/www/
mkdir wordpress-prod
cd wordpress-prod
git init

Dodaj klucz publiczny GitHuba (z konta GitHub Actions) do pliku:

~/.ssh/authorized_keys

Dzięki temu GitHub Actions będzie mógł połączyć się z serwerem bez hasła.


4. Konfiguracja GitHub Actions

W repozytorium utwórz katalog:
.github/workflows/deploy.yml

A w nim dodaj poniższą konfigurację:

name: Deploy WordPress via SSH

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Copy files to server via SSH
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          source: "."
          target: "/var/www/wordpress-prod"

      - name: Run remote post-deploy script
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          script: |
            cd /var/www/wordpress-prod
            composer install --no-dev
            php artisan cache:clear || true

5. Konfiguracja sekretów w GitHubie

Przejdź do:
Repozytorium → Settings → Secrets → Actions
i dodaj następujące zmienne:

  • SERVER_HOST → adres IP lub domena serwera
  • SERVER_USER → użytkownik SSH (np. deploy)
  • SERVER_SSH_KEY → klucz prywatny (z dopasowanym publicznym na serwerze)

To one pozwalają GitHubowi bezpiecznie połączyć się z Twoim serwerem i przesłać pliki.


6. Dodatkowe opcje – wdrożenia tylko dla określonych katalogów

Jeśli chcesz wdrażać tylko np. motyw lub wtyczkę, możesz zmodyfikować sekcję source::

source: "wp-content/themes/twoj-motyw"
target: "/var/www/wordpress-prod/wp-content/themes/twoj-motyw"

To pozwala wdrażać tylko wybrane komponenty, bez dotykania całej instalacji WordPressa.


7. Automatyczne czyszczenie cache i optymalizacja

Po wdrożeniu możesz automatycznie czyścić cache LiteSpeed, Redis lub Cloudflare.
Przykład — czyszczenie cache LiteSpeed po SSH:

- name: Clear LiteSpeed cache
  uses: appleboy/ssh-action@v1.0.3
  with:
    host: ${{ secrets.SERVER_HOST }}
    username: ${{ secrets.SERVER_USER }}
    key: ${{ secrets.SERVER_SSH_KEY }}
    script: |
      rm -rf /usr/local/lsws/cachedata/*

Lub wywołanie webhooka Cloudflare Purge:

- name: Purge Cloudflare cache
  run: curl -X POST "https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache" \
    -H "Authorization: Bearer ${{ secrets.CF_API_KEY }}" \
    -H "Content-Type: application/json" \
    --data '{"purge_everything":true}'

8. Testowanie wdrożenia

Po wykonaniu git push origin main
GitHub automatycznie uruchomi workflow i zdeployuje zmiany na serwer.

Status sprawdzisz w zakładce:
👉 Actions → Deploy WordPress via SSH

Jeśli wszystko poszło dobrze, zobaczysz zielony status „✅ success”.


9. Najczęstsze błędy

ProblemRozwiązanie
Brak dostępu SSHSprawdź uprawnienia i klucz publiczny na serwerze
Złe ścieżki w YAMLUpewnij się, że target istnieje na serwerze
Błąd Permission deniedUstaw odpowiednie prawa (chown -R www-data:www-data)
Workflow nie startujeSprawdź, czy branch to main (lub dopasuj do swojego)

10. Podsumowanie

Automatyzacja wdrażania WordPressa z GitHub Actions to krok w stronę profesjonalnego zarządzania projektami.
Dzięki temu:

  • możesz pracować zespołowo nad kodem,
  • każda zmiana jest wersjonowana i testowana,
  • wdrożenia są powtarzalne, szybkie i bezpieczne.

Połącz to z testami automatycznymi i backupem – a Twój proces CI/CD stanie się w pełni niezawodny.

KROK 1 Z 4

Z CZYM POTRZEBUJESZ POMOCY?