Как да осигурим по-стабилна работа на сървър за WordPress / WooCommerce – мерки за превенция

Bulgarian infographic about making servers more stable, with server racks on the left, a shield icon on the right, and six feature icons (database, logs, root access, kernel protection, NVMe optimization, crash risk).

В практиката ни понякога срещаме ситуации, в които сървърът спира внезапно. В част от случаите причината не е липса на мощност, а неправилно разпределение на ресурсите.

Най-честият проблем е запълване на root дяла (/), което води до спиране на MySQL и съответно до недостъпност на всички сайтове.

По-долу са описани конкретни, работещи в production насоки за стабилизиране на сървъра.

1. Изнасяне на MySQL извън root дяла

По подразбиране MySQL съхранява базите в /var/lib/mysql, което е част от root дяла. При растеж на базите това води до запълване на системния диск.

Правилният и безопасен подход е преместване на данните към /home чрез символна връзка (symlink), без промяна на конфигурацията на MySQL.

mkdir /home/mysql
chown mysql:mysql /home/mysql

systemctl stop mysqld

rsync -aHAX /var/lib/mysql/ /home/mysql/

mv /var/lib/mysql /var/lib/mysql_old
ln -s /home/mysql /var/lib/mysql

restorecon -Rv /home/mysql

systemctl start mysqld

Този подход е съвместим с DirectAdmin и позволява лесен rollback при нужда.

 

2. systemd настройка за достъп до /home

По подразбиране systemd може да блокира достъпа на MySQL до директорията /home. Това води до грешка от тип Permission denied.

Решението е добавяне на override конфигурация:

mkdir -p /etc/systemd/system/mysqld.service.d
nano /etc/systemd/system/mysqld.service.d/override.conf
[Service]
ProtectHome=false
systemctl daemon-reload
systemctl restart mysqld

Това гарантира, че MySQL има достъп до новото местоположение на базите.

 

3. Контрол на логовете (logrotate)

Логовете са една от основните причини за запълване на диска. Без контрол те могат да достигнат десетки гигабайти.

Добра практика е да се използва автоматична ротация:

/usr/local/lsws/logs/*.log
/var/log/httpd/domains/*.log
{
    daily
    maxsize 50M
    rotate 5
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

Това ограничава размера на логовете и предотвратява бъдещи проблеми.

 

4. Kernel защити и автоматично възстановяване

При критични системни грешки е важно сървърът да може да се рестартира автоматично.

nano /etc/sysctl.d/99-kernel-hardening.conf
kernel.panic=10
kernel.panic_on_oops=1
kernel.softlockup_panic=1
kernel.watchdog_thresh=20
sysctl --system

Тези настройки намаляват downtime при сериозни проблеми.

 

5. IO оптимизация за по-стабилен диск

Linux по подразбиране задържа голямо количество данни в паметта преди да ги запише на диск. Това може да доведе до резки натоварвания (spikes).

Оптимизацията се прави чрез:

nano /etc/sysctl.d/99-kernel-hardening.conf
vm.dirty_ratio=10
vm.dirty_background_ratio=5
sysctl --system

Тези стойности водят до по-чести, но по-малки записи, което прави системата значително по-стабилна при натоварване.

 

6. Реален ефект от тези промени

След прилагане на горните настройки:

  • root дялът остава свободен
  • MySQL работи от по-голям диск
  • логовете са контролирани
  • IO натоварването е по-равномерно
  • рискът от срив значително намалява

Заключение

Стабилността на сървъра не зависи само от хардуера. В много случаи тя е резултат от правилна конфигурация и добра структура на системата.

Малките технически корекции могат да предотвратят големи проблеми.