Je souhaite partager quelques impressions sur l'utilitĂ© ou non d'un panneau de contrĂŽle pour un projet web commercial sur un serveur unique, avec un administrateur trĂšs part-time. L'histoire a commencĂ© il y a quelques annĂ©es, lorsque des connaissances d'amis m'ont demandĂ© d'assister Ă l'achat d'une entreprise â un site d'actualitĂ©s â d'un point de vue technique. Il fallait examiner lĂ©gĂšrement en quoi cela fonctionnait, s'assurer que tous les documents nĂ©cessaires Ă©taient transmis correctement et stratĂ©giquement envisager ce qui pouvait ĂȘtre amĂ©liorĂ©.
L'affaire a été conclue, le violoniste n'était plus nécessaire. Fin. En réalité, non.
Le site fonctionnait sur une VM Ă deux cĆurs avec 4 Go de RAM sur Linode, avec un Debian 5 trĂšs ancien et un uptime de 400 jours, et voilĂ une telle liste de paquets non mis Ă jour. La partie web Ă©tait sur un CMS fait maison, nginx, php5.3 FPM, mysql optimisĂ© avec Percona. En principe, ça marchait.
ParallĂšlement Ă mes discussions, le nouveau propriĂ©taire cherchait un programmeur pour aligner le projet sur ses attentes. Il a trouvĂ©. Le programmeur a Ă©valuĂ© le trafic et les volumes et a dĂ©cidĂ© qu'il pouvait gĂ©rer l'optimisation et la gestion des coĂ»ts. Il a migrĂ© tout le site vers un hĂ©bergement partagĂ© Ă 700 roubles sous la gestion de l'IS****er qui lui Ă©tait familier. Quelques jours plus tard, nouvel appel du propriĂ©taire : « tout ralentit et on a l'impression qu'ils nous ont piratĂ©s ». J'ai essayĂ© de corriger la situation via le panneau, mais aprĂšs un certain temps d'efforts infructueux pour changer la version de PHP ou le handler de fcgi Ă fpm, j'ai abandonnĂ© et suis allĂ© dans le shell. J'y ai trouvĂ© le dĂ©bogage activĂ©, qui exposait le mot de passe de MySQL Ă tout internet, 777 sur certains dossiers, qui Ă ce moment-lĂ croulaient sous les malwares et d'autres aberrations. Le propriĂ©taire a rĂ©alisĂ© qu'Ă©conomiser sur l'hĂ©bergement, le programmeur, et un administrateur qui garderait un Ćil sur les affaires n'Ă©tait pas la bonne solution.
Nous allons chez RuVDS. Un peu plus proche que la britannique Linode, et si jamais on dĂ©sire stocker des donnĂ©es personnelles et tout ça, il n'est plus nĂ©cessaire de dĂ©mĂ©nager ailleurs. Comme le projet Ă©tait destinĂ© Ă s'Ă©tendre, nous avons pris une VM "pour l'avenir": 4 cĆurs, 8 Go de RAM, 80 Go de disque. Ce n'est pas que je ne maĂźtrise pas les configurations nginx Ă la main, simplement je n'avais pas l'enthousiasme de gĂ©rer ce projet aussi intimement (voir ci-dessus sur le temps partiel). Donc, j'ai installĂ© Plesk (je passerai les dĂ©tails de l'installation, car en gros, il n'y en a pas : j'ai lancĂ© l'installateur, placĂ© un mot de passe pour l'administrateur, entrĂ© la clĂ© â c'est tout), Ă l'Ă©poque c'Ă©tait la version 17.0. Les rĂ©glages de base fonctionnent correctement dĂšs la sortie de la boĂźte, il y a fail2ban et les derniĂšres versions disponibles de PHP et nginx.Â
Il convient probablement de s'arrĂȘter et d'expliquer pourquoi lui. Ătant donnĂ© que je fais ce genre de choses rarement, et que je n'ai pas d'outils spĂ©ciaux ou de modĂšles prĂȘts pour chaque cas, il Ă©tait Ă©vident qu'une certaine automatisation des tĂąches de base Ă©tait nĂ©cessaire, pour ĂȘtre Ă la fois rapide, sĂ©curisĂ© et que tous les meilleures pratiques aient dĂ©jĂ Ă©tĂ© mises en Ćuvre par quelqu'un.
Donc, je l'ai installĂ©. J'ai Ă©conomisĂ© pas mal de temps, le redĂ©marrage du site sur le nouveau serveur a Ă©tĂ© quasiment instantanĂ©. Il restait Ă ajuster la configuration de MySQL, en lui allouant la moitiĂ© de la mĂ©moire et en augmentant le nombre de buffer pools, et Ă donner la moitiĂ© des cĆurs Ă nginx (Plesk ne touche pas aux configurations globales), et pendant quelques jours, j'ai jetĂ© un Ćil dans le shell pour voir les stats de mysqltuner. Ah oui, et j'ai achetĂ© ImunifyAV payant dans le catalogue des extensions pour me dĂ©barrasser de la malveillance tĂ©lĂ©chargĂ©e. Environ 11000 fichiers infectĂ©s ont Ă©tĂ© identifiĂ©s. Le problĂšme, c'est que du code obfusquĂ© Ă©tait intĂ©grĂ© dans la partie statique, et le nettoyer Ă la main aurait Ă©tĂ© assez pĂ©nible. J'ai d'abord essayĂ© ClamAV, mais il s'est avĂ©rĂ© qu'il ne traite pas ce genre de choses, alors qu'ImunifyAV a pu le faire. De plus, les fichiers rĂ©parĂ©s restent en bon Ă©tat de fonctionnement, seul le morceau contenant la malveillance est supprimĂ©.
Les calculs sont simples : 50 $ par mois pour la VM, 10 $ pour Plesk (en réalité moins, car nous avons acheté pour un an avec une réduction de deux mois) et 3 $ pour l'antivirus. Ou bien beaucoup de valises d'argent pour le temps que j'aurais passé sur le serveur dans les premiers temps à dégager ces écuries manuellement. Ce schéma convenait parfaitement au propriétaire.

Entre-temps, nous avons trouvé un nouveau programmeur. Nous nous sommes mis d'accord avec lui sur la répartition des responsabilités, avons créé un sous-domaine pour la version de test, et le travail a commencé. Il développait une nouvelle version du site sur Laravel, tandis que je surveillais fail2ban.

Il est intĂ©ressant de noter que le flux des curieux ne s'arrĂȘte jamais et qu'il y a toujours environ une centaine d'adresses dans la liste noire. L'effet est intĂ©ressant : en gĂ©nĂ©ral, lorsque je me connecte au shell, je vois environ 20 000 Ă 30 000 tentatives de connexion infructueuses via SSH. Avec fail2ban activĂ©, il y a environ 70. Efforts investis : 0. Malheureusement, il n'y a pas eu de point positif sans un soupçon de nĂ©gatif. Par dĂ©faut, WAF (modsecurity) Ă©tait « semi-activĂ© » : en mode dĂ©tection. Cela signifie qu'il enregistrait l'activitĂ© suspecte dans les journaux, mais ne prenait effectivement aucune mesure. En revanche, fail2ban lisait sans distinction tous les journaux, selon les jails activĂ©s, et bloquait tout ce qui bougeait. Ainsi, nous avons banni la moitiĂ© de la rĂ©daction :D. Nous avons dĂ» dĂ©sactiver ce jail et ajouter les adresses IP nĂ©cessaires Ă la liste blanche pour plus de fiabilitĂ©. Efforts dĂ©ployĂ©s : cliquer deux fois avec la souris et apprendre aux Ă©diteurs Ă dire leur adresse IP.

Ce qui a plu immédiatement au programmeur - la possibilité de télécharger des bases de données directement dans le panneau et un accÚs rapide à phpMyAdmin.

Ce que j'ai aimĂ© - les journaux et les sauvegardes. Les journaux s'Ă©crivent et se tournent automatiquement dĂšs la sortie de la boĂźte ; les sauvegardes se configurent trĂšs facilement. Pendant les pĂ©riodes les plus calmes, une sauvegarde complĂšte est effectuĂ©e, d'environ 10 Go, suivie chaque jour d'une sauvegarde incrĂ©mentielle d'environ 200 Mo, pendant une semaine. La restauration est granulaire, jusqu'Ă un fichier ou une base de donnĂ©es spĂ©cifiques. Si une restauration incrĂ©mentielle est nĂ©cessaire, il n'est pas nĂ©cessaire de recommencer avec la sauvegarde complĂšte et de restaurer toute la chaĂźne, Plesk s'en occupe tout seul. Les sauvegardes peuvent ĂȘtre tĂ©lĂ©chargĂ©es n'importe oĂč : sur FTP, Dropbox, S3 bucket, Google Drive, etc.

Jour J : le programmeur a enfin terminé le nouveau moteur, nous l'avons déployé en production, importé les anciennes données et nous sommes assis pour choisir la couleur de nos futures Maserati. Nous sommes encore en train de choisir.
Les premiers problÚmes ont commencé. Le nouveau site était attendue plus lourd que l'ancien, mais la véritable tuile était que, pour attirer le trafic, nous utilisions entre autres Yandex.Zen, qui amenait des visiteurs en masse. Le site était en difficulté avec 150 connexions simultanées (je ne parle pas de RPS, car nous ne l'avons pas mesuré). Nous avons commencé à cliquer sur les boutons et à ajuster les réglages de php_fpm.
Â

