Blog
Docker za WordPress: Zašto izolirani kontejneri mijenjaju sve
Jedan klijent ne može srušiti drugog. Jedna web stranica ne može zaraziti drugu. Ovo je arhitektura PAGEnza-ine hosting platforme.
Tradicionalni WordPress hosting stavlja više web stranica na jedan server. Dijele PHP, dijele pristup datotečnom sustavu, a često dijele i poslužitelj baze podataka. To je u redu dok nije - a kad nije, to je ozbiljan problem.
PAGEnza svakoj WordPress web stranici dodjeljuje vlastiti Docker kontejner. Ovaj post objašnjava što to znači u praksi i zašto je važno za agencije koje upravljaju s više klijentskih web stranica.
Problem dijeljenog hostinga
Na tipičnom planu dijeljenog hostinga ili čak osnovnom VPS-u s više WordPress instalacija:
Konkurencija za resurse: jedna web stranica koja doživi skok prometa usporava sve ostale web stranice na serveru. Loše optimiziran dodatak na web stranici A degradira performanse na web stranici B.
Sigurnosno curenje: ako jedna WordPress instalacija bude ugrožena - putem ranjivog dodatka, slabe lozinke ili zastarjele osnovne verzije - napadač koji dobije pristup datotečnom sustavu često može čitati datoteke s drugih web stranica na istom serveru.
Sukobi verzija PHP-a: web stranica A treba PHP 7.4 za stari dodatak. Web stranica B treba PHP 8.2 za noviji. Na dijeljenom hostingu, odaberete jedan.
Izloženost baze podataka: dijeljeni poslužitelji baza podataka znače da jedna pogrešno konfigurirana dozvola korisnika može izložiti podatke drugih web stranica.
Docker kontejneri rješavaju sve ovo na razini infrastrukture.
Što je zapravo kontejner
Docker kontejner je lagan, izoliran proces koji ima vlastiti:
- Datotečni sustav (kontejner ne vidi datoteke izvan svojih granica)
- Mrežni sklop (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. Nije potpuna virtualna mašina - pokreće se za sekunde, ne minute, i koristi samo djelić resursa.
Za WordPress, jedan kontejner pokreće: Nginx, PHP-FPM i WordPress datoteke. Baza podataka radi u zasebnom kontejneru, povezanom samo s tim specifičnim WordPress kontejnerom.
Kako PAGEnza dodjeljuje web stranicu
Kada stvorite novu klijentsku web stranicu u PAGEnzi, evo što se dogodi za manje od 45 sekundi:
- Novi Docker kontejner se pokreće iz osnovne WordPress slike
- WordPress se konfigurira sa svježom bazom podataka na dijeljenoj MariaDB instanci (izoliranoj na vjerodajnice tog kontejnera)
- PAGEnza dodatak se automatski instalira i aktivira
- Nginx virtualni host se konfigurira s poddomenskim klijentom
- SSL se izdaje putem Let's Encrypt
- Kontejner se registrira u reverznom proxyju s ispravnim pravilima usmjeravanja
Klijent dobiva URL poput clientname.pagenza.com koji je aktivan u roku od 45 sekundi od klika na "Stvori web stranicu". Nema ručne konfiguracije poslužitelja, nema SSH-a, nema čekanja na DNS (za poddomenu - DNS propagacija prilagođene domene je odvojena).
Izolacija kontejnera u praksi
Ograničenja memorije: svaki kontejner ima podesivo ograničenje memorije. Ako nepredviđeni dodatak uzrokuje skok memorije na jednoj klijentskoj web stranici, ne može potrošiti memoriju dodijeljenu drugim kontejnerima. Web stranica se može usporiti ili vratiti 503 - ali to neće utjecati na druge klijente.
Izolacija datotečnog sustava: WordPress datoteke klijenta A potpuno su nevidljive kontejneru klijenta B. Ugroženi dodatak na web stranici klijenta A nema put do datoteka klijenta B.
Mrežna izolacija: kontejneri komuniciraju samo putem definiranih mrežnih mostova. Kontejner baze podataka za klijenta A prihvaća veze samo od WordPress kontejnera klijenta A - ne od bilo kojeg drugog kontejnera na sustavu.
PHP po kontejneru: budući da svaki kontejner pokreće vlastitu PHP-FPM instancu, možete pokretati različite verzije PHP-a za različite klijente. Naslijeđeni dodatak klijenta A koji treba PHP 7.4 radi dobro uz moderni sklop klijenta B na PHP 8.2.
Prilagođene domene
Zadana postavka daje svakom klijentu poddomenu *.pagenza.com. Za klijente koji žele vlastitu domenu, postupak je sljedeći:
- Klijent usmjerava A zapis svoje domene na IP adresu PAGEnza poslužitelja
- U PAGEnza nadzornoj ploči unosite prilagođenu domenu
- Konfiguracija reverznog proxyja se automatski ažurira
- SSL se izdaje za prilagođenu domenu putem Let's Encrypt
WordPress opcije siteurl i home se ažuriraju kako bi odgovarale. S klijentove točke gledišta, njihova web stranica jednostavno radi na njihovoj domeni - bez preusmjeravanja, bez vidljive poddomene posjetiteljima.
Što to znači za agencije
Praktična korist za agencije koje vode više klijentskih web stranica:
Brzina uvođenja: dodjeljivanje nove klijentske web stranice traje manje od minute. Nema postavljanja poslužitelja, nema cPanela, nema ručne WordPress instalacije.
Odvojenost klijenata: svaka klijentska web stranica je istinski izolirana. Klijent koji instalira problematičan dodatak utječe samo na vlastitu web stranicu.
Skalabilnost: dodavanje novog klijenta ne zahtijeva dodjeljivanje novog poslužitelja. Kontejnerska infrastruktura skalira se prema kapacitetu hosta, a dodavanje više kapaciteta je pitanje dodavanja više host čvorova.
Oporavak od katastrofe: budući da je svaka web stranica u kontejneru, sigurnosno kopiranje i vraćanje radi na razini kontejnera. Vraćanje jedne klijentske web stranice ne utječe na druge klijente.
Nedostatak je što kontejnerski hosting košta više po web stranici nego dijeljeni hosting. Ali za agencije gdje pouzdanost web stranice i odvojenost klijenata nisu pregovarački, ekonomija se isplati - posebno kada se uračunaju uštede u vremenu dodjeljivanja.