Želio bih podijeliti neke dojmove o potrebi ili nepotrebi kontrolne ploče za komercijalni web projekt na jednom poslužitelju s administratorom koji radi honorarno. Priča je započela prije nekoliko godina, kada su me neki prijatelji prijatelja zamolili da nadgledam kupnju tvrtke - web stranice s vijestima - s tehničkog stajališta. Trebao sam steći osnovno razumijevanje što se na čemu izvodi, osigurati da su svi potrebni detalji preneseni u ispravnom formatu i opsegu te strateški procijeniti što se može poboljšati.
Dogovor je bio sklopljen, violinist više nije bio potreban. Kraj. Ne baš.
Stranica je radila na dvojezgrenom 4GB VM-u na Linodeu, na nekom Mossyju. Debian5 s 400 dana neprekidnog rada i duuuugim popisom neažuriranih paketa. Web dio je na prilagođenom CMS-u, nginxu, PHP 5.3 FPM-u i podešenom Percona MySQL-u. Uglavnom je radilo.
Dok sam razgovarao sa mnom, novi vlasnik je tražio programera koji će projekt dovesti do očekivanja. Našao ga je. Programer je procijenio promet i volumen te zaključio da ima smisla za optimizaciju i upravljanje troškovima. Migrirao je cijelu stranicu na uslugu dijeljenog hostinga od 700 rubalja kojom upravlja njegov uobičajeni IS****er. Nekoliko dana kasnije, vlasnik je ponovno nazvao: "Sve je sporo i čini se da smo propali." Pokušao sam popraviti situaciju putem kontrolne ploče, ali nakon nekoliko bezuspješnih pokušaja promjene PHP verzije ili handlera s fcgi na fpm, odustao sam i otišao u shell. Tamo sam pronašao omogućeno otklanjanje pogrešaka, koje je otkrilo lozinku za cijeli internet, 777 za neke mape, koje su do tada bile pune zlonamjernog softvera i sličnih gluposti. Vlasnik je shvatio i odlučio da je štedjeti na hostingu, programeru i administratoru koji bi pomno pratio kako stvari stoje pogrešno.
Prelazimo na RuVDS. Malo je bliži od britanskog Linodea, i ako odjednom poželimo pohraniti osobne podatke i sve to, nećemo se morati seliti nigdje drugdje. Budući da je projekt bio planiran za proširenje, dobili smo VM "za rast": 4 jezgre, 8 GB memorije, 80 GB prostora na disku. Nije da ne znam ručno podesiti nginx konfiguracije, jednostavno nisam imao entuzijazma za tako intimni rad na ovom projektu (vidi gore o honorarnom radu). Dakle, instalirao sam Plesk (ovdje ću preskočiti detalje instalacije, budući da ih zapravo nema: pokrenite instalacijski program, postavite lozinku za administratora, unesite ključ i to je to). U to vrijeme je bio 17.0. Osnovne postavke rade podnošljivo dobro odmah nakon instalacije; ima fail2ban i najnovije dostupne verzije PHP-a i nginxa.
Možda bih trebao zastati i objasniti zašto. Budući da rijetko radim ovu vrstu posla i nemam nikakve posebne alate ili unaprijed postavljene postavke za svaku situaciju, bilo je jasno da je potrebna određena automatizacija osnova, prvo, kako bi to bilo brzo, drugo, sigurno i treće, kako bi se osiguralo da su sve najbolje prakse već implementirane.
Dakle, instalirao sam ga. Uštedio sam dosta vremena i stranica se gotovo trenutno ponovno pokrenula na novom poslužitelju. Sve što je preostalo bilo je podesiti konfiguraciju mišića, dodijeliti polovicu memorije i povećati broj međuspremnika te dodijeliti polovicu jezgri nginxu (Splash ne dira globalne konfiguracije), a zatim se prijaviti u shell na nekoliko dana kako bih pogledao statistiku mysqltunera. Oh, i kupio sam plaćeni ImunifyAV iz kataloga ekstenzija kako bih se riješio ubrizganog zlonamjernog softvera. Pronašli su oko 11 000 zaraženih datoteka. Gadna stvar je što su se u statičke datoteke ubrizgavali obfusirani dijelovi koda, a njihovo ručno čišćenje bilo bi prava muka. Prvo sam isprobao ClamAV, ali ispostavilo se da ne može podnijeti takve stvari, dok ImunifyAV može. Štoviše, očišćene datoteke ostaju funkcionalne; dio zaražen zlonamjernim softverom se jednostavno briše.
Matematika je jednostavna: 50 dolara mjesečno za VMware, 10 dolara za Plesk (zapravo manje, jer smo kupili cijelu godinu s dvomjesečnim popustom) i 3 dolara za antivirus. Ili puno novca za vrijeme koje bih u početku proveo na serveru, ručno čisteći ovaj nered. Vlasnik je bio prilično zadovoljan ovim dogovorom.

U međuvremenu, pronašli smo novog programera. Dogovorili smo se o podjeli odgovornosti, kreirali poddomenu za testnu verziju i bacili se na posao. On je gradio novu verziju stranice u Laravelu, a ja sam pratio fail2ban.

Zanimljivo je da niz znatiželjnih ljudi nikad ne prestaje, a popis zabranjenih adresa uvijek sadrži stotinjak adresa. Učinak je zanimljiv: posebno, kada se obično prijavim u shell, početni zaslon obično prikazuje oko 20 000-30 000 neuspješnih pokušaja SSH prijave. S omogućenim fail2banom, to je oko 70. Uloženi trud: 0. Nažalost, postojala je mala kvaka. Prema zadanim postavkama, WAF (modsecurity) bio je "polu-omogućen": u načinu rada za detekciju. To jest, bilježio je sumnjive aktivnosti u zapisniku, ali nije poduzimao nikakve stvarne akcije. A fail2ban je neselektivno čitao sve zapisnike, prema omogućenim zatvorima, i izbrisao sve što se pomicalo. Stoga smo zabranili polovicu uredništva :D. Morali smo onemogućiti ovaj zatvor i staviti potrebne IP adrese na bijelu listu radi pouzdanosti. Uloženi trud bio je nekoliko klikova mišem i obuka urednika da daju svoje IP adrese.

Ono što se programeru odmah svidjelo bila je mogućnost izravnog prijenosa baza podataka na panel i brz pristup phpMyAdminu

Ono što mi se svidjelo su zapisnici i sigurnosne kopije. Zapisnici se zapisuju i rotiraju automatski odmah po instalaciji; sigurnosne kopije je vrlo jednostavno postaviti. Tijekom najsporijih razdoblja stvara se potpuna sigurnosna kopija od oko 10 GB, a zatim se svakodnevno stvara inkrementalna sigurnosna kopija od 200 MB tijekom tjedan dana. Obnova je granularna, do određene datoteke ili baze podataka. Ako trebate vratiti podatke iz inkrementalne sigurnosne kopije, ne morate se zamarati potpunom sigurnosnom kopijom, a zatim vraćati cijeli lanac - Plesk sve to radi automatski. Sigurnosne kopije možete prenijeti bilo gdje: na FTP, Dropbox, S3 Bucket, Google Drive i tako dalje.

Dan G: Programer je konačno završio novi motor, ubacili smo ga u produkciju, uvezli stare podatke i sjeli odabrati boju našeg budućeg Maseratija. Još uvijek biramo.
Prvi problemi su počeli. Nova stranica je, što se i očekivalo, bila teža od stare, ali pravi problem je bio što su, između ostalog, koristili Yandex.Zen za privlačenje prometa, što je masovno privlačilo posjetitelje. Stranica se srušila pri manje od 150 istovremenih veza (ne govorim o RPS-u, jer ga nismo mjerili). Počeli su pritiskati gumbe i podešavati gumbe u području postavki php_fpm:

Ups, već ima 500 veza. Kako sam koristio svoju kreditnu karticu za promotivne alate, valovi prometa su postajali sve veći. Sljedeća prekretnica bila je 1000 istovremenih veza. Ovdje sam morao poboljšati kod i ispitati snagu. Splash nije pomogao, ali to nije bilo ono što sam očekivao. Omogućio sam zapisnik sporih upita, dodao indekse u bazu podataka, uklonio nepotrebne upite iz koda i ponovno prilagodio konfiguraciju MySQL-a slijedeći savjet mysqltunera.
Novi izazov – 2000 konekcija. Upravo je izašao Plesk 17.8, koji je, između ostalog, dodao nginx keširanje. Ažurirali smo (iznenađujuće jednostavno). Isprobali smo. Radi! I onda smo naišli na problem: Yandex.Zen feed je prestao raditi. Stranica radi, ali feed ne radi. Feed ne radi, nema prometa. Atmosfera se zagrijava. Pod pritiskom okolnosti i nedostatka mašte, odmah sam pokušao pratiti nginx i pronašao ono što sam tražio. Ispostavilo se da je u nekom trenutku glupi nginx keširao zalutalu grešku 500 kao odgovor na Yandexov get feed.xml. Popravili smo to dodavanjem iznimki u postavke predmemorije:

Jasno je da vlasniku treba VIŠE, a valovi polako rastu. Zasad se snalazimo, ali smo rano počeli eksperimentirati s memcachedom, budući da ga Laravel podržava gotovo odmah. Nismo baš htjeli ručno instalirati memcached samo da bismo se igrali, pa smo instalirali Docker sliku. Izravno s nadzorne ploče.

U redu, lažem, morao sam ući u shell i instalirati modul putem pecl-a. Odmah Još nema podataka o povećanju propusnosti; nije bilo značajnih skokova. Engine stranice je spojen na localhost:11211, statistike se prikazuju, ali se troši memorija. Ako nam se sviđa, vidjet ćemo što dalje. Ili ćemo ga ostaviti kakvim jest ili ćemo instalirati "pravi" izravno u OS. Ili ćemo pokušati Redis na isti način.
Zatim sam trebao postaviti e-mail bilten. Bez releja, samo SMTP autentifikacija. Kreirao sam e-mail adresu i koristili smo njezine podatke za slanje biltena putem PHP-a.

Plesk Obsidian (18.0) je nedavno objavljen i ažurirali smo ga bez straha, na temelju prošlih iskustava. Sve je prošlo vrlo glatko, nema se što prijaviti. S pozitivne strane, sučelje je značajno poboljšano, modernizirano i sada je u nekim područjima jednostavnije za korištenje. Napredno praćenje na Grafani je odlična značajka.

Nisam to još detaljno istražio, ali možete, na primjer, postaviti upozorenja putem e-pošte za bilo koji parametar. Vlasniku, lol.
Što se tiče sučelja, responzivno je i jako dobro radi na telefonu. U ranim fazama, dok smo pokušavali pronaći optimalne PHP postavke i druge stvari, ovo je bila ogromna pomoć. Pogotovo kada programer, u naletu radnog entuzijazma, radi na nečemu u 23 sata, a ja sam u naletu radnog entuzijazma, pijem votku u sauni i HITNO moram nešto promijeniti.

Usput. Na slici možete vidjeti da se pojavio PHP Composer. Nismo se još igrali s njim, ali na primjer, za Laravel može uštedjeti nekoliko prijava u shell i nešto vremena potrebnog za instaliranje ovisnosti. Sličan sustav postoji za Node.JS i Ruby.
SSL je jednostavan. Ako se domena razriješi kako se očekuje, Let's Encrypt se instalira jednim klikom i automatski ažurira za samu domenu, poddomene, pa čak i usluge e-pošte.

Sam Plesk je trenutno prilično jednostavan za korištenje i stabilan. Ažurira sam sebe i OS tiho, koristi malo resursa i radi glatko. Ne sjećam se čak ni nikakvih problema koji bi se smatrali jasnim nedostatkom proizvoda. Bilo je nekih problema, naravno, ali su bili ili zbog nesavršene konfiguracije ili problema negdje u procesu, tako da nema ništa na čemu bi se stvarno moglo pronaći zamjerka. Sveukupno, moje iskustvo s Pleskom je bilo ugodno. Ono što nema, a važno je razumjeti, jest bilo kakva vrsta klasteriranja. Nema LB-a, nema HA. Možete pokušati, ali trud koji je potreban bit će toliko velik da je bolje od početka napraviti nešto drugačije.
Mislim da možemo sažeti. Za situaciju u kojoj nema administratora ili ih ima samo nekoliko, kada trošak hostinga i web-stranice(a) koje se na njemu izvode premašuje, recimo, 100 USD, kada ne govorimo o ogromnom dijeljenom poslužitelju s 1500 stranica, kada se donositelj odluke suočava s izborom između zapošljavanja administratora s nepunim radnim vremenom, kupnje softvera i zapošljavanja administratora s "pola radnim vremenom" ili uopće ne zapošljavanja - to definitivno ima smisla. Iz perspektive udaljenog administratora, to je isto. 10 USD mjesečno štedi vrijeme i dodaje fleksibilnost za rad na vrlo velikim razmjerima.оVeći iznos. Ako me, na primjer, snažno zamole da preuzmem sličan projekt pod svoje okrilje, inzistirat ću na njegovom premještanju u Plesk.
Izvor: www.habr.com
