Блог
Docker za WordPress: Zašto izolovani kontejneri menjaju sve
Jedan klijent ne može da sruši drugog. Jedan sajt ne može da zarazi drugog. Ovo je arhitektura PAGEnza hosting platforme.
Tradicionalni WordPress hosting postavlja više sajtova na jedan server. Oni dele PHP, dele pristup fajl sistemu, a često dele i serverski baz podataka. Ovo je u redu dok ne postane problem — a kada postane, to je ozbiljan problem.
PAGEnza obezbeđuje svaki WordPress sajt u sopstvenom Docker kontejneru. Ovaj post objašnjava šta to znači u praksi i zašto je važno za agencije koje upravljaju sajtovima više klijenata.
Problem deljenog hostinga
Na tipičnom deljenom hosting planu ili čak osnovnom VPS-u sa više WordPress instalacija:
Konkurencija za resurse: jedan sajt koji doživi nagli porast saobraćaja usporava sve druge sajtove na serveru. Loše optimizovan dodatak na sajtu A degradira performanse na sajtu B.
Bezbednosno curenje: ako jedna WordPress instalacija bude kompromitovana — putem ranjivog dodatka, slabe lozinke ili zastarele verzije kernela — napadač koji dobije pristup fajl sistemu često može da čita fajlove sa drugih sajtova na istom serveru.
Konflikti PHP verzija: sajtu A je potreban PHP 7.4 za stari dodatak. Sajtu B je potreban PHP 8.2 za noviji. Na deljenom hostingu, birate jedan.
Izloženost baze podataka: deljeni serveri baza podataka znače da jedna pogrešno konfigurisana dozvola korisnika može da izloži podatke drugih sajtova.
Docker kontejneri rešavaju sve ovo na nivou infrastrukture.
Šta je zapravo kontejner
Docker kontejner je lagan, izolovan proces koji ima svoj:
- Fajl sistem (kontejner ne vidi fajlove izvan svojih granica)
- Mrežni stek (sopstvenu IP adresu, sopstvene portove)
- Prostor procesa (ne vidi procese drugih kontejnera)
- Ograničenja resursa (ograničenja CPU-a i memorije)
On deli kernel hosta sa drugim kontejnerima, ali je sve iznad kernela izolovano. To nije potpuna virtuelna mašina — pokreće se za sekunde, ne za minute, i koristi samo deo resursa.
Za WordPress, jedan kontejner pokreće: Nginx, PHP-FPM i WordPress fajlove. Baza podataka se pokreće u odvojenom kontejneru, povezanom samo sa tim specifičnim WordPress kontejnerom.
Kako PAGEnza obezbeđuje sajt
Kada kreirate novi sajt klijenta u PAGEnza, evo šta se dešava za manje od 45 sekundi:
- Novi Docker kontejner se podiže iz osnovne WordPress slike
- WordPress se konfiguriše sa novom bazom podataka na deljenoj MariaDB instanci (izolovanoj na akreditive tog kontejnera)
- PAGEnza dodatak se automatski instalira i aktivira
- Nginx virtuelni host se konfiguriše sa poddomenom klijenta
- SSL se izdaje preko Let's Encrypt-a
- Kontejner se registruje u reverznom proksiju sa ispravnim pravilima rutiranja
Klijent dobija URL poput clientname.pagenza.com koji je aktivan u roku od 45 sekundi od klika na "Kreiraj sajt". Nema ručne konfiguracije servera, nema SSH-a, nema čekanja na DNS (za poddomenu — DNS propagacija za prilagođeni domen je odvojena).
Izolacija kontejnera u praksi
Ograničenja memorije: svaki kontejner ima podesivo ograničenje memorije. Ako neobuzdani dodatak izazove skok memorije na sajtu jednog klijenta, on ne može da potroši memoriju dodeljenu drugim kontejnerima. Sajt može da se uspori ili vrati 503 grešku — ali to neće uticati na druge klijente.
Izolacija fajl sistema: WordPress fajlovi klijenta A su potpuno nevidljivi kontejneru klijenta B. Kompromitovani dodatak na sajtu klijenta A nema put do fajlova klijenta B.
Mrežna izolacija: kontejneri komuniciraju samo preko definisanih mrežnih mostova. Kontejner baze podataka za klijenta A prihvata konekcije samo od WordPress kontejnera klijenta A — ne od bilo kog drugog kontejnera na sistemu.
PHP po kontejneru: pošto svaki kontejner pokreće sopstvenu PHP-FPM instancu, možete pokretati različite PHP verzije za različite klijente. Nasleđeni dodatak klijenta A kojem je potreban PHP 7.4 radi bez problema pored modernog steka PHP 8.2 klijenta B.
Prilagođeni domeni
Podrazumevani set daje svakom klijentu *.pagenza.com poddomenu. Za klijente koji žele sopstveni domen, proces je sledeći:
- Klijent usmerava A zapis svog domena na IP adresu PAGEnza servera
- U PAGEnza kontrolnoj tabli, unosite prilagođeni domen
- Konfiguracija reverznog proksija se automatski ažurira
- SSL se izdaje za prilagođeni domen preko Let's Encrypt-a
WordPress opcije siteurl i home se ažuriraju da odgovaraju. Sa stanovišta klijenta, njihov sajt jednostavno radi na njihovom domenu — bez preusmeravanja, bez poddomena vidljivog posetiocima.
Šta ovo znači za agencije
Praktična korist za agencije koje vode više sajtova klijenata:
Brzina uvođenja: obezbeđivanje novog sajta klijenta traje manje od minuta. Nema podešavanja servera, nema cPanela, nema ručne WordPress instalacije.
Razdvajanje klijenata: sajt svakog klijenta je istinski izolovan. Klijent koji instalira problematičan dodatak utiče samo na sopstveni sajt.
Skalabilnost: dodavanje novog klijenta ne zahteva obezbeđivanje novog servera. Kontejnerska infrastruktura se skalira do kapaciteta hosta, a dodavanje više kapaciteta je pitanje dodavanja više host čvorova.
Oporavak od katastrofe: pošto je svaki sajt kontejnerizovan, rezervna kopija i vraćanje funkcionišu na nivou kontejnera. Vraćanje sajta jednog klijenta ne utiče na bilo koje druge klijente.
Kompromis je da kontejnerski hosting košta više po sajtu nego deljeni hosting. Ali za agencije gde su pouzdanost sajta i razdvajanje klijenata nepregovarački, ekonomija se isplati — posebno kada se uzmu u obzir uštede u vremenu obezbeđivanja.