Ubuntu середовище для розробки: Nginx + MySQL + PHP-fpm

LEMP — акронім, що об’єднує у собі чотири основні технології: Linux, Nginx, MySql та PHP. По суті базовий веб-сервер. Сьогодні я розкажу, як налаштувати LEMP в операційній системі Ubuntu (поточна версія 20.04). Одразу зробимо застереження, ми налаштовуємо внутрішнє середовище розробника, а не робочий сервер. Деякі служби та сервіси нам не знадобляться і не будуть описані в цьому огляді.

Запускаємо термінал ctrl+alt+t й одразу перемикаємось на root користувача $ sudo su, щоб постійно не вводити пароль, адже робити доведеться це дуже часто. Переконаємося, що система оновлена, а в репозиторії доступні найсвіжіші пакети. По черзі вводимо команди $ apt-get update та $ apt-get upgrade. Після оновлення слід перезавантажити систему, можна безпосередньо з термінала командою $ reboot.

MySQL чи MariaDB. MariaDB — форк, окрема гілка в розробці MySQL (названа на честь молодшої доньки Марії творця та провідного розробника MySQL). Перевагою вважається вільне ліцензування GNU GPL, приріст продуктивності та деякі нові можливості. MariaDB є повністю сумісною зі стандартами MySQL (більше інформації читайте на wikiі). Я належу до консервативних адміністраторів й до останнього дотримуюся перевірених і усталених рішень. Проте важко не помічати переваги MariaDB. І якщо для локальної розробки в принципі різниці немає, чи буде інстальована класична система управління базами даних MySQL чи MariaDB, то для робочих серверів я все ж таки рекомендував останню.

ubuntu install mariadb

Виконуємо команду $ sudo apt-get install mariadb-server. Після інсталяції демон автоматично запуститься, але так залишати його не можна. Слід обмежити доступ та налаштувати root пароль: $ sudo mysql_secure_installation.

ubuntu mariadb settings
Enter current password for root (enter for none)
Тиснемо Еnter, щоб встановити нове root гасло
Change the root password? [Y/n]
Підтверджуємо зміну гасла — Y
New password
Задаємо новий пароль
Re-enter new password
Ще раз підтверджуємо щойно заданий пароль
Remove anonymous users? [Y/n]
Вилучаємо анонімного користувача — Y
Disallow root login remotely? [Y/n]
Забороняємо віддалений root доступ — Y
Remove test database and access to it? [Y/n]
Видаляємо тестову таблицю «test» — Y
Reload privilege tables now? [Y/n]
Перезавантажуємо привілеї — Y

PhpMyAdmin або трішки забігаючи наперед. У наступному огляді я встановлюватиму різні web-панелі, у тому числі і найпопулярніший web-клієнт для адміністрування баз даних PhpMyAdmin та популярну безкоштовну панель ISPconfig. Для того, щоб в майбутньому коректно інсталювався PhpMyAdmin, нам зараз потрібно виконати низку дрібних надбудов. Задаємо root пароль автентифікації для MariaDB (інакше phpmyadmin не зможе підключитися з-під рута) — echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root. Далі редагуємо файл налаштувань /etc/mysql/debian.cnf

ubuntu debian.cnf file

Для застосування нових налаштувань перезавантажуємо MariaDb (команди ідентичні, як і для MySql)

Старт
$ service mysql start
Стоп
$ service mysql stop
Перезавантаження
$ service mysql restart

Nginx. Сучасний безкоштовний та високопродуктивний web-сервер для Unix систем, що потіснив Apache2 і зайшов у маси, як певний стандарт. Водночас простий та дуже потужний інструмент. У більшості випадків буде безвідмовно працювати навіть, що називається «з коробки» і без особливих налаштувань. На сьогодні Nginx використовує переважна більшість всіх веб-серверів у світі. І навіть зараз, читаючи цей допис, десь там у глибині за лаштунками відпрацював саме він :). Інсталюємо командою $ apt-get install nginx.

ubuntu nginx install

PHP-FPM. PHP може працювати в декількох модах/режимах (іSAPI, він же просто API):

  • CLI SAPI — консольний режим (Command Line Interface)
  • apxs2 SAPI — модуль до сервера apache2
  • CGI SAPI — древній режим, який зараз практично на застосовується
  • FPM SAPI — Fast Process Manager, він нас і цікавить

В наш час практичне застосування мають мод до сервера apache2 (apxs2 SAPI) та FPM (fastcgi). Оскільки ми відмовилися від веб-сервера apache2 навіть в суміжному проксі режимі з nginx, то залишається для нас лише PHP-fpm. І це безумовно найкращий вибір з усіх можливих. «Голий», ні у що не вбудований PHP працює значно швидше та надійніше. Коли я вперше випробував fastcgi, а це було дуже давно, зітхнув з полегшенням від багаторічної боротьби з постійними витоками пам'яті і контролем процесів для «mod php». Перш ніж інсталювати свіжу збірку PHP, долучаємо до репозиторію актуальне джерело:
$ sudo add-apt-repository ppa:ondrej/php
$ apt-get update
Якщо цього не зробити, можна зіштовхнутись з помилкою: «E: Не можу знайти пакунок php*.*» («E: Unable to locate package php*.*-fp»).

Встановлюємо бажану PHP версію та необхідні розширення:

PHP 5.6
apt-get install php5.6 php5.6-cli php5.6-cgi php5.6-fpm php5.6-gd php5.6-mysql php5.6-imap php5.6-curl php5.6-intl php5.6-pspell php5.6-recode php5.6-sqlite3 php5.6-tidy php5.6-xmlrpc php5.6-xsl php5.6-zip php5.6-mbstring php5.6-soap php5.6-opcache libicu65 php5.6-common php5.6-json php5.6-readline php5.6-xml
PHP 7.0
apt-get install php7.0 php7.0-cli php7.0-cgi php7.0-fpm php7.0-gd php7.0-mysql php7.0-imap php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-zip php7.0-mbstring php7.0-soap php7.0-opcache php7.0-common php7.0-json php7.0-readline php7.0-xml
PHP 7.1
apt-get install php7.1 php7.1-cli php7.1-cgi php7.1-fpm php7.1-gd php7.1-mysql php7.1-imap php7.1-curl php7.1-intl php7.1-pspell php7.1-recode php7.1-sqlite3 php7.1-tidy php7.1-xmlrpc php7.1-xsl php7.1-zip php7.1-mbstring php7.1-soap php7.1-opcache php7.1-common php7.1-json php7.1-readline php7.1-xml
PHP 7.2
apt-get install php7.2 php7.2-cli php7.2-cgi php7.2-fpm php7.2-gd php7.2-mysql php7.2-imap php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-zip php7.2-mbstring php7.2-soap php7.2-opcache php7.2-common php7.2-json php7.2-readline php7.2-xml
PHP 7.3
apt-get install php7.3 php7.3-cli php7.3-cgi php7.3-fpm php7.3-gd php7.3-mysql php7.3-imap php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.3-tidy php7.3-xmlrpc php7.3-xsl php7.3-zip php7.3-mbstring php7.3-soap php7.3-opcache php7.3-common php7.3-json php7.3-readline php7.3-xml
PHP 7.4
apt-get install php7.4 php7.4-cli php7.4-cgi php7.4-fpm php7.4-gd php7.4-mysql php7.4-imap php7.4-curl php7.4-intl php7.4-pspell php7.4-sqlite3 php7.4-tidy php7.4-xmlrpc php7.4-xsl php7.4-zip php7.4-mbstring php7.4-soap php7.4-opcache libonig5 php7.4-common php7.4-json php7.4-readline php7.4-xml
PHP 8.0
apt-get install php8.0 php8.0-cli php8.0-cgi php8.0-fpm php8.0-gd php8.0-mysql php8.0-imap php8.0-curl php8.0-intl php8.0-pspell php8.0-sqlite3 php8.0-tidy php8.0-xsl php8.0-zip php8.0-mbstring php8.0-soap php8.0-opcache libonig5 php8.0-common php8.0-readline php8.0-xml
PHP 8.1
apt-get install php8.1 php8.1-cli php8.1-cgi php8.1-fpm php8.1-gd php8.1-mysql php8.1-imap php8.1-curl php8.1-intl php8.1-pspell php8.1-sqlite3 php8.1-tidy php8.1-xsl php8.1-zip php8.1-mbstring php8.1-soap php8.1-opcache libonig5 php8.1-common php8.1-readline php8.1-xml

Ну ось і все, базову інсталяцію LEMP сервера завершено. Можете відкрити в браузері адресу http://localhost/ та переконатись, що все працює — завантажиться індекс сторінка Nginx з вітанням.

nginx default page

І хоча наш веб-сервер повністю готовий та працездатний, на жаль, з точки зору користувача він поки не дуже зручний і привітний. В наступному огляді ми це виправимо, встановивши веб-панелі PhpMyAdmin та ISPconfig.

Доступні VPS/VDS Доступні VPS/VDS
2022-04-26   335