← Wróć do sekcji Blog

Blog

Docker dla WordPress: Dlaczego izolowane kontenery zmieniają wszystko

Jeden klient nie może zepsuć drugiego. Jedna strona nie może zainfekować drugiej. Taka jest architektura platformy hostingowej PAGEnza.

Tradycyjny hosting WordPress umieszcza wiele stron na jednym serwerze. Dzielą one PHP, dostęp do systemu plików, a często także serwer baz danych. Jest to w porządku, dopóki nie przestaje być – a kiedy przestaje, stanowi to poważny problem.

PAGEnza udostępnia każdą stronę WordPress w osobnym kontenerze Docker. Ten artykuł wyjaśnia, co to oznacza w praktyce i dlaczego ma znaczenie dla agencji zarządzających wieloma stronami klientów.

Problem hostingu współdzielonego

W typowym planie hostingu współdzielonego lub nawet podstawowym VPS z wieloma instalacjami WordPress:

Rywalizacja o zasoby: jedna strona z gwałtownym wzrostem ruchu spowalnia wszystkie inne strony na serwerze. Źle zoptymalizowana wtyczka na stronie A pogarsza wydajność strony B.

Rozprzestrzenianie się luk bezpieczeństwa: jeśli jedna instalacja WordPress zostanie skompromitowana – poprzez podatną wtyczkę, słabe hasło lub nieaktualną wersję rdzenia – atakujący, który uzyska dostęp do systemu plików, często może odczytać pliki z innych stron na tym samym serwerze.

Konflikty wersji PHP: strona A potrzebuje PHP 7.4 dla starej wtyczki. Strona B potrzebuje PHP 8.2 dla nowszej. Na hostingu współdzielonym wybierasz jedną.

Narażenie bazy danych: współdzielone serwery baz danych oznaczają, że jedno błędnie skonfigurowane uprawnienie użytkownika może ujawnić dane innych stron.

Kontenery Docker rozwiązują wszystkie te problemy na poziomie infrastruktury.

Czym właściwie jest kontener

Kontener Docker to lekki, izolowany proces, który ma swój własny:

  • System plików (kontener nie widzi plików spoza swoich granic)
  • Stos sieciowy (własny adres IP, własne porty)
  • Przestrzeń procesową (nie widzi procesów innych kontenerów)
  • Limity zasobów (ograniczenia CPU i pamięci)

Dzieli jądro hosta z innymi kontenerami, ale wszystko powyżej jądra jest izolowane. Nie jest to pełna maszyna wirtualna – uruchamia się w ciągu sekund, a nie minut, i zużywa ułamek zasobów.

Dla WordPressa pojedynczy kontener uruchamia: Nginx, PHP-FPM i pliki WordPress. Baza danych działa w osobnym kontenerze, połączonym tylko z tym konkretnym kontenerem WordPress.

Jak PAGEnza udostępnia stronę

Kiedy tworzysz nową stronę klienta w PAGEnza, oto co się dzieje w mniej niż 45 sekund:

  1. Nowy kontener Docker jest uruchamiany z bazowego obrazu WordPress
  2. WordPress jest konfigurowany z nową bazą danych na współdzielonej instancji MariaDB (izolowanej do poświadczeń tego kontenera)
  3. Wtyczka PAGEnza jest automatycznie instalowana i aktywowana
  4. Wirtualny host Nginx jest konfigurowany z subdomeną klienta
  5. SSL jest wydawany przez Let's Encrypt
  6. Kontener jest rejestrowany w reverse proxy z odpowiednimi regułami routingu

Klient otrzymuje adres URL w stylu nazwa-klienta.pagenza.com, który jest aktywny w ciągu 45 sekund od kliknięcia „Utwórz stronę”. Brak ręcznej konfiguracji serwera, brak SSH, brak oczekiwania na DNS (dla subdomeny – propagacja DNS dla niestandardowej domeny jest osobną kwestią).

Izolacja kontenerów w praktyce

Limity pamięci: każdy kontener ma konfigurowalny limit pamięci. Jeśli wadliwa wtyczka spowoduje skok zużycia pamięci na stronie jednego klienta, nie może ona zużyć pamięci przydzielonej innym kontenerom. Strona może zwolnić lub zwrócić błąd 503 – ale nie wpłynie to na innych klientów.

Izolacja systemu plików: pliki WordPress klienta A są całkowicie niewidoczne dla kontenera klienta B. Skompromitowana wtyczka na stronie klienta A nie ma dostępu do plików klienta B.

Izolacja sieciowa: kontenery komunikują się tylko poprzez zdefiniowane mosty sieciowe. Kontener bazy danych klienta A akceptuje połączenia tylko z kontenera WordPress klienta A – nie z żadnego innego kontenera w systemie.

PHP na kontener: ponieważ każdy kontener uruchamia własną instancję PHP-FPM, można uruchamiać różne wersje PHP dla różnych klientów. Starsza wtyczka klienta A wymagająca PHP 7.4 działa bez problemu obok nowoczesnego stosu klienta B na PHP 8.2.

Niestandardowe domeny

Domyślna konfiguracja zapewnia każdemu klientowi subdomenę *.pagenza.com. Dla klientów, którzy chcą mieć własną domenę, proces wygląda następująco:

  1. Klient kieruje rekord A swojej domeny na adres IP serwera PAGEnza
  2. W panelu PAGEnza wprowadzasz niestandardową domenę
  3. Konfiguracja reverse proxy jest automatycznie aktualizowana
  4. SSL jest wydawany dla niestandardowej domeny przez Let's Encrypt

Opcje WordPress siteurl i home są aktualizowane, aby pasowały. Z perspektywy klienta jego strona po prostu działa pod jego domeną – bez przekierowania, bez subdomeny widocznej dla odwiedzających.

Co to oznacza dla agencji

Praktyczna korzyść dla agencji prowadzących wiele stron klientów:

Szybkość onboardingu: udostępnienie nowej strony klienta zajmuje mniej niż minutę. Brak konfiguracji serwera, brak cPanel, brak ręcznej instalacji WordPress.

Separacja klientów: strona każdego klienta jest rzeczywiście izolowana. Klient, który instaluje problematyczną wtyczkę, wpływa tylko na swoją stronę.

Skalowalność: dodanie nowego klienta nie wymaga udostępniania nowego serwera. Infrastruktura kontenerowa skaluje się do pojemności hosta, a dodanie większej pojemności polega na dodaniu kolejnych węzłów hosta.

Odzyskiwanie po awarii: ponieważ każda strona jest skonteneryzowana, tworzenie kopii zapasowych i przywracanie działa na poziomie kontenera. Przywrócenie strony pojedynczego klienta nie wpływa na żadnych innych klientów.

Kompromisem jest to, że hosting kontenerowy jest droższy za stronę niż hosting współdzielony. Ale dla agencji, dla których niezawodność strony i separacja klientów są niepodlegające negocjacjom, ekonomia się zgadza – zwłaszcza gdy uwzględni się oszczędności czasu na udostępnianiu.