Налаштування LEMP стека на Ubuntu 22.04

У кожного DevOps-інженера щоденним завданням є розгортання web-сервера для розміщення веб-сайтів або додатків. Одним із найпопулярніших стеків для розгортання веб-серверів є LEMP (Linux, Nginx, MySQL, PHP). У цій статті ми розглянемо, як встановити та налаштувати LEMP стек на Ubuntu 22.04, а також наведемо приклади конфігурації.

У даній статті ми розглянемо, як встановити LEMP стек на Ubuntu, налаштувати його та наведемо приклади конфігурацій для різних цілей. Навчившись встановлювати та налаштовувати LEMP стек, ви зможете створювати та розміщувати веб-сайти або додатки, які будуть швидкими, надійними та безпечними.

Оновлення Ubuntu

Перед встановленням LEMP стеку рекомендується виконати оновлення пакетів Ubuntu. Для цього потрібно відкрити термінал і виконати команди:

sudo apt update
sudo apt upgrade

Встановлення Nginx

Nginx є веб-сервером, який дозволяє обслуговувати статичний та динамічний контент. Для встановлення Nginx виконайте наступні команди:

sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Після встановлення Nginx можна перевірити роботу веб-сервера, відкривши веб-браузер і ввівши в адресному рядку IP-адресу сервера Ubuntu. Ви повинні побачити сторінку привітання Nginx.

Встановлення MySQL

MySQL є реляційною базою даних, яка використовується для зберігання даних веб-додатків. Для встановлення MySQL виконайте наступні команди:

sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

Після встановлення MySQL потрібно налаштувати базу даних та користувача. Це можна зробити, виконавши команду:

sudo mysql_secure_installation

Встановлення PHP 7.4

PHP є скриптовою мовою, яка використовується для створення динамічних веб-сторінок. У нашому випадку ми встановимо PHP для роботи в режимі FastCGI. Для цього виконайте наступні команди:

sudo apt install php-fpm php-mysql
sudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm

Налаштування Nginx

Після встановлення всіх компонентів LEMP стеку потрібно налаштувати Nginx для роботи з PHP. Для цього потрібно відкрити файл конфігурації Nginx:

sudo nano /etc/nginx/sites-available/default

У цьому файлі потрібно знайти блок server та додати наступні рядки всередині блоку:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}

Після внесення змін потрібно перезапустити Nginx:

sudo systemctl restart nginx

Перевірка LEMP стеку

Після завершення всіх кроків потрібно перевірити, що LEMP стек правильно встановлено та налаштовано. Для цього можна створити простий PHP-скрипт та перевірити його роботу через веб-браузер.

  1. Створіть файл index.php у директорії /var/www/html/ за допомогою команди:
    sudo nano /var/www/html/index.php
  2. Вставте наступний код у файл index.php:
    <?php phpinfo(); ?>
  3. Збережіть та закрийте файл.
  4. Відкрийте веб-браузер і введіть в адресному рядку IP-адресу сервера Ubuntu: http://ваш_ip/index.php. Ви повинні побачити сторінку з інформацією про версію PHP, його налаштування та попередньо встановлені розширення.

Приклади конфігурації

  1. Конфігурація Nginx для використання SSL:

Для використання SSL необхідно згенерувати самопідписаний сертифікат та додати його в конфігурацію Nginx. Ось приклад конфігурації для сайту, що працює на SSL:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        root /var/www/html;
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}
  1. Конфігурація Nginx для використання кешу:

Для підвищення швидкості роботи сайту можна використовувати кеш Nginx. Ось приклад конфігурації для сайту з використанням кешу:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 60m;
proxy_cache_valid 404 1m;

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_cache_control;
        add_header X-Cache-Status $upstream_cache_status;
    }
}

Ця конфігурація дозволяє кешувати відповіді сервера на 60 хвилин для коду відповіді 200 та на 1 хвилину для коду відповіді 404.

3. Конфігурація MySQL для оптимізації RAM:

Конфігурація MySQL для оптимізації використання RAM — це одне з важливих завдань при налаштуванні бази даних на сервері. Правильна конфігурація дозволить ефективно використовувати ресурси сервера та скоротити час відповіді бази даних.

Ось приклад конфігурації MySQL, який можна використовувати для оптимізації використання RAM:

[mysqld]
key_buffer_size = 16M
max_allowed_packet = 64M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2

Давайте розглянемо кожен рядок у цій конфігурації:

  • key_buffer_size = 16M: Це розмір буфера індексів для таблиць MyISAM. Збільшення цього значення може покращити продуктивність при використанні таблиць MyISAM.
  • max_allowed_packet = 64M: Це максимальний розмір пакету, який може бути відправлений або отриманий через з’єднання MySQL. Встановлення вищого значення може дозволити передавати великі об’єми даних, такі як великі запити або файли.
  • thread_stack = 192K: Це розмір стека потоку. Він визначає, скільки оперативної пам’яті виділяється кожному потоку MySQL. Встановлення цього значення може допомогти управляти використанням пам’яті.
  • thread_cache_size = 8: Це кількість потоків, які будуть збережені в кеші для повторного використання. Це може зменшити навантаження на сервер, оскільки MySQL не буде створювати нові потоки при кожному запиті.
  • query_cache_limit = 1M: Це максимальний розмір кешу запитів. Він визначає максимальний розмір запиту, який буде збережено в кеші. Встановлення низького значення може допомогти уникнути переповнення кешу запитів.
  • query_cache_size = 16M: Це розмір кешу запитів. Цей параметр визначає, скільки пам’яті буде виділено для зберігання результатів запитів у кеші.
  • innodb_buffer_pool_size = 256M: Це розмір буфера пулу пам’яті для InnoDB. Збільшення цього значення може покращити продуктивність при використанні InnoDB.
  • innodb_log_buffer_size = 8M: Це розмір буфера журналу для InnoDB. Він визначає, скільки оперативної пам’яті виділяється для буфера журналу. Встановлення вищого значення може покращити продуктивність при використанні InnoDB.
  • innodb_flush_log_at_trx_commit = 2: Цей параметр визначає, як часто InnoDB повинен записувати дані в журнал при транзакції. Значення “2” означає, що дані будуть записуватись кожну секунду, що може допомогти покращити продуктивність.

Це приклад конфігурації, який можна використовувати для оптимізації використання RAM на сервері MySQL. Проте, перед тим як застосовувати цю конфігурацію, потрібно враховувати особливості вашого додатку та тестувати її на продуктивність. Також слід пам’ятати, що ефективна конфігурація залежить від багатьох факторів, таких як розмір бази даних, кількість запитів тощо.

Використання LEMP стеку призначене для просунутих користувачів. Для більш зручної та комфортної роботи з сайтами, враховуючи, що їх може бути розміщено на сервері декілька, для більшості користувачів буде оптимальним встановити панелі керування сервером, наприклад, FastPanel.

Висновок

На завершення, встановлення LEMP стеку на Ubuntu може здатися складним завданням, але при правильному виконанні всіх кроків ви зможете швидко та легко розгорнути веб-сервер та базу даних для своїх проєктів. Більш того, налаштування конфігурації Nginx дозволяє підвищити швидкість та безпеку роботи вашого сайту.

Оцініть статтю