Ik soe graach diele wat yndrukken oer de needsaak of ûnnedichens fan sa'n ding as in kontrôle paniel foar in kommersjeel single-tsjinner web projekt mei in hiel part-time behearder. It ferhaal begon in pear jier lyn, doe't freonen fan freonen my fregen om te helpen by de oankeap fan in bedriuw - in nijsside - út in technysk eachpunt. It wie nedich om in bytsje te ferdjipjen yn wat wurke oan wat, soargje derfoar dat alle nedige details waarden oerdroegen yn 'e goede foarm en folume, en strategysk útfine wat koe wurde ferbettere.
De deal wie ôfmakke, de fioelist wie net mear nedich. Ein. Net wirklik.
Сайт крутился на двухъядерной 4х-гиговой ВМке на Linode, на каком-то замшелом Debian5 с аптаймом дней в 400 и воооот таким списком необновленных пакетов. Веб-часть на самописной ЦМСке, nginx, php5.3 FPM, mysql тюненая Percona. В принципе, работало.
Parallel mei petearen mei my socht de nije eigner in programmeur om it projekt nei ferwachtingen te bringen. Fûn. De programmeur beoardiele it ferkear en folumes en besleat dat hy wist hoe te optimalisearjen en kostenbehear. Hy migrearre de hiele side nei in 700-roebel dielde hosting beheard troch syn gewoane IS****er. In pear dagen letter kaam der noch in oprop fan de eigner: "alles is stadich en it liket derop dat wy stikken binne." Ik besocht de situaasje troch it paniel te korrigearjen, mar nei in skoft fan fruchtbere besykjen om de PHP-ferzje of handler fan fcgi nei fpm te feroarjen, joech ik op en gie yn 'e shell. Dêr fûn ik in ynskeakele debug dy't op it hiele ynternet skynde mei it wachtwurd fan 'e spier, 777 op guon mappen dy't tsjin dy tiid kreake mei malware en ferlykbere ûnsin. De eigner realisearre en besleat dat it ferkeard wie om te besparjen op hosting, in programmeur en in admin dy't yn 'e gaten hâlde koe hoe't dingen gongen.
Wy geane nei RuVDS. In bytsje tichterby as de Britske Linode, en as jo ynienen persoanlike gegevens en dit alles wolle bewarje, hoege jo net earne oars te ferhúzjen. Sûnt it projekt waard útwreide, namen wy in VM foar groei: 4 kearnen, 8 gigabyte ûnthâld, 80 GB skiif. It is net dat ik net wit hoe't ik nginx-konfiguraasjes manuell konfigurearje, ik hie gewoan net it entûsjasme om sa yntime oan dit projekt te wurkjen (sjoch hjirboppe oer dieltiid). Dêrom haw ik Plesk ynstalleare (hjir sil ik de ynstallaasjedetails wegerje, om't d'r yn 't algemien gjin binne: ik haw it ynstallearder lansearre, it wachtwurd foar de admin ynsteld, de kaai ynfierd - dat is alles), op dat stuit wie it 17.0. Basisynstellingen wurkje tolerabel út 'e doaze, d'r is fail2ban en de lêste beskikbere ferzjes fan PHP en nginx.
It is wierskynlik de muoite wurdich om te stopjen en út te lizzen wêrom. Sûnt ik komselden doch sokke dingen, en ik haw gjin spesjale ark of set fan tariedings foar elk gefal, it wie dúdlik dat in soarte fan automatisearring fan basis dingen nedich wie, sadat earst, fluch, twadde, feilich, en tredde , alle bêste praktiken dy't immen it al ymplementearre hat.
Dat, ik haw it ynstalleare. Ik haw in protte tiid bewarre, de side opnij starte op in nije server wie hast fuortendaliks. Alles wat oerbleau wie om de spierkonfiguraasje te bewurkjen, it de helte fan it ûnthâld te jaan en it oantal bufferpools te ferheegjen, en nginx de helte fan 'e kearnen te jaan (Plesk rekket gjin globale konfiguraasjes oan), en gean in pear dagen yn 'e shell om te sjen by de mysqltuner stats. Ja, en ik kocht de betelle ImunifyAV fan 'e útwreidingskatalogus om de oerstreamde malware kwyt te reitsjen. Sawat 11000 ynfekteare bestannen waarden fûn. De grouwel is dat obfuscated stikken fan koade waarden getten yn de statics, en skjinmeitsjen it mei de hân soe west hawwe hielendal dof. Earst haw ik ClamAV besocht, mar, sa die bliken, nimt it sokke dingen net, mar ImunifyAV koe. Boppedat bliuwe de desinfekteare bestannen yn wurkjende steat; it stik mei de malware wurdt gewoan wiske.
De rekken is ienfâldich: $ 50 per moanne foar VMka, $ 10 foar Plesk (eins minder, om't jo it foar in jier tagelyk kocht hawwe mei in koarting fan twa moanne) en $ 3 foar antivirus. Of in protte jild foar myn tiid, dy't ik earst op 'e tsjinner soe hawwe bestege, dizze stâlen mei de hân raken. De eigner wie hiel bliid mei dizze regeling.

Yn 'e tuskentiid fûnen se in nije programmeur. Wy hawwe it mei him iens oer de ferdieling fan ferantwurdlikens, makke in subdomein foar de testferzje, en it wurk begon. Hy snijde in nije ferzje fan de side op Laravel, en ik seach op fail2ban%).

Opfallend is dat de stream fan nijsgjirrige minsken net stopet en der binne altyd sa'n hûndert adressen op 'e list fan ferbeane. It effekt is nijsgjirrich: benammen, meastal, as ik ynlogge yn in shell, sjoch ik sa'n 20000-30000 mislearre besykjen om yn te loggen fia SSH by de begroeting. Mei fail2ban ynskeakele, oer 70. Ynspannings ynvestearre: 0. Spitigernôch, it wie net sûnder in dripke salve. Standert wie WAF (modsecurity) heal ynskeakele: yn ûntdekkingsmodus. Dat is, hy skreau fertochte aktiviteit oan it logboek, mar naam eins gjin aksje. En fail2ban lies sûnder ûnderskied alle logs, neffens de ynskeakele jails, en fermoarde alles dat beweecht. Sadwaande hawwe wy de helte fan de redaksje ferbean :D. Ik moast dizze finzenis útskeakelje, en de nedige IP-adressen wite list foar betrouberens. Ynspanningen wurde ynvestearre: stik twa kear mei de mûs en lear de redaksje jo jo IP-adres te fertellen.

Wat de programmeur fuortendaliks leuk wie, wie de mooglikheid om databases direkt yn it paniel te uploaden en rappe tagong ta phpMyAdmin

Wat ik leuk wie wiene de logs en backups. Logs wurde skreaun en rotearre út it fak; Reservekopyen binne heul maklik yn te stellen. Op de stadichste tiden wurdt in folsleine reservekopy makke, sawat 10 optredens, en dan elke dei in ynkrementele ien, elk 200 megabytes, in wike lang. Herstel is korrelig, oant in spesifyk bestân of databank. As jo moatte restaurearje fan in inkrementele ien, dan hoege jo net earst lestich falle mei in folsleine en restaurearjen fan 'e hiele keten, Plesk docht alles sels. Jo kinne backups oeral uploade: nei FTP, dropbox, s3 bucket, google drive, ensfh.

Dei F: de programmeur hat úteinlik de nije motor foltôge, wy uploaden it nei produksje, ymporteare âlde gegevens en sieten om de kleur fan ús takomstige Maserati te kiezen. Wy sitte noch te kiezen.
De earste problemen begûnen. De nije side wie nei alle gedachten swierder as de âlde, mar de echte rake wie dat se om ferkear te lûken ûnder oare Yandex.Zen brûkten, dy't in protte besikers brocht. De side ferûngelokke mei 150 simultane ferbiningen (ik ha it net oer RPS, om't se it net mjitten). Wy begûnen knoppen te prikken en knoppen te draaien yn it php_fpm-ynstellingsgebiet:

Hee, hy hat al 500 ferbinings. As kredytkaarten waarden tafoege oan de middels fan promoasje, waarden de weagen fan ferkear grutter. De folgjende mylpeal is 1000 simultane ferbinings. Hjir moasten wy de koade opnij meitsje en yn 'e siel fan' e spier sjen. It spatten holp net, mar wy hienen it net echt ferwachte. Wy ynskeakele trage queries log, tafoege yndeksen oan de databank, fuortsmiten ûnnedige queries út de koade, en nochris skjinmakke de mysql config neffens it advys fan mysqltuner.
Nije útdaging - 2000 ferbiningen. De ferzje fan Plesk 17.8 koe krekt frijlitten wurde, wêryn ûnder oare nginx-caching tafoege waard. Bywurke (ferrassend maklik). Litte we it besykje. Wurket! En doe stapten se op 'e sêfte kant, de Yandex.Zen-feed stoppe mei wurkjen. De side wurket, de feed wurket net. De feed wurket net, der is gjin ferkear. De sfear wurdt waarm. Under druk fan omstannichheden en út in gebrek oan ferbylding gie ik fuort nei strace en nginx en fûn wat ik socht. It docht bliken dat op in stuit dom nginx cached de stray 500th flater as in antwurd op Yandex get feed.xml. It reparearre troch útsûnderingen ta te foegjen oan 'e cache-ynstellingen:

It is dúdlik dat de eigner MEAR nedich hat, de weagen wurde stadichoan tanimme. Wy binne omgean foar no, mar wy begûn te eksperimintearjen mei memcached foarôf, gelokkich Laravel stipet it hast út 'e doaze. Ik woe op de ien of oare manier memcached net manuell ynstallearje gewoan om "om te spyljen", dus ik ynstalleare in dockerôfbylding. Rjocht út it paniel.

No, goed, ik liig, ik moast yn 'e shell gean en de module fia pecl ynstallearje. Rjocht op . Der is noch neat te sizzen oer de taname fan de trochset, der binne net grut genôch ynstreamen west. De sidemotor is ferbûn oan localhost: 11211, statistiken wurde toand, ûnthâld wurdt konsumearre. As jo it leuk fine, sille wy sjen wat te dwaan. Of wy litte it sa, of wy sette de "echte" rjocht yn 'e As. Of litte wy op deselde manier redis besykje
Doe wie it nedich om in mailinglist by te lizzen. Gjin relais, allinich smtp-ferifikaasje. Ik set in e-mailadres op en brûk de details om in nijsbrief fia PHP te stjoeren.

Net lang lyn Plesk Obsidian (18.0) waard frijlitten, wy hawwe bywurke basearre op ferline ûnderfining sûnder eangst. Alles ferrûn hiel flot, der is net iens wat te praten oer. It noflike is dat de kwaliteit fan 'e ynterface sterk is ferbettere, it is moderner wurden en op guon plakken handiger wurden. Cool ding Avansearre Monitoring op Grafana.

Ik haw it noch net yn detail behannele, mar jo kinne bygelyks warskôgings ynstelle foar elke parameter yn jo e-post. Oan de eigner, lol.
Wylst ik it oer de ynterface praat, is it responsyf en wurket echt goed op 'e tillefoan. Yn 'e iere stadia, wylst wy besochten de optimale ynstellingen foar PHP en oare dingen te finen, holp dit in protte. En foaral as in programmeur, yn in fit fan wurk entûsjasme, docht wat om 23:XNUMX, en ik, yn in fit fan wurk entûsjasme, drink wodka yn it badhûs, en ik moat DRINGEND wat wikselje.

Oh, trouwens. De foto lit sjen dat PHP Composer is ferskynd. Wy hawwe der noch net mei spile, mar, sis, foar Laravel kin it in pear shell-oanmeldingen besparje en wat tiid op it ynstallearjen fan ôfhinklikens. Itselde systeem bestiet foar Node.JS en Ruby.
Mei SSL is alles ienfâldich. As it domein oplost lykas ferwachte, wurdt Let's Encrypt dien yn ien klik en fernijt himsels dan, sawol foar it domein sels, as foar subdomeinen, en sels posttsjinsten.

Plesk sels as software is op it stuit frij noflik en stabyl. It fernijt himsels en de Axis rêstich, verbruikt pear boarnen en wurket soepel. Ik wit it net iens dat ik earne op wat stapte, wat in dúdlik defekt yn it produkt west hie. D'r wiene fansels problemen, mar se wiene of troch ûnfolsleine konfiguraasje of earne by it krúspunt, dus d'r is neat om oer te kleien. De yndrukken fan it wurkjen mei Plesk binne oer it generaal noflik. Wat it net hat, en wy moatte dit begripe, is elke (elke) klustering. Noch LB noch HA. Jo kinne besykje, mar de muoite belutsen sil wêze safolle dat it is better om te dwaan wat oars út it begjin.
Ik tink dat wy it gearfetsje kinne. Foar it gefal as d'r gjin behearder is, of d'r is net genôch fan him, as de priis fan hosting en de side (s) dy't derop draaie, grutter is as, goed, sis, 100 USD, as wy it net hawwe oer bestial dielen fan 1500 sites op in server, as de beslútfoarmer wurdt konfrontearre mei As jo de kar hawwe om in dieltiidbehearder yn te hieren, of software te keapjen en in behearder foar in heale dollar te hawwen, of hielendal gjin ien te hawwen - it hat perfoarst sin. Ut it eachpunt fan de remote behearder - itselde ding. $ 10 per måned, en besparret tiid en jout fleksibiliteit yn wurk foar in hiel lange tiidоin grutter bedrach. As ik bygelyks sterk frege wurdt om in soartgelikense projekt ûnder de wjuk te nimmen, sil ik der op oanstean om it oer te setten nei Plesk.
Boarne: www.habr.com