Oh, it already handles 500 connections. As the credit card is applied to the promotional funds, the traffic waves have grown larger. The next milestone is 1000 simultaneous connections. At this point, we had to refine the code and look into the muscle soul. Plesk didnât help much, but we didnât expect it to. We enabled the slow queries log, added some indexes to the database, removed unnecessary queries from the code, and tweaked the MySQL configuration again following the tips from mysqltuner.
The new challenge is 2000 connections. Just in time for the release of Plesk 17.8, which added nginx caching among other things. We updated (surprisingly easily). Letâs try it. It works! But then it suddenly got soft, and the Yandex Zen feed stopped working. The site is operational, but the feed is down. No feed means no traffic. The atmosphere is heating up. Under pressure from circumstances and a lack of imagination, I immediately started strace'ing nginx and found what I was looking for. It turns out that at some point, the silly nginx cached an incoming 500 error as a response to the Yandex get feed.xml. We fixed it by adding exceptions to the cache settings:

Of course, the owner needs MORE, and the waves are slowly increasing. Weâre managing for now, but we started experimenting with memcached in advance, as Laravel supports it almost out of the box. I didnât want to manually set up memcached just for "playing around," so we set up a Docker image directly from the panel.

Well, I admit, I had to go into the shell and install the module via pecl. Right from . I canât say much about the increase in bandwidth yet, as there havenât been any significantly large spikes. The site engine connected to localhost:11211, stats are showing, memory is being used. If we like it, weâll see what to do next. Either we leave it as is or weâll install a ârealâ one directly on the OS. Or we might try Redis in the same way.
Next, we needed to set up a mailing list. No relays, just smtp authentication. I created an email address and using its credentials, weâll send out emails through PHP.

Not long ago, Plesk Obsidian (18.0) was released; we updated without fear based on past experience. Everything went smoothly; I donât even have much to say. On the plus side, the quality of the interface has significantly improved, becoming more modern and convenient in some areas. The Advanced Monitoring feature on Grafana is a cool addition.

I haven't delved into it in detail yet, but you can, for instance, set alerts for any parameter to your email. To the owner, lol.
Puisque je parle de l'interface, elle est réactive et fonctionne vraiment bien sur téléphone. Aux premiers stades, alors que nous essayions de trouver les paramÚtres PHP optimaux et d'autres, cela nous a beaucoup aidés. Surtout lorsque le programmeur, dans un accÚs d'enthousiasme, travaille à 23 heures, et moi, dans un accÚs d'enthousiasme, je bois de la vodka dans le bain, et il est URGENT de changer quelque chose.

Oh, au fait. Sur l'image, on voit que PHP Composer est arrivé. Nous ne l'avons pas encore essayé, mais disons que pour Laravel, il peut économiser quelques connexions en shell et un certain temps lors de l'installation des dépendances. Il existe un systÚme similaire pour Node.JS et Ruby.
Avec SSL, c'est simple. Si le domaine rĂ©sout Ă la bonne adresse, Letâs Encrypt s'installe en un clic et se met Ă jour lui-mĂȘme par la suite, tant pour le domaine que pour les sous-domaines, et mĂȘme pour les services de messagerie.

Plesk en lui-mĂȘme est assez agrĂ©able et stable au moment actuel. Il se met Ă jour tout seul et le systĂšme d'exploitation discrĂštement, consomme peu de ressources et fonctionne bien. Je ne me souviens mĂȘme pas d'un moment oĂč j'ai rencontrĂ© un dĂ©faut flagrant du produit. Il y a eu des problĂšmes, bien sĂ»r, mais ils Ă©taient soit dus Ă une mauvaise configuration, soit quelque part Ă la limite, donc je n'ai pas vraiment de reproches Ă faire. En gĂ©nĂ©ral, les impressions de travail avec Plesk sont positives. Ce qu'il lui manque, et il faut le comprendre, c'est toute forme de (n'importe quelle) mise en cluster. Ni LB, ni HA. On peut essayer, mais l'effort investi sera tel qu'il vaut mieux faire quelque chose diffĂ©remment dĂšs le dĂ©part.
Je pense que l'on peut faire un rĂ©sumĂ©. Dans le cas oĂč il n'y a pas d'administrateur, ou qu'il est peu prĂ©sent, lorsque le prix de l'hĂ©bergement et des sites hĂ©bergĂ©s dĂ©passe, disons, 100 unitĂ©s monĂ©taires, lorsqu'il ne s'agit pas de groupes d'hĂ©bergement bon marchĂ© avec 1500 sites sur un serveur, et que le dĂ©cideur doit choisir d'embaucher un administrateur Ă temps partiel, d'acheter un logiciel et d'embaucher un administrateur Ă moitiĂ© prix, ou de ne pas en engager du tout â il y a certainement du sens. Du point de vue d'un administrateur distant â c'est la mĂȘme chose. 10$ par mois, mais cela fait gagner du temps et procure de la flexibilitĂ© dans le travail sur une somme beaucoup plus Ă©levĂ©e. Par exemple, si on me demande fortement de prendre un projet similaire sous mon aile, je vais insister pour le transfĂ©rer sur Plesk.deJe veux partager quelques impressions sur l'utilitĂ© ou non d'un panneau de contrĂŽle pour un projet web commercial mono-serveur en prĂ©sence d'un administrateur trĂšs Ă temps partiel.
Source : habr.com
