Устанавливаем Centos 8 и вебсервер на базе стека LEMP (Linux, Nginx, Mysql, PHP). В данном руководстве используется MariaDB вместо Mysql.
Итак, приступим. Заходим в терминал Centos 8 и начинаем установку стека с обновления самой системы:
yum update
После этого создадим пользователя admin с добавлением в группу администраторов:
adduser admin -G wheel
Создадим пароль:
passwd admin
1) Установка MariaDB
yum install mariadb-server
Добавим в автозагрузку и запустим сам сервис:
systemctl enable mariadb.service
systemctl start mariadb.service
Проводим начальную настройку MariaDB:
mysql_secure_installation
2) Установка Nginx
yum install nginx
Добавим в автозагрузку и запустим сам сервис:
systemctl enable nginx.service
systemctl start nginx.service
Откроем получение трафика для http и https в файрволе:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Проверяем в браузере работу Nginx по адресу http://ВашIP
3) Установка PHP 7.4
Подключаем дополнительные репозитории EPEL и REMI:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Выводим список доступных веток php:
yum module list php
Включаем для php ветку remi-7.4. Можете включать такую, какую необходимо.
yum module enable php:remi-7.4
Устанавливаем php и основные модули:
yum install php php-mysqlnd php-pdo php-gd php-mbstring php-fpm
Открываем файл конфигурации php-fpm: /etc/php-fpm.d/www.conf
находим там параметры и меняем значения на следующие:
user = nginx
group = nginx
В этом же файле для хранения сессий в PHP необходимо указать папку /tmp
php_value[session.save_path] = /tmp
Я же сделал хранение сессий в оперативной памяти. Открываем файл /etc/fstab и добавляем там строку:
tmpfs /ramtmp tmpfs noatime,nodiratime,nodev,nosuid,size=256M 0 0
После перезагрузки системы в ОЗУ будет создаваться раздел объемом 256 Мб и монтироваться в точку /ramtmp. Его размер зависит от посещаемости сайта, объема одной сессии и подбирается индивидуально. В итоге параметр примет следующее значение:
php_value[session.save_path] = /ramtmp
Делать это вовсе необязательно (большинству достаточно стандартного механизма хранения сессий), особенно если мало ОЗУ.
Добавим в автозагрузку и запустим php-fpm:
systemctl enable php-fpm.service
systemctl start php-fpm.service
Перезапускаем Nginx:
systemctl restart nginx.service
4) Проверка работы
Создаем файл info.php в каталоге /usr/share/nginx/html/
Код файла:
<?php
echo ‘<center><h1>Random value’.rand(1,200000).'</h1></center>’;
phpinfo();
?>
Запускаем в браузере скрипт http://ВашIP/info.php и видим случайное число + информацию о php.
5) Создание сайта и получение сертификата Let’s Encrypt
Создаем папку www в корне сервера и устанавливаем ее владельца пользователя admin:
mkdir /www
chown -R admin:admin /www
Входим в терминал под именем admin и создаем в каталоге www нужные вам папки для сайтов (к примеру: site1, site2 и т.д.). В этом примере создадим поддомен pma.yousite.ru для phpmyadmin и получим на него сертификат.
Создаем папку и распаковываем туда phpmyadmin (скачайте дистрибутив на официальном сайте):
mkdir /www/pma
Далее проводим все действия переключившись на root.
Открываем файл /etc/nginx/nginx.conf и находим секцию server. Меняем там 2 параметра:
server_name=pma.yousite.ru
root=/www/pma
Перезапускаем Nginx:
systemctl restart nginx.service
В итоге должен открываться phpmyadmin по адресу pma.yousite.ru (имя сайта как вы понимаете у вас будет свое).
Получение сертификата достаточно просто сделать по официальным рекомендациям на сайте https://certbot.eff.org/lets-encrypt/centosrhel8-nginx
yum install certbot python3-certbot-nginx
certbot --nginx
systemctl restart nginx.service
Первая команда установит сервис управления сертификатами certbot, вторая команда запускает процедуру получения сертификата в диалоговом режиме и перенастраивает ваш /etc/nginx/nginx.conf на использование 443 ssl порта.
6) Прочие мелочи
Меняем порт ssh для уменьшения попыток перебора паролей (номер порта можете придумать свой). Открываем файл /etc/ssh/sshd_config и указываем там параметр port 888. Далее открываем порт в фаерволе:
firewall-cmd --zone=public --permanent --add-port=888/tcp firewall-cmd --reload
Создаем базу данных (имя базы, пользователя и пароль придумайте свои):
mysql -u root -p create database mybase; CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; GRANT ALL PRIVILEGES ON mybase.* TO 'myuser'@'localhost'; exit;