← Atpakaļ uz Emuārs

Emuārs

Docker WordPress: Kāpēc izolēti konteineri maina visu

Viens klients nevar sabojāt citu. Viena vietne nevar inficēt citu. Tāda ir PAGEnza mitināšanas platformas arhitektūra.

Tradicionālā WordPress mitināšana novieto vairākas vietnes vienā serverī. Tās koplieto PHP, koplieto piekļuvi failu sistēmai un bieži vien koplieto datubāzes serveri. Tas ir labi, līdz tas vairs nav labi — un tad, kad tas nav labi, tā ir nopietna problēma.

PAGEnza nodrošina katru WordPress vietni savā Docker konteinerī. Šajā rakstā paskaidrots, ko tas nozīmē praksē un kāpēc tas ir svarīgi aģentūrām, kas pārvalda vairākas klientu vietnes.

Kopīgās mitināšanas problēma

Tipiskā kopīgās mitināšanas plānā vai pat pamata VPS ar vairākām WordPress instalācijām:

Resursu strīdi: viena vietne, kas saņem satiksmes pieaugumu, palēnina visas pārējās vietnes serverī. Slikti optimizēts spraudnis vietnē A pasliktina veiktspēju vietnē B.

Drošības noplūde: ja viena WordPress instalācija tiek kompromitēta — caur neaizsargātu spraudni, vāju paroli vai novecojušu kodversiju — uzbrucējs, kas iegūst piekļuvi failu sistēmai, bieži vien var nolasīt citu vietņu failus tajā pašā serverī.

PHP versiju konflikti: vietnei A nepieciešams PHP 7.4 vecam spraudnim. Vietnei B nepieciešams PHP 8.2 jaunākam. Kopīgajā mitināšanā jūs izvēlaties vienu.

Datubāzes pakļaušana: kopīgie datubāzes serveri nozīmē, ka viena nepareizi konfigurēta lietotāja atļauja var atklāt citu vietņu datus.

Docker konteineri atrisina visas šīs problēmas infrastruktūras līmenī.

Kas īsti ir konteiners

Docker konteiners ir viegls, izolēts process, kam ir sava:

  • Failu sistēma (konteiners nevar redzēt failus ārpus savām robežām)

  • Tīkla steks (savs IP adrese, savi porti)

  • Procesu telpa (nevar redzēt citu konteineru procesus)

  • Resursu ierobežojumi (CPU un atmiņas ierobežojumi)

Tas koplieto resursdatora kodolu ar citiem konteineriem, bet viss virs kodola ir izolēts. Tā nav pilna virtuālā mašīna — tā startējas sekundēs, nevis minūtēs, un patērē nelielu daļu resursu.

WordPress gadījumā viens konteiners darbojas: Nginx, PHP-FPM un WordPress faili. Datubāze darbojas atsevišķā konteinerī, kas savienots tikai ar konkrēto WordPress konteineri.

Kā PAGEnza nodrošina vietni

Kad PAGEnza izveidojat jaunu klienta vietni, notiek šādi notikumi mazāk nekā 45 sekunžu laikā:

  1. Tiek palaists jauns Docker konteiners no bāzes WordPress attēla
  2. WordPress tiek konfigurēts ar jaunu datubāzi kopīgajā MariaDB instancē (ar izolētām akreditācijas datiem šim konteinerim)
  3. PAGEnza spraudnis tiek automātiski instalēts un aktivizēts
  4. Tiek konfigurēts Nginx virtuālais saimnieks ar klienta apakšdomēnu
  5. SSL tiek izsniegts caur Let's Encrypt
  6. Konteiners tiek reģistrēts apgrieztajā starpniekserverī ar pareiziem maršrutēšanas noteikumiem

Klients saņem URL, piemēram, clientname.pagenza.com, kas ir tiešraidē 45 sekunžu laikā pēc noklikšķināšanas uz "Izveidot vietni". Nav manuālas servera konfigurācijas, nav SSH, nav gaidīšanas perioda DNS (apakšdomēnam — pielāgotā domēna DNS izplatīšana ir atsevišķa).

Konteineru izolācija praksē

Atmiņas ierobežojumi: katram konteinerim ir konfigurējams atmiņas ierobežojums. Ja nekontrolēts spraudnis izraisa atmiņas pieaugumu vienā klienta vietnē, tas nevar patērēt citu konteineru piešķirto atmiņu. Vietne var palēnināties vai atgriezt 503 — bet tas neietekmēs citus klientus.

Failu sistēmas izolācija: klienta A WordPress faili ir pilnībā neredzami klienta B konteinerim. Kompromitētam spraudnim klienta A vietnē nav ceļa uz klienta B failiem.

Tīkla izolācija: konteineri sazinās tikai caur definētiem tīkla tiltiem. Klienta A datubāzes konteiners pieņem savienojumus tikai no klienta A WordPress konteinera — nevis no jebkura cita sistēmas konteinera.

PHP katram konteinerim: tā kā katrs konteiners darbojas ar savu PHP-FPM instanci, varat darbināt dažādas PHP versijas dažādiem klientiem. Klienta A mantotais spraudnis, kam nepieciešams PHP 7.4, darbojas labi līdzās klienta B modernajam stekam PHP 8.2.

Pielāgotās domēni

Noklusējuma iestatījums katram klientam piešķir *.pagenza.com apakšdomēnu. Klientiem, kuri vēlas savu domēnu, process ir šāds:

  1. Klients norāda savu domēnu A ierakstu uz PAGEnza servera IP
  2. PAGEnza informācijas panelī ievadāt pielāgoto domēnu
  3. Apgrieztā starpniekservera konfigurācija tiek automātiski atjaunināta
  4. SSL tiek izsniegts pielāgotajam domēnam caur Let's Encrypt

WordPress siteurl un home opcijas tiek atjauninātas, lai tās atbilstu. No klienta viedokļa viņu vietne vienkārši darbojas viņu domēnā — bez pāradresācijas, bez apmeklētājiem redzama apakšdomēna.

Ko tas nozīmē aģentūrām

Praktiskais ieguvums aģentūrām, kas vada vairākas klientu vietnes:

Ieslēgšanas ātrums: jauna klienta vietnes nodrošināšana aizņem mazāk nekā minūti. Nav servera iestatīšanas, nav cPanel, nav manuālas WordPress instalācijas.

Klientu atdalīšana: katra klienta vietne ir patiesi izolēta. Klients, kurš instalē problemātisku spraudni, ietekmē tikai savu vietni.

Mērogojamība: jauna klienta pievienošana neprasa jauna servera nodrošināšanu. Konteineru infrastruktūra mērogojas līdz resursdatora jaudai, un jaunas jaudas pievienošana ir jautājums par vairāku resursdatora mezglu pievienošanu.

Katastrofu atjaunošana: tā kā katra vietne ir konteinerizēta, dublēšana un atjaunošana darbojas konteinera līmenī. Viena klienta vietnes atjaunošana neietekmē nevienu citu klientu.

Kompromiss ir tāds, ka konteineru mitināšana izmaksā vairāk par vietni nekā kopīgā mitināšana. Bet aģentūrām, kurām vietnes uzticamība un klientu atdalīšana ir neapstrīdama, ekonomika ir izdevīga — jo īpaši, ja tiek ņemti vērā nodrošināšanas laika ietaupījumi.