Voglio condividere alcune impressioni sull'utilità o meno di un pannello di controllo per un progetto web commerciale su un singolo server, considerando che l'amministratore ha solo un impegno parziale. La storia inizia un paio di anni fa, quando persone conosciute mi hanno chiesto di seguire l'acquisto di un business — un sito di notizie — dal punto di vista tecnico. Era necessario comprendere leggermente come funzionava il tutto, assicurarsi che tutte le informazioni necessarie venissero trasmesse nel modo e nella quantità adeguati, e calcolare strategicamente cosa poteva essere migliorato.
L'affare è andato in porto, il violinista non era più necessario. Fine. In realtà no.
Il sito si trovava su una VM a due core con 4 GB di RAM su Linode, su un Debian 5 obsoleto con un uptime di 400 giorni e un elenco di pacchetti non aggiornati. La parte web era costruita su un CMS personalizzato, nginx, php 5.3 FPM e mysql ottimizzato con Percona. In sostanza, funzionava.
Contemporaneamente ai colloqui con me, il nuovo proprietario cercava un programmatore per portare il progetto a un livello adeguato. Lo ha trovato. Il programmatore ha valutato il traffico e i volumi e ha deciso di occuparsi di ottimizzazione e gestione dei costi. Ha migrato tutto il sito su un hosting condiviso da 700 rubli, gestito dall'IS****er a lui familiare. Dopo qualche giorno, un'altra chiamata dal proprietario: «tutto è lento e sembra che ci abbiano attaccati». Ho cercato di risolvere la situazione attraverso il pannello, ma dopo alcuni tentativi infruttuosi di cambiare la versione di PHP o il handler da fcgi a fpm, ho gettato la spugna e sono andato nella shell. Lì ho trovato il debug attivato, che esponeva su internet la password di MySQL, permissi 777 su alcune cartelle, che a quel punto erano scoppiate a causa di malware caricato e altra roba simile. Il proprietario ha compreso e ha deciso che risparmiare su hosting, programmatore e un amministratore che vigilasse periodicamente non era una buona idea.
Passiamo a RuVDS. Un po' più vicino della britannica Linode, e se mai avremo bisogno di conservare dati personali e tutto il resto, non sarà necessario spostarsi altrove. Poiché il progetto era destinato a espandersi, abbiamo preso una VM "per crescere": 4 core, 8 GB di memoria, 80 GB di disco. Non che non sappia configurare nginx a mano, semplicemente non avevo l'entusiasmo di occuparmi di questo progetto in modo così intimo (vedi sopra riguardo al part time). Quindi ho installato Plesk (qui non entrerò nei dettagli di installazione, poiché non ce ne sono: ho lanciato l'installer, impostato la password per l'amministratore, inserito la chiave – è tutto), a quel tempo era la versione 17.0. Le impostazioni di base funzionano decentemente out of the box, ci sono fail2ban e le versioni PHP e nginx più recenti disponibili.
Forse vale la pena fermarsi e spiegare perché. Poiché mi occupo raramente di queste cose e non ho un attrezzo speciale o un set di modelli pronti per ogni occasione, era chiaro che avevo bisogno di qualche forma di automazione delle operazioni di base, per essere, prima di tutto, veloce, in secondo luogo, sicuro e, in terzo luogo, per implementare già le migliori pratiche.
Dunque, l'ho installato. Ho risparmiato un bel po' di tempo, il riavvio del sito sul nuovo server è stato praticamente immediato. Restava solo da adattare la configurazione di MySQL, assegnandogli metà della memoria e aumentare il numero di buffer pools, e dare a nginx metà dei core (Plesk non tocca le configurazioni globali), e per alcuni giorni sono entrato nella shell per vedere le statistiche di mysqltuner. Ah, e ho acquistato l'antivirus a pagamento ImunifyAV dal catalogo delle estensioni, per liberarmi del malware caricato. Sono stati trovati circa 11.000 file infetti. La cosa fastidiosa è che negli statici si inserivano pezzi di codice offuscati, e pulirli a mano sarebbe stato davvero deprimente. Inizialmente ho provato ClamAV, ma già si è visto che non rilevava tali cose, mentre ImunifyAV è riuscito. E i file riparati rimangono in uno stato funzionante, si elimina semplicemente la parte col malware.
La matematica è semplice: 50$ al mese per la VM, 10$ per Plesk (in realtà meno, perché abbiamo acquistato per un anno intero con uno sconto di due mesi) e 3$ per l'antivirus. Oppure molti pacchetti di denaro per il mio tempo, che avrei passato sul server nei primi periodi a sistemare manualmente queste stalle. Questo assetto ha soddisfatto il proprietario.

Nel frattempo hanno trovato un nuovo programmatore. Abbiamo concordato una suddivisione delle responsabilità, creato un sottodominio per la versione di test e il lavoro è iniziato. Lui stava sviluppando una nuova versione del sito su Laravel, mentre io vigilavo su fail2ban%).

È interessante notare che il flusso di curiosi non si arresta e nella lista degli indirizzi bloccati ci sono sempre circa cento indirizzi. L'effetto è interessante: in particolare, di solito, quando accedo al shell, vedo circa 20000-30000 tentativi falliti di accesso via SSH. Con fail2ban attivato, circa 70. Sforzi impiegati: 0. Purtroppo, non è mancata una nota stonata. Di default, il WAF (modsecurity) era «mezz'attivato»: in modalità di rilevamento. Cioè, registrava l'attività sospetta nei log, ma non intraprendeva effettivamente alcuna azione. E fail2ban leggeva indiscriminatamente tutti i log, secondo le jails attivate, e bloccava tutto ciò che si muoveva. Così abbiamo bloccato metà della redazione :D. Ho dovuto disattivare questa jail e inserire gli indirizzi IP necessari nella whitelist per maggiore sicurezza. Sforzi impiegati: due clic con il mouse e insegnare ai redattori a comunicare il proprio indirizzo IP.

Ciò che è subito piaciuto al programmatore è la possibilità di caricare i database direttamente nel pannello e l'accesso rapido a phpMyAdmin

Ciò che mi è piaciuto sono i log e i backup. I log vengono registrati e ruotati automaticamente; i backup si configurano molto facilmente. Durante i periodi più tranquilli si effettua un backup completo, circa di 10 gigabyte, e poi ogni giorno un backup incrementale di circa 200 megabyte per una settimana. Il ripristino è granulare, fino al singolo file o database. Se è necessario ripristinare da un backup incrementale, non è necessario prima lottare con un backup completo e il ripristino di tutta la catena, Plesk fa tutto da solo. I backup possono essere caricati ovunque: su FTP, Dropbox, S3 bucket, Google Drive e altro.

Giorno J: il programmatore ha finalmente completato il nuovo motore, lo abbiamo caricato in produzione, importato i vecchi dati e ci siamo messi a scegliere il colore delle nostre future Maserati. Stiamo ancora scegliendo.
Sono emersi i primi problemi. Il nuovo sito era prevedibilmente più pesante del vecchio, ma il vero problema è stato che per attrarre traffico stavamo utilizzando, tra l'altro, Yandex.Zen, che portava visitatori a frotte. Il sito si bloccava con 150 connessioni simultanee (non parlo di RPS, perché non erano stati misurati). Abbiamo iniziato a premere pulsanti e a girare manopole nell'area delle impostazioni di php_fpm:

Oppure, già regge 500 connessioni. Con l'aggiunta di fondi per la promozione, le ondate di traffico sono aumentate. Il prossimo traguardo è 1000 connessioni simultanee. Qui è stato necessario raffinare il codice e vedere a fondo il muscolo. Plesk non ha aiutato in questo, ma non ce lo aspettavamo nemmeno. Abbiamo attivato il log delle query lente, aggiunto indici al database, rimosso query inutili dal codice e nuovamente sistemato la configurazione di mysql seguendo i consigli di mysqltuner.
Nuova sfida: 2000 connessioni. Proprio in quel momento è uscita la versione Plesk 17.8, che, tra l'altro, ha introdotto il caching di nginx. Ci siamo aggiornati (con sorpresa è stato molto semplice). Proviamo. Funziona! E subito è successo un problema: ha smesso di funzionare il feed di Yandex.Zen. Il sito funziona, ma il feed non funziona. Se il feed non funziona, non c'è traffico. L'atmosfera si fa tesa. Sotto la pressione delle circostanze e della mancanza di fantasia, ho subito iniziato a fare strace su nginx e ho scoperto cosa cercava. A quanto pare, a un certo punto, il «fesso» nginx ha memorizzato nella cache un errore 500 come risposta alla richiesta di yandex per feed.xml. Abbiamo corretto aggiungendo eccezioni alle impostazioni della cache:

È chiaro che il proprietario ha bisogno di ULTERIORI risorse; le ondate aumentano lentamente. Finora ci stiamo riuscendo, ma in anticipo abbiamo iniziato a sperimentare con memcached, dato che Laravel lo supporta quasi 'out of the box'. Non avevamo voglia di installare memcached manualmente per 'sperimentare', quindi abbiamo installato un'immagine Docker. Proprio dal pannello.

Va bene, mento, ho dovuto entrare nel shell e installare il modulo tramite pecl. Proprio via . Non posso ancora dire nulla sull'aumento della capacità, non ci sono stati afflussi sufficientemente grandi. Il motore del sito si è collegato su localhost:11211, le statistiche vengono mostrati, la memoria viene utilizzata. Se ci piacerà, vedremo cosa fare dopo. O lo lasciamo così, oppure ne installiamo uno 'vero' direttamente nel sistema. Oppure proveremo redis nello stesso modo.
Poi è stato necessario implementare una newsletter. Niente relay, solo autenticazione smtp. Ho creato un indirizzo email e, grazie ai suoi dati, tramite PHP facciamo l'invio.

Recentemente è uscita la versione Plesk Obsidian (18.0), ci siamo aggiornati temendo meno rispetto all'esperienza passata. Tutto è andato molto liscio, non c'è nulla di cui lamentarsi. Un aspetto positivo è che l'interfaccia si è notevolmente migliorata, si è aggiornata ed è diventata più comoda in alcuni punti. È una cosa interessante il Advanced Monitoring su Grafana.

Non ci ho ancora dedicato un'analisi approfondita, ma si possono ad esempio impostare avvisi per qualsiasi parametro via email. Al proprietario, lol.
Poiché parlo dell'interfaccia, è reattiva e funziona davvero bene sul telefono. Nelle fasi iniziali, mentre cercavamo di trovare le impostazioni PHP ottimali e altro, questo ci ha salvato molto. E soprattutto quando il programmatore, in un momento di entusiasmo lavorativo, fa qualcosa alle 23:00, mentre io, nello stesso spirito, bevo vodka in sauna e ho URGENTEMENTE bisogno di cambiare qualcosa.

Oh, a proposito. Nella foto si vede che è apparso PHP Composer. Non abbiamo ancora giocato con esso, ma, ad esempio, per Laravel può risparmiare un paio di accessi al terminale e un certo tempo per installare le dipendenze. Un sistema simile esiste anche per Node.JS e Ruby.
Con SSL è tutto semplice. Se il dominio risolve come dovrebbe, Let’s Encrypt si installa con un clic e si aggiorna automaticamente, sia per il dominio stesso che per i sottodomini, e anche per i servizi di posta.

Plesk, come software attuale, è abbastanza piacevole e stabile. Si aggiorna da solo e il sistema operativo silenziosamente, consuma poche risorse e funziona in modo preciso. Non ricordo nemmeno di essere incappato in qualcosa che fosse un difetto evidente del prodotto. Ci sono stati problemi, ma erano o dovuti all'imperfezione della configurazione, o a problemi di integrazione, quindi non c'è molto da correggere. L'impressione generale di lavorare con Plesk è positiva. Ciò che non c'è, e bisogna capire, è qualsiasi tipo di clustering. Né LB né HA. Si può tentare, ma gli sforzi richiesti saranno così tanti che è meglio fare qualcosa di diverso fin dall'inizio.
Penso che si possa riassumere. Nel caso in cui non ci sia un amministratore, o ce ne sia solo uno, quando il costo dell'hosting e dei siti (o siti) sopra di esso supera, diciamo, 100 euro, quando non si tratta di un indecoroso sharing con 1500 siti su un server, quando chi deve prendere una decisione deve scegliere se assumere un amministratore part-time, comprare del software e assumere un amministratore per 'mezzo stipendio', o non assumerne affatto - ha sicuramente senso. Dal punto di vista di un amministratore remoto, è lo stesso. 10 dollari al mese, e fa risparmiare tempo e offre flessibilità in un importo molto maggiore. Se, ad esempio, mi chiedessero seriamente di prendere sotto la mia ala un progetto simile, insisterei per trasferirlo su Plesk.unSe nel caso ci fosse la richiesta di aiuto per un progetto simile, suggerirei senza dubbio il passaggio a Plesk.
Fonte: habr.com
