Tinklaraštis
Docker WordPress: Kodėl izoliuoti konteineriai keičia viską
Vienas klientas negali sugadinti kito. Viena svetainė negali užkrėsti kitos. Tai yra PAGEnza platformos architektūra.
Tradicinis WordPress hostingas apima kelias svetaines viename serveryje. Jos dalijasi PHP, failų sistemos prieiga ir dažnai duomenų bazės serveriu. Tai gerai, kol tai nesukelia problemų – o kai taip nutinka, tai tampa rimta problema.
PAGEnza kiekvieną WordPress svetainę priskiria savo Docker konteineriui. Šiame įraše paaiškinama, ką tai reiškia praktiškai ir kodėl tai svarbu agentūroms, valdančioms kelias klientų svetaines.
Bendro hostingo problema
Įprastame bendro hostingo plane arba netgi pagrindiniame VPS su keliais WordPress įdiegimais:
Resursų varžymasis: viena svetainė, patirianti didelį srautą, sulėtina visas kitas serverio svetaines. Blogai optimizuotas A svetainės papildinys pablogina B svetainės našumą.
Saugumo pralaidumas: jei vienas WordPress įdiegimas yra pažeidžiamas – per pažeidžiamą papildinį, silpną slaptažodį ar pasenusią pagrindinę versiją – užpuolikas, įgijęs failų sistemos prieigą, dažnai gali skaityti kitų to paties serverio svetainių failus.
PHP versijų konfliktai: A svetainei reikalingas PHP 7.4 senam papildiniui. B svetainei reikalingas PHP 8.2 naujesniam. Bendrame hostinge pasirenkate vieną.
Duomenų bazės pažeidžiamumas: bendri duomenų bazės serveriai reiškia, kad vienas netinkamai sukonfigūruotas vartotojo leidimas gali atskleisti kitų svetainių duomenis.
Docker konteineriai sprendžia visas šias problemas infrastruktūros lygiu.
Kas iš tikrųjų yra konteineris
Docker konteineris yra lengvas, izoliuotas procesas, turintis savo:
- Failų sistemą (konteineris negali matyti failų už savo ribų)
- Tinklo krūvį (savo IP adresą, savo prievadus)
- Procesų erdvę (negali matyti kitų konteinerių procesų)
- Resursų apribojimus (CPU ir atminties ribas)
Jis dalijasi pagrindinio kompiuterio branduoliu su kitais konteineriais, tačiau viskas virš branduolio yra izoliuota. Tai nėra pilna virtuali mašina – ji paleidžiama per kelias sekundes, o ne minutes, ir naudoja tik dalį resursų.
WordPress atveju, vienas konteineris paleidžia: Nginx, PHP-FPM ir WordPress failus. Duomenų bazė veikia atskirame konteineryje, prijungtame tik prie to konkretaus WordPress konteinerio.
Kaip PAGEnza priskiria svetainę
Kai PAGEnza sukuriate naują kliento svetainę, štai kas nutinka per mažiau nei 45 sekundes:
- Naujas Docker konteineris paleidžiamas iš pagrindinio WordPress vaizdo.
- WordPress konfigūruojamas su nauja duomenų baze bendroje MariaDB instancijoje (izoliuota pagal to konteinerio kredencialus).
- PAGEnza papildinys automatiškai įdiegtas ir aktyvuotas.
- Nginx virtualus pagrindinis kompiuteris sukonfigūruojamas su kliento subdomenu.
- SSL išduodamas per Let's Encrypt.
- Konteineris registruojamas atvirkštiniame tarpiniame serveryje su tinkamomis maršrutizavimo taisyklėmis.
Klientas gauna URL, pvz., clientname.pagenza.com, kuris veikia per 45 sekundes po "Sukurti svetainę" paspaudimo. Nėra rankinės serverio konfigūracijos, SSH ar DNS laukimo laikotarpio (subdomeno atveju – pasirinktinio domeno DNS propagavimas yra atskiras).
Konteinerio izoliacija praktiškai
Atminties apribojimai: kiekvienas konteineris turi konfigūruojamą atminties ribą. Jei veikiantis papildinys sukelia atminties šuolį vienoje kliento svetainėje, jis negali sunaudoti kitų konteinerių atminties. Svetainė gali sulėtėti arba grąžinti 503 – bet tai neturės įtakos kitiems klientams.
Failų sistemos izoliacija: A kliento WordPress failai yra visiškai nematomi B kliento konteineriui. Pažeistas A kliento svetainės papildinys neturi prieigos prie B kliento failų.
Tinklo izoliacija: konteineriai bendrauja tik per apibrėžtus tinklo tiltus. A kliento duomenų bazės konteineris priima ryšius tik iš A kliento WordPress konteinerio – ne iš jokio kito sistemos konteinerio.
PHP vienam konteineriui: kadangi kiekvienas konteineris paleidžia savo PHP-FPM instanciją, galite naudoti skirtingas PHP versijas skirtingiems klientams. A kliento senas papildinys, kuriam reikalingas PHP 7.4, veikia kartu su B kliento modernia sistema su PHP 8.2.
Pasirinktiniai domenai
Numatytasis nustatymas suteikia kiekvienam klientui *.pagenza.com subdomenu. Klientams, norintiems savo domeno, procesas yra toks:
- Klientas nukreipia savo domeno A įrašą į PAGEnza serverio IP.
- PAGEnza prietaisų skydelyje įvedate pasirinktinį domeną.
- Atvirkštinio tarpinio serverio konfigūracija atnaujinama automatiškai.
- SSL išduodamas pasirinktiniam domenui per Let's Encrypt.
WordPress siteurl ir home parinktys atnaujinamos, kad atitiktų. Kliento požiūriu, jų svetainė tiesiog veikia jų domene – be peradresavimo, be subdomeno, matomo lankytojams.
Ką tai reiškia agentūroms
Praktinė nauda agentūroms, valdančioms kelias klientų svetaines:
Įjungimo greitis: naujos kliento svetainės paruošimas trunka mažiau nei minutę. Nėra serverio sąrankos, cPanel ar rankinio WordPress įdiegimo.
Klientų atskyrimas: kiekvienos kliento svetainė yra tikrai izoliuota. Klientas, įdiegiantis problematišką papildinį, paveikia tik savo svetainę.
Mastelis: naujo kliento pridėjimas nereikalauja naujo serverio paruošimo. Konteinerio infrastruktūra prisitaiko prie pagrindinio kompiuterio pajėgumų, o papildomų pajėgumų pridėjimas yra tiesiog daugiau pagrindinių mazgų pridėjimas.
Katastrofų atkūrimas: kadangi kiekviena svetainė yra konteinerizuota, atsarginės kopijos ir atkūrimas veikia konteinerio lygiu. Vienos kliento svetainės atkūrimas neturi įtakos kitiems klientams.
Kompromisas yra tas, kad konteinerio hostingas kainuoja brangiau už svetainę nei bendras hostingas. Tačiau agentūroms, kurioms svetainės patikimumas ir klientų atskyrimas yra privalomi, ekonomika pasiteisina – ypač kai įskaitomi paruošimo laiko sutaupymai.