Centos 8 настройка nginx php fpm

Обновлено: 03.07.2024

Nginx –один из самых популярных веб-серверов в мире, он может обслуживать очень большие сайты с высоким трафиком, как правило, расходуя при этом меньше ресурсов, чем Apache. Также его можно использовать в качестве обратного прокси-сервера.

Данный мануал поможет установить Nginx на сервер CentOS 8.

Требования

Для работы нужен сервер CentOS 8, настроенный по этому мануалу.

1: Установка Nginx

Пакет Nginx можно установить с помощью dnf, нового стандартного пакетного менеджера CentOS 8.

Чтобы установить Nginx, введите эту команду:

sudo dnf install nginx

Чтобы подтвердить установку, введите y. После этого dnf установит Nginx и все его зависимости на ваш сервер.

После завершения установки вам нужно добавить веб-сервер в автозагрузку и запустить его:

sudo systemctl enable nginx
sudo systemctl start nginx

2: Настройка брандмауэра

Прежде чем запустить Nginx, нужно настроить брандмауэр firewalld для поддержки его трафика через порт 80.

sudo firewall-cmd --permanent --list-all

Вы увидите такой вывод, если все работает правильно:

Чтобы изменения вступили в силу, нужно перезапустить брандмауэр:

sudo firewall-cmd --reload

После этого ваш сервер Nginx полностью готов к работе с внешними пользователями.

3: Тестирование веб-сервера

На данный момент ваш веб-сервер должен работать. Чтобы убедиться, что это действительно так, попробуйте получить доступ стандартной приветственной странице, которую можно найти в браузере по домену или внешнему IP-адресу сервера.

Если у вас нет домена, а своего IP-адреса вы не знаете, вы можете узнать его с помощью командной строки. Введите:

ip addr show eth0 | grep inet | awk '< print $2; >' | sed 's/\/.*$//'

Команда вернёт несколько строк. Проверьте каждый полученный адрес в браузере.

В качестве альтернативы вы можете проверить, как ваш сервер видят другие точки в интернете. Для этого используйте команду:

Узнав свой IP-адрес, введите его в браузер, чтобы убедиться, что веб-сервер работает должным образом.

На экране должна появиться стандартная страница Nginx:

Если вы видите такую страницу, ваш веб-сервер работает правильно.

4: Управление процессами Nginx

Теперь давайте рассмотрим несколько основных команд для управления веб-сервером.

Чтобы остановить Nginx, введите:

sudo systemctl stop nginx

Чтобы запустить веб-сервер, введите:

sudo systemctl start nginx

Для перезапуска используйте эту команду:

sudo systemctl restart nginx

Чтобы обновить настройки Nginx, не сбрасывая соединения, используйте команду:

sudo systemctl reload nginx

По умолчанию Nginx автоматически запускается вместе с сервером. Это поведение можно выключить при помощи команды:

sudo systemctl disable nginx

Чтобы возобновить автозапуск сервиса, введите:

sudo systemctl enable nginx

5: Важные файлы и каталоги Nginx

Теперь вы знаете, как управлять сервисом. Давайте рассмотрим важные файлы и каталоги веб-сервера Nginx.

  • /usr/share/nginx/html: содержит текущий контент сайта. По умолчанию в нём находится только стандартная посадочная страница, которую вы уже видели. Этот каталог можно изменить в конфигурационном файле Nginx.
  • /etc/nginx: каталог настроек nginx, в котором хранятся все конфигурационные файлы.
  • /etc/nginx/nginx.conf: главный конфигурационный файл Nginx, содержащий глобальные настройки веб-сервера.
  • /etc/nginx/conf.d/: каталог для хранения виртуальных хостов, которые в контексте Nginx называются блоками server. Как правило, они нужны для того, чтобы обслуживать разные домены в рамках одного сервера. Обычно имя файла виртуального хоста совпадает с доменом сайта, для которого он предназначен (по формату your_domain.conf).

6: Настройка виртуального хоста (опционально)

На веб-сервере Nginx можно использовать виртуальные хосты (также они называются блоками server) для размещения нескольких доменов на одном сервере и изоляции их настроек.

Примечание: Здесь мы используем условный домен your_domain, а вы должны заменить его собственным доменом.

В CentOS 8 файлы блоков server хранятся в каталоге /etc/nginx/conf.d в формате .conf. В этой системе Nginx по умолчанию обслуживает документы из каталога /usr/share/nginx/html. Этого хватит для одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты.

Мы не будем редактировать стандартный каталог /usr/share/nginx/html, вместо этого мы создадим каталог /var/www для тестового сайта your_domain (а /usr/share/nginx/html останется как каталог по умолчанию, который будет обслуживаться, если запрос клиента не соответствует другим сайтам).

Создайте каталог для your_domain, используя опцию -p для создания всех необходимых родительских каталогов:

sudo mkdir -p /var/www/your_domain/html

Затем установите права на каталог с помощью переменной $USER:

sudo chown -R $USER:$USER /var/www/your_domain/html

Затем создайте образец страницы index.html с помощью текстового редактора. В CentOS 8 по умолчанию установлен редактор vi. Он очень мощный, но новичкам с ним бывает трудно работать. При желании вы можете установить редактор nano, он немного проще:

sudo dnf install nano

Теперь с его помощью создайте файл index.html:

Вставьте в файл такой HTML-код:

<html>
<head>
<title>Welcome to your_domain</title>
</head>
<body>
<h1>Success! Your Nginx server is successfully configured for <em>your_domain</em>. </h1>
<p>This is a sample page.</p>
</body>
</html>

Сохраните и закройте файл (нажмите Ctrl+X, Y, а затем Enter).

Чтобы Nginx смог обслуживать этот контент, необходимо создать файл виртуального хоста с правильным набором директив. Мы не будем изменять конфигурации по умолчанию напрямую, вместо этого мы создадим новый файл /etc/nginx/conf.d/your_domain.conf:

sudo nano /etc/nginx/conf.d/your_domain.conf

Вставьте в файл следующие конфигурации:

Сохраните и закройте файл.

Проверьте ошибки в конфигурационных файлах Nginx:

Если ошибок нет, вы увидите такой вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите Nginx, чтобы новые файлы вступили в силу:

sudo systemctl restart nginx

Прежде чем вы сможете протестировать работу своего нового сайта в браузере, вам нужно обновить контекст SELinux, иначе веб-сервер не сможет обслуживать контент из каталога /var/www/your_domain.

Success! Your Nginx server is successfully configured for your_domain.
This is a sample page.

Эта страница обслуживает HTML-код из файла пользовательской страницы, которую обслуживает наш новый блок server. Если вы видите в браузере эту фразу, Nginx правильно обслуживает ваш домен.

Заключение

Теперь веб-сервер Nginx установлен и готов к работе. Используйте его для обслуживания контента вашего сайта. Также теперь вы можете установить более сложный программный стек для поддержки сайта.

В связи с выходом нового релиза популярной операционной системы пришло время актуализировать некоторые статьи. Сегодня я настрою производительный веб сервер CentOS 8 на свежих версиях nginx, php-fpm, где сам php версии 7.2. Сейчас пока нет необходимости использовать сторонние репозитории для php, так как в стандартных присутствует свежая и актуальная версия.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Цели статьи

  1. Описать общий принцип настройки web сервера на базе nginx.
  2. Показать, как установить актуальные версии nginx, php-fpm и mariadb.
  3. Привести примеры своих конфигов для перечисленных сервисов.
  4. Настроить бесплатные ssl сертификаты let's encrypt для сайтов.
  5. Показать, как настроить selinux для web сервера nginx.
  6. Записать и показать видео настройки веб сервера.

Данная статья является частью единого цикла статьей про сервер Centos.

Введение

В этой статье я расскажу, как настроить производительный web сервер на базе популярного стека технологий - nginx и php-fpm. В связи с выходом нового релиза Centos 8, многие статьи на эту тему стали не актуальны, так как версии софта в базовых репозиториях обновились и тот же php нет смысла ставить из стороннего репозитория.

Работать будем на сервере под управлением CentOS 8. Если у вас его еще нет, то читайте мои статьи на тему установки и базовой настройки centos. Не забудьте уделить внимание теме настройки iptables. В данной статье я ее не буду касаться, хотя тема важная для web сервера.

В самом конце я покажу, как настроить SELinux применительно к данному веб серверу. Приведу список правил, которые нужно будет применить конкретно к моей статье. Правила не универсальные. В зависимости от настройки web сервера, они будут отличаться. Если вам не хочется тратить на это свое время, или вам он не нужен, то просто отключите selinux. Если же нужен, то пока только добавляйте конфиги, но ничего не запускайте, пока не дойдете до самого конца. С включенным и не настроенным SELinux все равно ничего не заработает.

В своей тестовой среде я буду использовать следующие сущности.

Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:

Процессор 4 ядра
Память 4 Gb
Диск 80 Gb SSD

Это кастомная настройка параметров. Они не оптимальны по цене, но мне были нужны именно такие.

Установка nginx на CentOS 8

Для установки самой свежей стабильной версии nginx на centos подключим официальный репозиторий. Я использую именно родной репозиторий по следующей причине. Мне больше нравится начальное расположение и формат конфигурационных файлов. Устанавливая софт из официальных репозиториев ты помимо того, что имеешь самую свежую и актуальную версию nginx, так и расположение и формат конфигурационных файлов будет одинаковый во всех системах.

Банальный пример. Если ставить nginx из официального репозитория centos 8, настройка дефолтного виртуального хоста будет прямо в основном конфиге nginx.conf . Мне лично это не удобно, так как в этом файле я храню набор настроек без привязки к виртуальным хостам. Если установить nginx из официального репозитория, конфигурация дефолтного хоста будет в отдельном конфиге default.conf .

Подключаем репозиторий nginx в centos 8. Я обычно использую mainline версию. Она имеет все нововведения на борту и достаточно стабильна. По крайней мере у меня никогда проблем с ней не было. Если вы хотите стабильную версию, то используйте репозиторий stable. Рисуем конфиг репозитория /etc/yum.repos.d/nginx.repo.

Устанавливаем nginx на сервер.

Запускаем nginx и добавляем в автозагрузку.

Если ее не видите, скорее всего у вас включен и не настроен firewalld. В начале статьи я приводил ссылку на статью с настройкой сервера и настройкой iptables. Если вы с ними познакомились, значит либо уже открыли нужные порты, либо сейчас это сделаете. Для тех, кто не хочет со всем этим разбираться, я просто покажу, как открыть порты 80 и 443 на firewalld, который используется в centos 8 по-умолчанию.

Проверить, открылись ли порты можно командой.

Теперь выполним небольшую начальную настройку. Очень подробно вопрос настройки nginx я разбирал отдельно, рекомендую познакомиться со статьей. Там описано все то, что используется далее в конфигах. Здесь же я их просто привожу, без комментариев и объяснений. Начнем с основного конфига /etc/nginx/nginx.conf.

Сохраните конфиг и проверьте его корректность командой:

Если ошибок нет, то можно применить.

Теперь создадим структуру каталогов для сайтов. Я обычно все сайты размещаю отдельно, например в /web/sites. Создадим там два сайта - основной и панель phpmyadmin для него. Привожу просто для примера, вешать на отдельный виртуальный хост phpmyadmin не обязательно, хотя в некоторых случаях это бывает удобно.

Создаем файл с логином и паролем для доступа.

В данном случае pma - имя пользователя, а пароль будет задан в консоли при выполнении второй команды.

Сохраняем конфиги хостов и движемся дальше. Пока nginx перезапускать не надо. Некоторые сущности, которые упоминются в конфиге, еще не настроены. Одну из них сразу добавим, чтобы не забыть. Нам надо сформировать файл dhparam.pem . Процесс длится долго, до получаса на слабых виртуалках. Этот файл нужен для повышения безопасности и получения максимального рейтинга ssl. Насколько этот параметр критичен в реальности, не берусь судить. Если тороплюсь, то настраиваю без него.

Установка php-fpm

Установка php-fpm в Centos 8 сильно упростилась по сравнению с предыдущей версией, потому что в базовом репозитории хранится актуальная версия php 7.2 , которой можно пользоваться. Пока нет необходимости подключать сторонние репозитории, так как версия 7.2 вполне свежа и актуальна. Если у вас нет необходимости использовать что-то новее, то можно остановиться на этой версии.

Устанавливаем php и php-fpm в CentOS 8, а так же некоторые популярные модули.

Перезапускаем php-fpm и проверяем, запущен ли сокет.

Все в порядке, php-fpm запущен и готов к работе. Cделаем еще одну важную настройку. Назначим nginx владельцем директории для хранения сессий php.

Более безопасно было бы для каждого сайта делать отдельную директорию для сессий и определять ее в настройках php. Но это уже частный случай. В общем случае, можно оставить так.

Возможно, вам захочется поставить более свежу версию php. Как это сделать, читайте в отдельной статье - обновление php-7.2 до 7.4 в CentOS 8.

Для того, чтобы проверить работу нашего веб сервера, нужно установить ssl сертификаты. Без них nginx с текущим конфигом не запустится. Исправляем это.

Настройка бесплатного ssl сертификата Lets Encrypt

Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt. Он находится в репозитории epel, поэтому подключаем его, если еще этого не сделали ранее.

Наша следующая задача - получить бесплатные сертификаты. Для этого временно остановим nginx, если он вдруг оказался запущен и подтвердим владение доменами с помощью temporary webserver, который certbot поднимет сам на время верификации доменов.

После того, как получили сертификаты, можно проверить конфиг nginx и запустить его. Ошибок быть не должно. Если они есть, то разбирайтесь с ними, возможно где-то ошиблись.

Настройка nginx на этом завершена. Он должен корректно запуститься и работать в рабочем режиме.

Приводим его к следующему виду:

По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:

Все, с сертификатами закончили. Двигаемся дальше в настройке web сервера.

Установка mariadb на CentOS 8

Дошла очередь до установки сервера баз данных mysql для web сервера на CentOS 8 — MariaDB. Я буду устанавливать последнюю стабильную версию на момент написания статьи — 10.5 из официального репозитория с сайта mariadb.

Для того, чтобы подключить репозиторий MariaDB, можно воспользоваться специальной страницей на официальном сайте, где можно задать параметры системы и получить конфиг репозитория.

В моем случае конфиг получился следующий.

Устанавливаем последнюю версию mariadb на centos.

Запускаем mariadb и добавляем в автозагрузку.

Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по умолчанию. Авторизацию через сокет отключаем.

Сервер баз данных mysql для нашего web сервера готов. Продолжаем настройку. Установим панель управления mysql — phpmyadmin.

Установка phpmyadmin

Для того, чтобы установить phpmyadmin на наш web сервер, достаточно просто распаковать в директроию с виртуальным хостом исходники панели. Все остальные настройки у нас уже готовы, в том числе виртуальный хост с tls сертификатом.

Архив упакован в zip. Если у вас нет на сервере пакета unzip, установите его.

Распаковываем исходники в директорию виртуального хоста.

Более подробно вопрос установки и настройки phpmyadmin я рассматривал отдельно. Можете зайти в панель и создать базу mysql для тестового сайта, например, wordpress. Затем через консоль загрузить исходники cms и распаковать их.

На этом основная настройка web сервера завершена. Он уже полностью работоспособен. Если вам достаочно этого функционала, то можете сразу переходить к настройке ротации логов.

Доступ к сайту по sftp

Если вы администратор и единственный пользователь, то больше можно ничего не делать. Вы и так сможете загрузить на сервер все что нужно тем или иным способом. Если же вы будете передавать управление сайтами другим людям, им нужен доступ к директории с исходниками сайта. Раньше для этих целей повсеместно использовали ftp. Если вы хотите так сделать, у меня есть статья по настройке ftp сервера vsftpd.

Я же предлагаю использовать sftp по нескольким причинам:

  1. Он безопаснее.
  2. Его быстрее настроить.
  3. Не надо отдельно настраивать firewall.

Статью по настройке sftp доступа я уже тоже писал, все подробности там. Здесь без комментариев выполним необходимые действия.

Создаем пользователя для подключения к сайту и добавляем его в группу sftp. Я обычно использую имя пользователя пересекающееся с названием сайта. Так удобнее управлять.

Открываем конфиг ssh по пути /etc/ssh/sshd_config и комментируем там одну строку, добавляя далее несколько новых.

Перезапускаем службу sshd.

Работа с сайтами разных пользователей на одном веб сервере

Самый простой способ решить проблему с правами доступа, это сделать владельцем папки с сайтом пользователя, который подключается по sftp. Тогда он сможет нормально работать с файлами, загружать и удалять их. Если доступ в качестве группы установить для nginx, то в целом все будет работать. Для каких-то сайтов такой вариант может оказаться подходящим. То есть сделать надо вот так:

И не забываем обратно вернуть владельца на наш chroot каталог, иначе не подключимся по sftp.

А теперь сделаем все красиво. Назначаем владельцем содержимого нашего сайта только отдельного пользователя.

Еще раз обращаю внимание на важный нюанс. Chroot доступ для sftp не будет работать, если владельцем директории, куда чрутимся, будет не root. Будете получать ошибку.

Возвращаем обратно рута владельцем корня chroot.

Перезапускаем nginx и php-fpm и проверяем работу сайта от отдельного пользователя.

Я рекомендую подключиться по sftp, закинуть еще раз исходники wordpress уже по sftp, установить его и добавить новую тему, чтобы проверить, что все корректно работает. По аналогии проделанные выше действия повторяются для всех остальных сайтов.

Настройка SELinux для web сервера

Раздел для тех, кто хочет настроить SELinux на своем web сервере. Сначала ставим пакет policycoreutils-python-utils если он еще не установлен. Он нам нужен для утилиты semanage.

Дальше нам нужно подготовить набор правил для selinux при нашей текущей конфигурации web сервера. Общий смысл их следующий:

  1. У нас нестандартная директория для сайтов - /web/sites, по-умолчанию запросы будут блокироваться.
  2. Надо разрешить nginx взаимодействовать с сокетом.
  3. Позволить nginx управлять параметром rlimit_nofile.
  4. И еще некоторое количество запретов, которые сможете сами проверить.

Суть описываемой дальше настройки selinux сводится к тому, чтобы следить за ограничениями, которые он накладывает на работу сервиса и добавлять исключения в правила, если вы с ними согласны. Методом нескольких итераций готовится набор правил selinux.

Я для этого пользуюсь следующими командами. Просмотр сработавших блокировок selinux для nginx.

Сформировать список правил для selinux.

Этот файл можно потом вручную дополнять или изменять. После того, как все правила будут собраны в один файл, готовлю модуль для selinux.

В конце загружаю этот модуль в selinx.

Можно не собирать правила самому, а сразу получить готовый модуль для загрузки и установить его.

Потом повторите все то же самое для php-fpm и можно проверять работу web сервера. Если в процессе проверки окажется, что что-то еще не работает, опять смотрите audit.log и добавляйте новые правила, пересобирайте и загружайте модуль. Так, через несколько итераций, получится рабочий набор правил для selinux.

Убедиться, что модуль загружен, можно командой.

В целом, по selinux все. Мы просто разрешили все, что веб сервер просил. По идее, надо вдумчиво во всех правилах разбираться и разрешать только то, что считаешь нужным. Я честно скажу, что selinux знаю не очень хорошо. Дальше загрузки готовых модулей и автоматического создания модулей с помощью audit2allow я не двигался. Руками модули никогда не писал. Если есть какой-то более осмысленный и правильный способ настройки selinux на кастомной конфигурации веб сервера, буду рад полезной информации.

Ротация логов веб сервера nginx

Последний штрих в настройке web сервера — ротация логов виртуальных хостов. Если этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером лог файла.

У нас уже будет файл конфигурации logrotate для nginx, который был создан во время установки — /etc/logrotate.d/nginx. Приведем его к следующему виду:

Я предлагаю ротировать файлы логов по достижению ими размера в 10Мб, сжимать после ротации и хранить 10 архивов с логом. Для виртуальных хостов, работающих от отдельного пользователя, новые логи создаются сразу с соответствующими правами, чтобы у пользователя был доступ к ним. Для всех остальных хостов можно использовать самое первое правило, просто добавляя туда новые пути для логов.

Обращаю внимание на важный нюанс при ротации логов по размеру. Скорее всего в общем случае она будет работать не так, как вы ожидаете. Подробности читайте по ссылке. Я привел пример простой конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.

На этом все. Я рассмотрел все основные моменты, которые необходимы для установки и настройки производительного web сервера на основе nginx и php-fpm последних версий. При этом рассказал о некоторых вещах, которые повышают удобство и гибкость эксплуатации сервера.

Видео

В завершении полное видео настройки web сервера на основе приведенной статьи. Если у кого-то что-то не получается, посмотрите, как это сделал я.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Тема настройки веб сервера обширна. Рассмотреть все варианты в одной статье невозможно, так как функционал будет разниться, в зависимости от назначения сервера. Тем не менее приведу еще несколько ссылок на материалы, которые имеют отношение к настройке web сервера:

    или отдельных сайтов. и веб сайта с помощью zabbix. .
  • Если у вас будут проблемы с ботами, то пригодится статья по блокировке доступа к сайту по странам или защита сайта от ddos.

Если еще что-то полезное вспомню, добавлю ссылки. Пока вроде все. Статья получилось большой и насыщенной. Было не просто все собрать воедино, проверить, связать между собой и оформить в последовательное повестование. Мог где-то ошибиться. Жду комментариев и отзывов. Написал все по своему опыту, как я обычно настраиваю веб сервера. Предполагаю что-то можно сделать более удобно и правильно. Буду рад научиться.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.


Установка Nginx

Итак приступим к установке и начнем с установки пакета Nginx, устанавливать будем из стандартного репозитория CentOS8.

Выполним для установки Nginx команду:


По окончании установки запустим сервер Nginx и добавим его в автозагрузку CentOS 8 выполним:

После чего, проверим что сервер Nginx запущен:


Далее добавим 80 порт Nginx и 443 порт в исключение фаерволла CentOS8 и перезапустим службу firewalld.



Установка PHP-FPM

Теперь установим php-fpm при помощи пакетного менеджера CentOS8 dnf:



Далее настроем web-сервер php-fpm для работы его с proxy-сервером Nginx на CentOS8.

Для начала откроем конфигурационный файл Nginx который располагается по следующему пути /etc/nginx/default.d/php.conf и приведем его к следующему виду:

Редактируем секцию index:

Это настройка будет искать в первую очередь индексный файл php, а уже потом html и htm файл.

Далее редактируем серверную часть location

Далее в корневом каталоге создадим файл index.php, для этого выполним:

Добавим следующее содержимое в файл, которое отобразит информацию об установленной версии php и его модулях:

Перезапустим наш Nginx и обновим страницу перед нами появится информация об установленной версии php и модулях.

На этом установка php-fpm и Nginx окончена, далее мы рассмотрим как сгенирировать и установить сертификат Lets Encrypt.

Программный стек LEMP — это комплекс программного обеспечения, используемый для обслуживания динамических веб-страниц и веб-приложений, написанных на PHP. Название LEMP — это акроним, включающий операционную систему Linux с веб-сервером Nginx (произносится “Engine-X”). Данные серверной части хранятся в базе данных MySQL, а динамическая обработка выполняется PHP.

За слой базы данных в стеке LEMP обычно отвечает сервер базы данных MySQL, но до выхода CentOS 8 сервер MySQL не был доступен в репозиториях CentOS по умолчанию. В результате MariaDB, разработанное сообществом энтузиастов ответвление MySQL, получило широкое распространение в качестве альтернативы MySQL и используемой по умолчанию системы управления базами данных при использовании стека LEMP на серверах CentOS. MariaDB представляет собой упрощенную замену оригинального сервера MySQL, что на практике означает, что вы можете переключаться на MariaDB без необходимости внесения каких-либо изменений в конфигурацию или код вашего приложения.

В этом руководстве вы установите стек LEMP на сервер с CentOS 8. Хотя MySQL доступен в используемых по умолчанию репозиториях в CentOS 8, в этом руководстве мы рассмотрим процесс настройки стека LEMP с MariaDB в качестве системы управления базами данных.

Предварительные требования

Для выполнения этого обучающего руководства вам потребуется доступ к серверу CentOS 8, пользователь без прав root с привилегиями sudo и и активный брандмауэр, установленный на сервере. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера CentOS 8.

Шаг 1 — Установка веб-сервера Nginx

Для демонстрации веб-страниц посетителям нашего сайта мы будем использовать современный и эффективный веб-сервер Nginx. Мы будем использовать диспетчер пакетов dnf , который является новым диспетчером пакетов, используемым в CentOS 8 по умолчанию, для установки этого программного обеспечения.

Установите пакет nginx с помощью следующей команды:

При получении запроса введите y для подтверждения того, что вы хотите установить nginx.

После завершения установки запустите следующую команду, чтобы активировать и запустить сервер:

Чтобы подтвердить применение изменений, вы можете использовать следующую команду:

Вывод будет выглядеть следующим образом:

Выполните перезапуск конфигурации брандмауэра, чтобы изменения вступили в силу:

После добавления нового правила брандмауэра вы можете проверить, запущен ли сервер, запросив доступ к публичному IP-адресу или доменному имени сервера из вашего веб-браузера.

Примечание: если вы используете DigitalOcean в качестве провайдера хостинга DNS, вы можете изучить нашу документацию для продукта для получения подробных инструкций по настройке нового доменного имени и указать ваш сервер.

Если у вас нет доменного имени, указывающего на ваш сервер, и вы не знаете публичный IP-адрес вашего сервера, вы можете найти его, введя следующую команду:

Команда выведет несколько IP-адресов. Вы можете попробовать каждый из них в своем браузере.

Также вы можете проверить доступность IP-адреса из других мест в интернете:

Введите полученный адрес в браузере, после чего вы попадете на страницу Nginx по умолчанию:

Если вы увидите эту страницу, это значит, что ваш веб-сервер установлен корректно.

Шаг 2 — Установка MariaDB

Теперь, когда у вас есть рабочий и запущенный веб-сервер, вам нужно установить систему управления базы данных, которая может хранить данные вашего сайта и управлять ими. Мы установим MariaDB, разработанную энтузиастами версию оригинального сервера MySQL от Oracle.

Для установки данного ПО запустите следующую команду:

После завершения установки активируйте и запустите сервер MariaDB с помощью следующей команды:

Чтобы повысить уровень безопасности вашего сервера базы данных, рекомендуется запустить скрипт безопасности, который устанавливается в комплекте с MariaDB. Этот скрипт будет удалять некоторые небезопасные настройки по умолчанию и блокировать доступ к системе управления базы данных. Для запуска интерактивного скрипта введите следующую команду:

После запуска откроется серия диалогов, с помощью которых вы можете внести некоторые изменения в вашу настройку MariaDB. В первом диалоге вам нужно будет ввести пароль пользователя root для текущей базы данных. Не нужно путать его с системным root пользователем. Root пользователь базы данных — это пользователь с правами администратора, который имеет все права для работы с системой базы данных. Поскольку вы только что установили MariaDB и еще не меняли параметры конфигурации, пароль будет пустым, так что вам достаточно нажать ENTER в этом диалоге.

В следующем диалоге вам будет предложено задать пароль для пользователя root базы данных. Поскольку MariaDB использует специальный метод аутентификации для пользователя root, который, как правило, отличается большей безопасностью по сравнению с аутентификацией по паролю, вам не нужно настраивать его в данный момент. Введите N и нажмите ENTER .

Далее вы можете использовать клавиши Y и ENTER , чтобы принять ответы по умолчанию для всех последующих вопросов. В результате вы удалите ряд анонимных пользователей и тестовую базу данных, отключите возможность удаленного входа пользователя root и загрузите новые правила, чтобы внесенные изменения немедленно активировались на сервере.

После выполнения указанных выше действий выполните вход в консоль MariaDB с помощью следующей команды:

В результате будет установлено подключение к серверу MariaDB с помощью пользователя root базы данных с правами администратора, который логически выводится в результате использования sudo при запуске данной команды. Результат должен выглядеть следующим образом:

Обратите внимание, что вам не потребуется предоставлять пароль для подключения в качестве пользователя root. Это работает, поскольку используемый по умолчанию метод аутентификации для пользователя MariaDB с правами администратора — unix_socket , а не пароль . Хотя это может выглядеть как возможный источник проблем с безопасностью, на самом деле эти действия делают сервер базы данных более защищенным, поскольку единственные пользователи, которые могут выполнять вход в систему с правами доступа root для MariaDB, — это пользователи системы с привилегиями sudo, подключенные с использованием консоли или через приложение, использующее аналогичные привилегии. На практике это означает, что вы не сможете использовать root пользователя базы данных с правами администратора для подключения из вашего приложения PHP.

Для дополнительной безопасности рекомендуется иметь специальные аккаунты пользователей с менее обширными привилегиями, особенно если вы планируете использовать несколько баз данных на сервере. Чтобы продемонстрировать такую настройку, мы создадим базу данных с именем example_database и пользователя с именем example_user, но вы можете использовать собственные имена.

Чтобы создать новую базу данных, запустите следующую команду в консоли MariaDB:

Теперь вы можете создать нового пользователя и предоставить ему полный набор прав для только что созданной вами базы данных: Следующая команда определяет пароль этого пользователя как password , но вы можете заменить его на безопасный пароль по вашему выбору:

В результате пользователь example_user получит полный набор привилегий для базы данных example\_database , но не будет обладать возможностью создания или изменения других баз данных на сервере.

Очистите привилегии, чтобы они были сохранены и доступны в текущем сеансе:

После этого закройте оболочку MariaDB:

Вы можете проверить наличие у нового пользователя конкретных разрешений, выполнив повторный вход в консоль MariaDB, на этот раз используя учетные данные вашего собственного пользователя:

Обратите внимание на флаг -p в этой команде, который будет запрашивать пароль, который вы задаете при создании пользователя example_user. После входа в консоль MariaDB убедитесь, что у вас есть доступ к базе данных example\_database :

Результат будет выглядеть следующим образом:

Чтобы закрыть оболочку MariaDB, введите следующую команду:

Вы настроили систему базы данных и теперь можете перейти к установке PHP, заключительного компонента стека LEMP.

Шаг 3 — Установка PHP-FPM

Вы установили Nginx для обслуживания вашего контента и MariaDB для хранения и управления данными. Теперь вы можете установить PHP для обработки кода и генерации динамического контента для веб-сервера.

Хотя Apache встраивает интерпретатор PHP в каждый запрос, Nginx требуется внешняя программа для обработки PHP и организации моста между самим интерпретатором PHP и веб-сервером. Это позволяет обеспечить более высокую производительность на большинстве веб-сайтов на базе PHP, но для этого необходимо выполнить дополнительную настройку. Вы должны установить php-fpm , т.е. “менеджер процессов PHP fastCGI”, и указать Nginx на необходимость передачи запросов PHP данному программному обеспечению. Также вам потребуется php-mysqlnd , модуль PHP, который позволяет PHP взаимодействовать с базами данных MySQL. Ключевые PHP пакеты автоматически будут установлены в качестве зависимостей.

Для установки пакетов php-fpm и php-mysql воспользуйтесь следующей командой:

Предоставляемый с CentOS 8 по умолчанию текстовый редактор — vi . vi очень мощный текстовый редактор, но освоить работу с ним неопытным пользователям достаточно сложно. Вы можете установить более удобный для пользователя редактор, например, nano , для облегчения редактирования файлов конфигурации на сервере CentOS 8:

Найдите директивы user и group . Если вы используете nano , вы можете нажать CTRL + W для поиска этих терминов в открытом файле.

Вы можете заметить, что для переменных user и group задано значение apache . Нам нужно изменить значения на nginx :

Сохраните и закройте файл после завершения редактирования. Если вы используете nano , нажмите CTRL + X , а затем нажмите Y и ENTER .

Чтобы активировать и запустить службу php-fpm , запустите следующую команду:

Перезапустите веб-сервер Nginx, чтобы он смог использовать файлы конфигурации, созданные при установке php-fpm :

Теперь ваш веб-сервер полностью настроен. На следующем шаге мы создадим PHP скрипт для тестирования, чтобы убедиться, что все работает ожидаемым образом.

Шаг 4 — Тестирование PHP с помощью Nginx

В CentOS 8 при установке php-fpm по умолчанию автоматически создаются файлы конфигурации, которые позволят вашему веб-серверу Nginx обрабатывать файлы .php в корневой директории документов по умолчанию, расположенной в /usr/share/nginx/html . Вам не потребуется вносить какие-либо изменения в конфигурацию Nginx для обеспечения корректной работы PHP на вашем веб-сервере.

Единственное изменение, которое мы будем вносить, — это изменение параметров разрешений по умолчанию в корневой папке документов Nginx. Так вы сможете создавать и изменять файлы в данной папке, используя обычного системного пользователя без необходимости добавлять к каждой команде sudo .

Следующая команда будет изменять владение для корневой папки документов Nginx, используемой по умолчанию, на пользователя и группу sammy , поэтому обязательно замените выделенные имя пользователя и группу в этой команде для отражения имени пользователя и группы, используемых в вашей системе.

Теперь мы создадим тестовую страницу PHP, чтобы убедиться, что веб-сервер работает ожидаемым образом.

Создайте новый файл PHP с именем info.php в директории /usr/share/nginx/html :

Следующий код PHP будет отображать информацию о текущей среде PHP, которая запущена на сервере:

После завершения редактирования сохраните и закройте файл.

Теперь мы можем проверить, может ли наш веб-сервер корректно отображать содержимое, созданное скриптом PHP. Перейдите в браузер и вставьте в адресную строку имя хоста вашего сервера или его IP-адрес, добавив /info.php :

Вы увидите приблизительно следующую страницу:

Отображаемая по умолчанию страница с данными PHP в CentOS 8

После проверки соответствующей информации о вашем сервере PHP с помощью данной страницы, рекомендуется удалить созданный вами файл, поскольку он содержит чувствительную информацию о вашей среде PHP и о вашем сервере CentOS. Вы можете использовать rm для удаления этого файла:

При необходимости вы всегда сможете восстановить этот файл. Далее мы протестируем подключение к базе данных со стороны PHP.

Шаг 5 — Тестирование подключения к базе данных для PHP (необязательно)

Если вы хотите проверить, может ли PHP подключаться к MariaDB и выполнять запросы для базы данных, вы можете создать тестовую таблицу с шаблонными данными и запрашивать ее содержимого из скрипта PHP.

Во-первых, подключитесь к консоли MariaDB с пользователем базы данных, созданным на шаге 2 настоящего руководства:

Создайте таблицу с именем todo_list . Из консоли MariaDB запустите следующее выражение:

Теперь добавьте строк содержимого в тестовую таблицу. Возможно, вам потребуется несколько раз повторить следующую команду, используя разные значения:

Чтобы подтвердить, что данные были успешно сохранены в таблицу, запустите следующую команду:

Результат будет выглядеть следующим образом:

Убедившись в том, что у вас есть надлежащие данные в тестовой таблице, вы можете закрыть консоль MariaDB:

Теперь вы можете создать скрипт PHP, который будет подключаться к MariaDB и запрашивать ваше содержимое. Создайте новый файл PHP в пользовательском корневом веб-каталоге в предпочитаемом вами редакторе. Мы будем использовать nano :

Добавьте в скрипт PHP следующие строки:

Сохраните и закройте файл после завершения редактирования.

Теперь вы можете получить доступ к этой странице в вашем веб-браузере, указав имя хоста вашего сервера или публичный IP-адрес и добавив /todo_list.php :

Вы должны увидеть примерно следующую страницу, отображающую содержимое, которое вы добавили в тестовую таблицу:

Пример списка дел PHP

Это означает, что ваша среда PHP готова к подключению и взаимодействию с вашим сервером MariaDB.

Заключение

В этом руководстве вы создали гибкую основу для отображения веб-сайтов и приложений, написанных на PHP, для ваших посетителей, используя Nginx в качестве веб-сервера. Вы настроили Nginx для обработки запросов PHP с помощью php-fpm , а также выполнили настройку базы данных MariaDB для хранения данных вашего сайта.

Читайте также: