В данном примере использована — связка двух веб-серверов Nginx и Apache, PHP 8 (в режиме FastCGI) и сервер баз данных MySQL 8.
Подготовка системы
Обновление системы
yum update -y
yum remove -y selinux*
Установка репозитория EPEL и REMI
yum install epel-release -y rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
reboot
Установка утилит
yum install -y wget mc net-tools unzip tar htop
Настройка брандмауэра
В качестве межсетевого экрана будет использоваться iptables.
Удаление Firewalld
Остановка сервиса firewalld:
systemctl stop firewalld
Выключение сервиса автозагрузки firewalld:
systemctl disable firewalld
Удаление firewalld:
yum remove -y firewalld
Установка iptables:
yum install -y iptables-services
Включение сервиса iptables в автозагрузку:
systemctl enable iptables
Запуск сервиса iptables:
systemctl start iptables
Проверка статуса службы iptables:
systemctl status iptables
reboot
Создадим файл настроек iptables:
mcedit iptables.sh
и внесем в него следующее содержимое:
#!/bin/sh # - Очищаем таблицы iptables -F iptables -t nat -F iptables -t mangle -F iptables -X # - Политики по умолчанию iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # - Разрешить трафик по петлевому интерфейсу iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # - Разрешим передавать пакеты, относящиеся к уже установленным соединениям iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # - Разрешить входящий PING iptables -A INPUT -p icmp -j ACCEPT # - Разрешить все исходящие iptables -I OUTPUT 1 -j ACCEPT # - Доступ по SSH iptables -A INPUT -p tcp --dport 22 -j ACCEPT # - Разрешить доступ к WEB серверу iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j ACCEPT # - Сохранить настройки service iptables save
Сохраняем и назначаем права на выполнение:
chmod +x iptables.sh
Выполняем скрипт:
./iptables.sh
Посмотреть список правил iptables можно командой:
iptables --line-numbers -L -v -n
Установка Apache (httpd)
Устанавливаем Apache:
yum install -y httpd
Для настройка Apache работы в связке с Nginx открываем конфигурационный файл:
mcedit /etc/httpd/conf/httpd.conf
Находим параметр:
Listen 80
Меняем значение на:
Listen 8080
Apache будет слушать порт 8080, так как на порту 80 будет работать Nginx.
Включение сервиса Apache в автозагрузку:
systemctl enable httpd
Запуск сервиса Apache:
systemctl start httpd
Проверка статуса сервиса Apache:
systemctl status httpd
Открываем браузер и вводим в адресную строку IP-адрес или DNS имя сервера и добавляем :8080 (http://<IP-адрес нашего сервера>:8080). Должна откроется тестовая страница.
В данном примере:
http://dev.mailns.local:8080
Установка Ngnix
Устанавливаем Nginx:
yum install -y nginx
Внесем небольшую корректировку в конфигурационный файл Ngnix:
mcedit /etc/nginx/nginx.conf
В секцию http добавим строку:
server_names_hash_bucket_size 64;
На практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.
Включение сервиса Nginx в автозагрузку:
systemctl enable nginx
Запуск сервиса Nginx:
systemctl start nginx
Проверка статуса сервиса Nginx:
systemctl status nginx
Открываем браузер и вводим в адресную строку IP-адрес или DNS имя сервера (http://<IP-адрес нашего сервера>). Должна откроется страница приветствия.
В данном примере:
http://dev.mailns.local
Установка PHP
Remi имеет отдельный конфигурационный файл для каждой версии php, нужно включить нужную вам версию в конфигурационном файле, например на сервере будет установлена версия php 8.0, для этого включаем именно этот репозиторий в файле remi-php80.repo меняем значение на enabled=1.
Открываем файл remi-php80.repo:
mcedit /etc/yum.repos.d/remi-php80.repo
Меняем значение на enabled=1.
Устанавливаем PHP и php-fpm:
yum install -y php php-fpm
Просмотр установленной версии PHP:
php -v
Установка модулей расширений PHP (можно ставить только необходимые для работы):
yum install php-{apcu,bcmath,dba,enchant,env,ffi,gd,gearman,geoip,gmp,igbinary,imagick,imap,intl,ldap,libsmbclient,mailparse,pecl-xmlrpc,memcache,memcached,msgpack,mysqli,mysqlnd,odbc,pdo,pdo_dblib,pdo_firebird,pdo_mysql,pdo_odbc,pdo_pgsql,pdo_sqlite,pgsql,posix,pspell,psr,redis,shmop,smbclient,snmp,soap,sqlite3,swoole,sysvmsg,sysvsem,sysvshm,tidy,uploadprogress,pecl-xmlrpc,yaml,zip,opcache}
Включение сервиса php-fpm в автозагрузку:
systemctl enable php-fpm
Запуск сервиса php-fpm:
systemctl start php-fpm
Проверка статуса сервиса php-fpm:
systemctl status php-fpm
mcedit /etc/php-fpm.d/www.conf
Меняем, настройки параметров для работы Apache с PHP в режиме FastCGI:
listen = /var/run/php-fpm/www.sock listen.backlog = 4096 listen.owner = apache listen.group = apache listen.mode = 0666
systemctl restart php-fpm
Создание сайта
В директории /var/www/html создаём первый каталог под веб-сайт, и называем его так же, как и доменное имя нашего сайта, чтобы не было путаницы, если сайтов будет несколько.
Создадим директорию для сайта:
mkdir -p /var/www/html/dev.mailns.local
Создаем новый конфигурационный файл виртуального домена Nginx:
mcedit /etc/nginx/conf.d/dev.mailns.local.conf
server { listen 80; server_name dev.mailns.local; root /var/www/html/dev.mailns.local; index index.php index.html index.htm; access_log /var/log/nginx/dev.mailns.local.access.log main; error_log /var/log/nginx/dev.mailns.local.error.log; location / { root /var/www/html/dev.mailns.local; proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_force_ranges on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache off; proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri"; proxy_cache_valid 3s; proxy_cache_min_uses 2; client_body_buffer_size 128k; client_max_body_size 1024m; proxy_connect_timeout 180; proxy_send_timeout 180; proxy_read_timeout 180; send_timeout 180; proxy_buffer_size 4k; proxy_buffers 8 32k; proxy_busy_buffers_size 68k; proxy_temp_file_write_size 10m; } location ~ /\. { deny all; } }
Создаем новый конфигурационный файл виртуального домена Apache:
mcedit /etc/httpd/conf.d/dev.mailns.local.conf
<VirtualHost *:8080> ServerName dev.mailns.local DocumentRoot /var/www/html/dev.mailns.local SetEnvIf X-Forwarded-Proto https HTTPS=on <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/" </FilesMatch> ErrorLog /var/log/httpd/dev.mailns.local.error.log CustomLog /var/log/httpd/dev.mailns.local.access.log common <Directory /var/www/html/dev.mailns.local> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost>
Для проверки, создадим файл index.php, с выводом информации о php.
echo '<?php phpinfo(); ?>' > /var/www/html/dev.mailns.local/index.php
Назначаем владельца директории:
chown -R apache:apache /var/www/html/dev.mailns.local
Перезапускаем Ngnix:
systemctl restart nginx
Перезапускаем Apache:
systemctl restart httpd
Открываем браузер, и заходим по адресу нашего сайта. Открывается страница с информацией о php.
В данном примере:
http://dev.mailns.local
Установка MySQL
Добавим репозиторий:
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-6.noarch.rpm
При установке была ошибка:
Неудача получения ключа GPG:[Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022"
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install -y mysql-server
Включение сервиса mysql в автозагрузку:
systemctl enable mysqld
Запуск сервиса mysql:
systemctl start mysqld
Проверим статус сервиса mysql:
systemctl status mysqld
При установке mysqld генерирует временный пароль и сохраняет его в лог-файл /var/log/mysqld.log. Посмотреть пароль можно выполнив команду:
grep 'password' /var/log/mysqld.log
После завершения установки можно запустить встроенный сценарий безопасности MySQL, который изменяет некоторые опции по умолчанию и блокирует удалённый root-логин. Чтобы запустить сценарий, введите:
mysql_secure_installation
Программа запросит root-пароль, который вы получили при установке.
Введите новый пароль из 12 символов и подтвердите его. Пароль должен содержать минимум один специальный символ, одну цифру, одну букву верхнего и одну нижнего регистра.
Программа оценит ваш новый пароль и сообщит о его надёжности. После этого программа сразу предложит выбрать новый пароль. Поскольку вы выбрали его только что, не нужно этого делать.
После этого сценарий задаст вам ряд вопросов. Чтобы принять данные по умолчанию, можете просто нажать Y и Enter. Сценарий заблокирует анонимных пользователей и удалённый root логин, удалит тестовые таблицы и перезагрузит привилегии.