22.07.2020

Установка LEMP-стека на CentOS 7

LEMP — это акроним, обозначающий набор программного обеспечения, широко используемого на веб-серверах. Рассмотрим его установку на CentOS 7, однако перед этим произведем обновление системы и выполним перезагрузку:

sudo yum update -y
reboot

Настройка Firewall

Так как по умолчанию порты 80 и 443 закрыты настройками файрвола, следует выполнить несколько команд для получения доступа к веб-серверу из интернета.

Открываем порт 80:

sudo firewall-cmd --permanent --zone=public --add-service=http

Открываем порт 443:

sudo firewall-cmd --permanent --zone=public --add-service=https

Перезагружаем службу:

sudo systemctl restart firewalld

Проверяем внесенные изменения:

sudo firewall-cmd --zone=public --list-services

В итоге должно отобразиться следующее:

dhcpv6-client http https ssh

Установка Nginx

Включаем репозиторий EPEL, если это не было сделано ранее. EPEL содержит некоторые пакеты, которые не вошли в стандартный набор RHEL (CentOS), в том числе Nginx. Вводим следующую команду для подключения репозитория:

sudo yum install epel-release -y

Установим непосредственно сам Nginx:

sudo yum install nginx -y

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

sudo systemctl start nginx
sudo systemctl enable nginx

Установка MariaDB

Теперь перейдем к установке и первоначальной настройке СУБД:

sudo yum install mariadb-server mariadb -y

Запускаем службу аналогично Nginx:

sudo systemctl start mariadb
sudo systemctl enable mariadb

Следующей командой запустим базовую настройку безопасности:

sudo mysql_secure_installation

Процесс заключается в установке пароля root-доступа к базам, отключении анонимного и удаленного доступа и удалении тестовых баз. Если не требуется иное, читаем запрос и соглашаемся нажатием клавиши "Y".

Установка PHP 7.3

Поддерживаемые версии PHP можно посмотреть на официальном сайте. В нашем случае устанавливаем PHP версии 7.3 и подключаем репозиторий Remi следующей командой:

sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Далее устанавливаем пакет yum-utils для работы с репозиторием Remi:

sudo yum install yum-utils

Теперь нужно активировать репозиторий и запустить установку пакетов PHP 7.3:

sudo yum-config-manager --enable remi-php73
sudo yum install php73 -y

Завершим процесс установки подключением часто используемых модулей и запуском php-fpm:

sudo yum install php-fpm php-mysql php-cli php-mbstring php-opcache php-curl php-gd -y
systemctl start php-fpm
systemctl enable php-fpm

Настройка PHP

Открываем файл настроек php.ini:

nano /etc/php.ini

Меняем значение cgi.fix_pathinfo. Данное изменение внесет запрет на исполнение произвольного кода на сервере с правами PHP-процесса при загрузке файла:

..
cgi.fix_pathinfo=0 #Убираем комментарий ";" в начале строки и меняем 1 на 0
..

Далее меняем группу и пользователя с Apache на Nginx в конфигурационном файле php-fpm:

sudo nano /etc/php-fpm.d/www.conf

Получаем:

; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

Перезапускаем php-fpm:

sudo systemctl restart php-fpm

Настройка Nginx

Откроем файл конфигураций Nginx:

sudo nano /etc/nginx/nginx.conf

Вносим следующие изменения в файл:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 46.243.182.96; #<em>Пишем имя сервера или IP адрес</em>
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm; #<em>Добавляем index.php</em>
}
error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .php$ { #<em>Добавляем возможность обрабатывать запросы PHP</em>
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Настало время проверить наш веб-сервер. Создадим страницу по следующему пути:

nano /var/www/html/info.php

Вставим следующую строку и сохраним файл:

<?php phpinfo();?>

Перезапустим Nginx командой:

sudo systemctl restart nginx

Теперь, если вы зайдете через браузер на ваш веб-сервер по адресу http://server_name/info.php (http://xxx.xxx.xxx.xxx/info.php, где xxx.xxx.xxx.xxx — адрес), то увидите информационную страницу: