Kā izvēlēties pareizo hostingu tīmekļa lietojumprogrammai
Hostinga vide ir pamats, uz kura viss pārējais balstās. Nekāda koda optimizācija vai kešošana nekompensē nepietiekami jaudīgu vai nepareizi konfigurētu serveri. Tomēr hostings bieži ir kaut kas, par ko domā pēdējo. Uzņēmumi izvēlas lētāko pieejamo variantu un brīnās, kāpēc lietojumprogramma ir lēna, neuzticama vai pastāvīgi pakļauta uzbrukumiem. Lūk, kas patiesībā ir svarīgi, pieņemot šo lēmumu.
Hostinga veidu salīdzinājums
Shared hosting (5-20 EUR/mēnesī)
Vairākas vietnes koplieto viena servera resursus: CPU, RAM, disku. Piemērots vienkāršām vizītkaršu vietnēm un personīgajiem blogiem ar nelielu, paredzamu apmeklētību. Nav ieteicams e-komercijai, tīmekļa lietojumprogrammām vai jebkurai vietnei, kur veiktspēja un uzticamība ir svarīga. Pamata problēma nav tikai veiktspēja: ja blakus esošā vietne uzvedas nepareizi, tā pasliktina jūsu atbildes laikus, un jūs to nevarat ietekmēt.
VPS (20-100 EUR/mēnesī)
Virtualizēts serveris ar dedikētiem resursiem: garantēti CPU kodoli, RAM un krātuve. Ir root piekļuve un pilna kontrole pār programmatūras steku. Lielākajai daļai mazo un vidējo tīmekļa lietojumprogrammu tas ir pareizā izvēle. Lielāko daļu klientu projektu darbinām uz Contabo VPS instancēm (4 vCPU, 8 GB RAM) ar Nginx + PHP 8.3-FPM, kas bez resursu spiediena apkalpo e-komercijas veikalus līdz aptuveni 50 000 apmeklētājiem mēnesī. Kompromiss: atbildība par servera administrēšanu un drošības atjauninājumiem paliek uz jūsu pleciem, vai jāmaksā papildus par pārvaldītu pakalpojumu.
Dedikēts serveris (100-500+ EUR/mēnesī)
Vesels fizisks serveris, kas rezervēts tikai jūsu lietojumprogrammai. Maksimāla veiktspēja un kontrole, maksimāla atbildība. Atmaksājas augstas apmeklētības lietojumprogrammām, slodzēm ar stingrām atbilstības prasībām (noteikti veselības aprūpes vai finanšu dati) vai lietojumprogrammām, kurām vajadzīga stabila aparatūras veiktspēja bez mainīguma, ko var radīt virtualizētas vides zem lielas resursdatora slodzes.
Cloud hosting (mainīga cena)
Tādi pakalpojumi kā AWS, Hetzner Cloud un DigitalOcean nodrošina instances pēc pieprasījuma, kas mērogojas atbilstoši apmeklētībai. Maksājat par to, ko izmantojat. Cloud hosting ir pamatots lietojumprogrammām ar neprognozējamiem apmeklētāju uzplūdiem vai tādām, kurām vajag ātri mērogot. Galvenais mīnuss ir izmaksu sarežģītība: negaidīta apmeklētība var radīt negaidītus rēķinus, un cloud izdevumu optimizēšana ir sava veida disciplīna.
Nginx vai Apache
Mūsdienu PHP lietojumprogrammām (Laravel, WordPress, PrestaShop) Nginx ir labākā izvēle. Tā notikumu vadītā arhitektūra apstrādā vienlaicīgus savienojumus ar mazāku atmiņas patēriņu uz savienojumu nekā Apache procesu modelis. Statiskos failus (attēlus, CSS, JavaScript) Nginx padod tieši, neaktivizējot PHP, kas ievērojami samazina servera slodzi. Tas arī labi strādā kā reversais starpniekserveris, kas apstrādā SSL termināciju un FastCGI kešošanu priekšā jūsu lietojumprogrammai.
Pamata Nginx servera bloks Laravel lietojumprogrammai izskatās šādi:
server {
listen 80;
server_name example.com;
root /var/www/app/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Apache joprojām ir savā vietā, īpaši kad nepieciešama .htaccess elastība daudznieku iestatījumiem vai mantotām lietojumprogrammām. Taču veiktspējai orientētiem izvietojumiem Nginx ar PHP-FPM ir standarts.
PHP-FPM konfigurēšana
PHP-FPM pārvalda PHP darbinieku procesu kopu, kas apstrādā lietojumprogrammas pieprasījumus. Noklusējuma konfigurācija gandrīz nekad nav optimāla ražošanas slodzēm.
Galvenie parametri failā /etc/php/8.3/fpm/pool.d/www.conf: Iestatiet pm = dynamic, lai pūls startētu ar minimālu darbinieku skaitu un augtu pēc pieprasījuma. pm.max_children aprēķiniet, dalot pieejamo RAM ar vidējo atmiņas patēriņu vienam PHP procesam zem slodzes (parasti 40-80 MB Laravel lietojumprogrammai ar siltu opcodu kešu). pm.start_servers iestatiet uz 25% no pm.max_children. pm.max_spare_servers iestatiet uz 75% no pm.max_children. request_terminate_timeout = 60, lai pārtrauktu ilgstoši darbojošos skriptus, pirms tie izsmeļ resursus.
Uz 4 GB VPS ar vienu Laravel lietojumprogrammu tipiski sanāk pm.max_children = 15, pm.start_servers = 4, pm.min_spare_servers = 2, pm.max_spare_servers = 10. Pārbaudiet šīs vērtības, uzraugot reālo procesu atmiņas patēriņu zem jūsu faktiskajiem apmeklētāju modeļiem, nevis slodzes testēšanā.
SSL iestatīšana un drošība
Katrai tīmekļa lietojumprogrammai jāizmanto HTTPS. Sertifikātu atjaunošanai izmantojiet Let's Encrypt ar Certbot: bezmaksas un automatizēti. No pārējā drošības konfigurācijā būtiski: ieslēgt HTTP/2 Nginx (listen 443 ssl http2) multipleksētiem savienojumiem, konfigurēt HSTS galvenes, lai novērstu pazemināšanas uzbrukumus, atspējot TLS 1.0 un 1.1 (izmantot tikai TLS 1.2 un 1.3), iestatīt UFW, lai bloķētu visus portus izņemot 80, 443 un SSH, un uzinstalēt Fail2Ban, kas konfigurēts bloķēt IP adreses pēc 5 neveiksmīgiem SSH pieteikšanās mēģinājumiem 10 minūšu laikā.
Dublēšanas stratēģija
Neviens hostinga iestatījums nav pilnīgs bez automatizētām dublējumkopijām. 3-2-1 noteikums: 3 datu kopijas, uz 2 dažādiem uzglabāšanas līdzekļiem, ar 1 kopiju ārpus vietas, kas glabāta citā datu centrā vai mākoņa reģionā. Lielākajai daļai VPS iestatījumu tas nozīmē ikdienas datu bāzes dump failu uz lokālo disku, ikdienas momentuzņēmumus uz S3 saderīgu objektu krātuvi (Hetzner Object Storage, Backblaze B2) un iknedēļas kopijas uz otru pakalpojumu sniedzēju.
Regulāri pārbaudiet atjaunošanas procesu. Dublējumkopija, no kuras nekad neesat atjaunojis, ir teorētiska. Mums ir bijuši klienti, kas atklāja, ka viņu "ikdienas dublēšana" vairākus mēnešus klusumā bija izgāzusies, tikai kad mēģināja no tās atjaunot.
Uzraudzība
Iestatiet uzraudzību, lai problēmas pamanītu pirms klientiem. Minimums: servera darbspēja, CPU un atmiņas izmantojuma tendences, diska vieta (brīdinājumi pie 75% un 90%), SSL sertifikāta derīguma termiņš (brīdinājums pie 30 dienām) un lietojumprogrammas atbildes laiks. Uptime Kuma (pašmitinājumā, bez maksas) labi apstrādā darbspējas un SSL uzraudzību. Servera metrikām Netdata nodrošina detalizētas reāllaika informācijas paneļus ar minimālu iestatīšanu. Hetrixtools labi darbojas kā ārējs uzraudzības pakalpojums ar SMS brīdinājumiem klientu projektiem.
Ko iestatījām Eiropas SaaS projektam
Eiropas SaaS jaunuzņēmums vērsās pie mums ar Laravel lietojumprogrammu uz shared hosting, kas pārsniedza laika limitu to izmēģinājuma lietotāju slodzes dēļ (apmēram 200 vienlaicīgi lietotāji ievadīšanas uzplūdos). Migrējām uz Contabo VPS (8 vCPU, 16 GB RAM), konfigurējām Nginx ar FastCGI kešošanu publiskajām lapām, iestatījām PHP-FPM uz dynamic ar max_children 25, pievienojām Redis sesijām un kešam, iestatījām ikdienas PostgreSQL dump failus uz Hetzner Object Storage un uzinstalējām Uptime Kuma un Netdata uzraudzībai. Laiks līdz pirmajam baitam krita no 2,1 sekundes uz 180ms pirmajam pieprasījumam. Kešotās lapas tika piegādātas zem 30ms. Viņu ievadīšanas pabeigšanas rādītājs nākamajā mēnesī uzlabojās par 18%, ko viņi saistīja ar ātrākiem atbildes laikiem izmēģinājuma laikā.
Hostings ir tehnisks lēmums ar tiešu biznesa ietekmi. Ietaupiet par daudz, un lietojumprogramma cieš. Iztērējiet par daudz, un budžets aiziet tukšgaitā. Pareizā atbilde atkarīga no jūsu apmeklētāju modeļiem, komandas servera administrēšanas kapacitātes un atbilstības prasībām. Mūsu serveru un hostinga pakalpojums ietver sākotnējo konfigurāciju, drošības nostiprināšanu, uzraudzības iestatīšanu un pastāvīgu pārvaldību klientiem, kas to nevēlas risināt paši. Ja domājat arī par to, kā lietojumprogrammas kods jāstrukturē, lai labi darbotos uz konkrēta servera, mūsu e-komercijas veiktspējas ceļvedis apskata lietojumprogrammas līmeņa optimizācijas, kas papildina labu servera konfigurāciju. Un ja lietojumprogrammai vajag pielāgotu aizmuguri, mūsu Laravel izstrādes pakalpojums var apstrādāt pilno steku.