Blog
Docker za WordPress: Zašto izolirani kontejneri mijenjaju sve
Jedan klijent ne može uništiti drugog. Jedna stranica ne može zaraziti drugu. Ovo je arhitektura PAGEnza-ine platforme za hosting.
Tradicionalni WordPress hosting postavlja više stranica na jedan server. Dijele PHP, dijele pristup sistemu datoteka, a često dijele i server baze podataka. Ovo je u redu dok nije – a kada nije, to je ozbiljan problem.
PAGEnza obezbjeđuje svaku WordPress stranicu u vlastitom Docker kontejneru. Ovaj post objašnjava šta to znači u praksi i zašto je važno za agencije koje upravljaju sa više klijentskih stranica.
Problem dijeljenog hostinga
Na tipičnom dijeljenom hosting planu ili čak osnovnom VPS-u sa više WordPress instalacija:
Konkurencija za resurse: jedna stranica koja doživi skok prometa usporava svaku drugu stranicu na serveru. Loše optimizovan dodatak na stranici A degradira performanse na stranici B.
Sigurnosno curenje: ako jedna WordPress instalacija bude kompromitovana – putem ranjivog dodatka, slabe lozinke ili zastarjele osnovne verzije – napadač koji dobije pristup sistemu datoteka često može čitati datoteke s drugih stranica na istom serveru.
Sukobi PHP verzija: stranica A treba PHP 7.4 za stari dodatak. Stranica B treba PHP 8.2 za noviji. Na dijeljenom hostingu, birate jedan.
Izloženost baze podataka: dijeljeni serveri baze podataka znače da jedna pogrešno konfigurisana dozvola korisnika može izložiti podatke drugih stranica.
Docker kontejneri rješavaju sve ovo na nivou infrastrukture.
Šta je zapravo kontejner
Docker kontejner je lagan, izolovan proces koji ima svoj:
- Sistem datoteka (kontejner ne vidi datoteke izvan svojih granica)
- Mrežni stek (vlastitu IP adresu, vlastite portove)
- Prostor procesa (ne vidi procese drugih kontejnera)
- Ograničenja resursa (ograničenja CPU-a i memorije)
On dijeli kernel hosta s drugim kontejnerima, ali sve iznad kernela je izolirano. To nije potpuna virtuelna mašina – pokreće se za sekunde, ne minute, i koristi djelić resursa.
Za WordPress, jedan kontejner pokreće: Nginx, PHP-FPM i WordPress datoteke. Baza podataka se pokreće u zasebnom kontejneru, povezanom samo s tim specifičnim WordPress kontejnerom.
Kako PAGEnza obezbjeđuje stranicu
Kada kreirate novu klijentsku stranicu u PAGEnza, evo šta se dešava za manje od 45 sekundi:
- Novi Docker kontejner se pokreće iz osnovne WordPress slike
- WordPress se konfiguriše sa novom bazom podataka na dijeljenoj MariaDB instanci (izoliranoj na akreditive tog kontejnera)
- PAGEnza dodatak se automatski instalira i aktivira
- Nginx virtuelni host se konfiguriše s klijentovim poddomenskim imenom
- SSL se izdaje putem Let's Encrypt
- Kontejner se registruje u reverznom proxy-u s ispravnim pravilima rutiranja
Klijent dobija URL poput clientname.pagenza.com koji je aktivan u roku od 45 sekundi od klika na "Kreiraj stranicu." Nema ručne konfiguracije servera, nema SSH-a, nema čekanja na DNS (za poddomensko ime – DNS propagacija prilagođenog domena je odvojena).
Izolacija kontejnera u praksi
Ograničenja memorije: svaki kontejner ima podesivo ograničenje memorije. Ako dodatak koji izmiče kontroli uzrokuje skok memorije na jednoj klijentskoj stranici, ne može potrošiti memoriju dodijeljenu drugim kontejnerima. Stranica se može usporiti ili vratiti 503 grešku – ali to neće uticati na druge klijente.
Izolacija sistema datoteka: WordPress datoteke klijenta A su potpuno nevidljive kontejneru klijenta B. Kompromitovani dodatak na stranici klijenta A nema put do datoteka klijenta B.
Mrežna izolacija: kontejneri komuniciraju samo putem definisanih mrežnih mostova. Kontejner baze podataka za klijenta A prihvata veze samo od WordPress kontejnera klijenta A – ne od bilo kojeg drugog kontejnera na sistemu.
PHP po kontejneru: jer svaki kontejner pokreće vlastitu PHP-FPM instancu, možete pokretati različite PHP verzije za različite klijente. Naslijeđeni dodatak klijenta A kojem treba PHP 7.4 radi dobro uz moderni stek klijenta B na PHP 8.2.
Prilagođeni domeni
Podrazumevana postavka daje svakom klijentu poddomensko ime *.pagenza.com. Za klijente koji žele vlastiti domen, proces je:
- Klijent usmjerava A zapis svog domena na IP adresu PAGEnza servera
- U PAGEnza kontrolnoj tabli, unosite prilagođeni domen
- Konfiguracija reverznom proxy-a se automatski ažurira
- SSL se izdaje za prilagođeni domen putem Let's Encrypt
WordPress opcije siteurl i home se ažuriraju kako bi odgovarale. S klijentove tačke gledišta, njihova stranica jednostavno radi na njihovom domenu – bez preusmjeravanja, bez poddomenskog imena vidljivog posjetiocima.
Šta ovo znači za agencije
Praktična korist za agencije koje vode više klijentskih stranica:
Brzina uvođenja: obezbjeđivanje nove klijentske stranice traje manje od minute. Nema podešavanja servera, nema cPanela, nema ručne WordPress instalacije.
Razdvajanje klijenata: svaka klijentska stranica je istinski izolirana. Klijent koji instalira problematičan dodatak utiče samo na vlastitu stranicu.
Skalabilnost: dodavanje novog klijenta ne zahtijeva obezbjeđivanje novog servera. Kontejnerska infrastruktura se skalira prema kapacitetu hosta, a dodavanje više kapaciteta je pitanje dodavanja više host čvorova.
Oporavak od katastrofe: jer je svaka stranica kontejnerizovana, rezervna kopija i vraćanje rade na nivou kontejnera. Vraćanje jedne klijentske stranice ne utiče na bilo koje druge klijente.
Kompromis je da kontejnerski hosting košta više po stranici nego dijeljeni hosting. Ali za agencije gdje pouzdanost stranice i razdvajanje klijenata nisu pregovarački, ekonomija se isplati – posebno kada se uzmu u obzir uštede u vremenu obezbjeđivanja.