Предыдущую часть читаем здесь → Как поднять LEMP сервер для локальной разработки: часть 2 — настройка сети и статический IP адрес

Приветствую, друзья-коллеги. В предыдущих обзорах мы поработали на славу — развернули серверную систему на виртуальной машине, настроили сеть и связали машины через статический IP адрес. Теперь пришла пора обустроить наш веб-сервер. Ну что ж, приступим к установке базовых компонентов и дополнительной начинки. Загружаем виртуальную машину и запускаем LEMP систему.

  Если , мой друг, тебе не ясно, о чем идет речь, причем здесь какой-то LEMP и где он находится, тогда я рекомендую прочесть два предыдущих обзора. Данный гайд — это третья часть из цикла статей!

Дабы постоянно не вводить пароль суперпользователя, а делать придется это весьма часто, набираем $ sudo su, так мы сэкономим кучу времени. Убедимся, что наша система обновлена и в репозитории доступны самые свежие пакеты, поочередно вводим команды $ apt-get update и $ apt-get upgrade. Не лишней после обновлений будет и перезагрузка сервера командой $ reboot

MySQL или MariaDB. MariaDB — это форк, отдельная ветка в разработке MySQL. Преимущества — свободное лицензирование GNU GPL, прирост производительности и некоторые новые возможности. MariaDB полностью совместима со стандартами MySQL (больше информации читайте на wiki). Я отношусь к числу консервативных администраторов и до последнего придерживаюсь проверенных и устоявшихся решений. Однако, это не тот случай. И если для локальной разработки разницы нет, то для реальных условий работы я бы все таки рекомендовал MariaDB. Когда-то Nginx существенно потеснил Apache2 и отвоевал у него громаднейшую долю всех серверов. Сейчас что-то подобное происходит и с MariaDB. В любом случае выбор за тобой, неправильных кейсов здесь нет. И да, MariaDB названа в честь младшей дочери Марии создателя и ведущего разработчика MySQL.

Ubuntu server — MariaDB installation

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

Ubuntu server — MariaDB root config
Enter current password for root (enter for none)
Жмем Еnter (у нас нет еще пароля)
Change the root password? [Y/n]
Подтверждаем смену root пароля — Y
New password
я задал qwerty
Re-enter new password
Подтверждаем новый пароль — qwerty
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

Несколько слов о конфигурации. Я указал простенький пароль qwerty. Для моей локальной песочницы и в целях обучения пароль не суть важен. В реальных условиях так не годится, потребуется задать сложный пароль, дабы не стать жертвой брутфорс перебора. Анонимного пользователя обязательно удалить, мы же не хотим устроить проходной двор :) Тестовую базу смело удаляй, она не пригодится. Если нужно, чтобы mysql сервер был доступен извне, редактируем файл /etc/mysql/mariadb.conf.d/50-server.cnf. Находим и комментируем следующую строчку #bind-address = 127.0.0.1.

PhpMyAdmin. Немного забежим вперед. В следующем обзоре я буду устанавливать разные web-панели, в том числе и самый популярный web-клиент для администрирования баз данных PhpMyAdmin. Для того, чтобы он корректно стал, нам сейчас нужно выполнить ряд мелких надстроек. Задаем нейтив пароль рут аутентификации для MariaDB (иначе phpmyadmin не сможет подключиться из-под рута) — echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root. Далее редактируем файл настроек /etc/mysql/debian.cnf. Запускаем известный из предыдущих обзоров Midnight Commander $ sudo mc, находим файл debian.cnf по указанному ранее пути и жмем F4 (редактирование).

Ubuntu server — etc mysql debain.cnf

Значения password (оба раза) меняем на наш root пароль, т.е. на qwerty. Сохраняем файл (F2) и покидаем Midnight Commander (F10). Для применения новых настроек перезагружаем MariaDb командой $ service mysql restart. И здесь к тебе может закрасться вопрос, а не опечатка ли это? Мы ведь устанавливали MariaDB, а перезагружаем MySQL. Нет, не опечатка, команды для запуска и перезагрузки демона остались прежними.

Старт
$ service mysql start
Стоп
$ service mysql stop
Перезагрузка
$ service mysql restart

Nginx. Современный бесплатный высокопроизводительный web-сервер для Unix систем, который потеснил Apache2 и зашел в массы как некий стандарт. Начальной изюминкой было проксирование статического контента и максимальная простота в настройке. Со временем проект усовершенствовался и рос. Игорю Сысоеву с командой удалось таки сотворить шедевр и подарить сообществу автомат Калашникова в мире веб-серверов. Быстрый высокопроизводительный и безотказный, но в тоже время весьма простой и понятный. На сегодняшний день Nginx юзают все, начиная от хостинг провайдеров и заканчивая высоконагруженными облачными кластерами.

Мы будем устанавливать Nginx «из коробки», не вдаваясь в тонкости дополнительных настроек и тюнинга, хотя поиграть там есть с чем :) В большинстве случаев, а тем более для нашей виртуальной среды разработки такой подход оправдан. Я же в свою очередь постараюсь отдельно написать гайд о тонкостях настройки и о тюнинге Nginx, но не сейчас, не в контексте этой статьи. Инсталлируем — $ apt-get install nginx.

Ubuntu server — etc mysql debain.cnf

PHP-fpm. PHP может работать в нескольких модах (SAPI, он же просто API):

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

В наши дни используется либо мод к серверу apache2, либо FPM (fastcgi). По скольку мы отказались от веб-сервера apache2 в любом варианте его использования, то остается для нас только PHP-fpm. И это определенно лучший выбор из всех возможных. «Голый», не во что не интегрированный php работает куда быстрее и надежнее. По сути он даже то и с http протоколом не взаимодействует, а обрабатывает запросы через fastcgi протокол. Когда я впервые опробовал fastcgi, вздохнул с облегчением от завершившейся многолетней борьбы с постоянными утечками памяти и контролем процессов для «mod php». Теперь касательно самой версии PHP. Возможно, когда ты будешь читать этот обзор, убежит немало воды, и все будут работать на php 8. Однако сейчас актуальной является версия php 7.2, именно ее я и буду инсталлировать. Как и в случае с Nginx, PHP ставим «из коробки» и не зацикливаемся на тюнинге — $ apt-get install php7.2-fpm.

Ubuntu server — PHP 7.2 install

Дополнения к PHP. Модулей и расширений существует не мало. По мере разработки кому-то потребуются те или другие дополнения, а кто-то обойдется самым минимумом. Давайте для наглядности установим несколько базовых допов, которые точно нам пригодятся: $ apt-get install php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap php7.2-cli php7.2-cgi php7.2-curl php7.2-mbstring php7.2-simplexml

Ubuntu server — PHP 7.2 install extensions

Исходя из названий пакетов не сложно догадатся, за что они отвечают — поддержка баз данных, графика, почтовый imap, curl ... На самом деле список может быть очень длинным. Для рабочей песочницы — один набор, для shared-хостинга другой, а для production сервера — третий. Устанавливайте дополнения по мере необходимости.

Timezone. Если не задать конкретный часовой пояс, PHP будет использовать серверное время. В моем случае это приемлемо. Для редактирования таймзоны нужно внести соответствующие изменения в файл глобальных настроек /etc/php/7.2/fpm/php.ini. Находим директиву date.timezone и присваиваем нужный часовой пояс:

  • date.timezone="Europe/Berlin"
  • или
  • date.timezone="Europe/Kiev"
  • или
  • date.timezone="Europe/Moscow"
  • ...

Не достаточно просто сохранить файл, необходимо сделать релод или перезагрузку PHP. Используй следующие команды для управления демоном php-fpm:

Релод
service php7.2-fpm reload
Рестарт
service php7.2-fpm restart
Стоп
service php7.2-fpm stop
Старт
service php7.2-fpm start

  Я поднимаю виртуальную машину для отладки и разработки проектов, поэтому некоторые сервисы и web-интерфейсы мне просто не понадобятся. К примеру, мне незачем устанавливать отдельный почтовик Postfix и веб-панель RoundCube. Также мне без надобности DNS сервер и настройка Fail2ban. Если, мой друг, ты собираешь реальный рабочий сервак,обрати на это внимание!

В принципе на этом наш план обозначенных работ выполнен — мы установили сервер Nginx, разобрались с PHP, узнали об fastcgi, определились с сервером баз данных и настроили его. Осталось, так сказать, окультурить все это дело, привести в привычный вид — установить веб-панели PhpMyAdmin и ISPconfig. Но это уже в следующем обзоре ;)


2020-05-10
  226