Ця стаття — практичний посібник для тих, хто розгортає вебпроєкти на VPS або виділеному сервері й хоче отримати стабільну, передбачувану та масштабовану продуктивність без «магії» та зайвих панелей керування.
Фокус — класичний і перевірений стек:
Linux (Ubuntu LTS) + NGINX + PHP-FPM + MySQL / MariaDB
Саме такий підхід використовується у production-середовищах, де важливі контроль, прозорість і результат.
1. Базові принципи, які не варто ігнорувати
Перед будь-якими оптимізаціями потрібно прийняти просту істину:
Швидкість сайту починається не з кешів, а з правильної архітектури сервера.
Ключові принципи:
- мінімум зайвого ПЗ;
- чіткий поділ ролей (web → PHP → DB);
- контроль ресурсів, а не «авось витримає»;
- прогнозоване навантаження, а не експерименти на продакшені.
Якщо сервер передбачуваний — сайт буде швидким.
2. Операційна система: Ubuntu без зайвого
Рекомендації
- використовуйте Ubuntu LTS (22.04 або 24.04);
- не встановлюйте desktop-пакети;
- видаліть або не використовуйте все зайве (snap — якщо не потрібен).
Базові налаштування
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget unzip htop ufw- UFW — базовий firewall;
- htop — контроль навантаження.
Увімкніть тільки потрібні порти:
ufw allow OpenSSH
ufw allow 80
ufw allow 443
ufw enable3. NGINX: швидкий фронт без компромісів
NGINX у production виконує роль:
- reverse proxy;
- обробника статики;
- контролера підключень і буферів.
Ключові параметри
/etc/nginx/nginx.conf
worker_processes auto;
worker_connections 4096;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;Буфери
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;Це зменшує кількість зайвих операцій введення/виведення при великих запитах.
Стиснення
Увімкніть gzip або brotli для текстових типів (CSS, JS, JSON, XML). Це просте рішення, яке одразу зменшує обсяг переданих даних.
Захист від зловживань
Для базового захисту варто використовувати:
-
limit_conn -
limit_req
Це не DDoS-захист, але ефективний бар’єр від примітивних атак.
4. PHP-FPM: серце динаміки
PHP-FPM використовується незалежно від наявності панелі керування.
Це стандарт для NGINX + PHP у production.
Режими роботи
-
pm = dynamic— для більшості сайтів; -
pm = ondemand— для високого навантаження або обмеженої RAM.
Приклад робочої конфігурації пулу
ini
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500Розрахунок pm.max_children
доступна RAM для PHP / середнє споживання одного процесуНаприклад:
2 GB RAM / ~40 MB ≈ 50 процесів
Не «на око». Тільки заміри.
Slowlog
Увімкніть php-fpm slowlog — це ключовий інструмент пошуку повільних скриптів.
5. OPcache — без нього немає продуктивності
OPcache обов’язковий для будь-якого PHP-проєкту.
ini
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0На продакшені перевірка timestamp — зло.
Оновлення коду = рестарт PHP-FPM.
6. MySQL / MariaDB: стабільність важливіша за цифри
Базові принципи
- база даних — не кеш;
- SSD обов’язковий;
- InnoDB — стандарт.
Ключові параметри
ini
innodb_buffer_pool_size = 70% RAM
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECTO_DIRECT зменшує подвійне кешування між MySQL та ОС.
Query Cache у MySQL застарілий; у MariaDB може існувати, але не є обов’язковим і часто шкодить.
7. Кешування: сервер → застосунок
Правильна послідовність:
- OPcache
- FastCGI cache (NGINX)
- Redis / Memcached
- Кеші CMS
Redis
Використовуйте для:
- сесій;
- кешу даних;
- черг.
Не для всього підряд.
8. Файлова система та I/O
- ext4 або xfs;
- мінімум операцій запису.
/etc/fstab
UUID=xxx / ext4 defaults,noatime 0 1Менше I/O — більше стабільності.
9. Моніторинг і спостережуваність
Мінімум:
-
htop -
nginx stub_status -
php-fpm status
Ідеально:
- Netdata або Prometheus
Без моніторингу ви не оптимізуєте, а вгадуєте.
10. Логування як інструмент діагностики
Обов’язково:
-
nginx access / error logs; -
php-fpm slowlog; - логи бази даних.
Логи — це не сміття. Це відповідь на питання «чому повільно».
11. Безпека — базовий мінімум
SSH
- доступ лише по ключах;
- заборона root-логіну;
- нестандартний порт — опціонально.
Захист від брутфорсу
- fail2ban для SSH і вебсервісів.
SSL / TLS
- Let’s Encrypt + certbot;
- автоматичне оновлення сертифікатів;
- HTTPS відкриває HTTP/2 та HTTP/3.
12. Типові помилки
- «давайте ще один кеш»;
- PHP-FPM без обмежень;
- swap на продакшені;
- база і сайт на одному слабкому VPS;
- оновлення без рестарту сервісів;
- відсутність логів і моніторингу.
Висновок
Висока продуктивність — це:
- дисципліна;
- прості, перевірені рішення;
- контроль ресурсів;
- мінімалізм;
- базова безпека.
Класичний стек, налаштований руками, працює швидше, стабільніше й передбачуваніше, ніж будь-яка «чарівна» панель.
Якщо сервер контрольований — сайт буде швидким.
Коментарі2
Питання
А чому саме PHP а не Phyton?
Відповідь на питання
Дякую за питання!
PHP обрано тому, що стаття орієнтована на класичний LEMP-стек (Linux + NGINX + MySQL/MariaDB + PHP-FPM), який використовується в більшості CMS — WordPress, Drupal, Joomla. У таких проєктах PHP — природний вибір, бо він інтегрований у архітектуру.
Python теж підходить для вебу (Django, Flask), але це інший стек із іншими підходами до налаштувань і оптимізації. Стаття не порівнює PHP і Python, а показує, як правильно працювати саме з PHP-проєктами.