Установка Apache2 + PHP 8.2 + MariaDB на AlmaLinux 8
установка apache2:
dnf install httpd
установка ssl мода:
dnf install mod_ssl
установка модуля mpm-itk для разграничения по пользователям:
dnf install https://disweb.ru/files/rpm/httpd-itk-2.4.7.04-31.el8.x86_64.rpm
открыть на редактирование /etc/sysconfig/httpd и добавить:
HTTPD=/usr/sbin/httpd.itk
открыть файл /etc/httpd/conf.modules.d/00-mpm.conf и раскоментировать:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
и закомментировать:
#LoadModule mpm_event_module modules/mod_mpm_event.so
открыть файл /etc/httpd/conf.modules.d/01-mpm-itk.conf и раскоментировать:
<IfModule mpm_prefork_module>
LoadModule mpm_itk_module modules/mod_mpm_itk.so
</IfModule>
открыть на редактирование /etc/httpd/conf/httpd.conf и добавить:
<IfModule itk.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
StartServers — устанавливает число дочерних процессов сервера при запуске;
MinSpareServers — задает минимальное число свободных процессов;
MaxSpareServers — устанавливает после скольки процессов лишние будут завершаться.;
ServerLimit — верхний предел установленного количества процессов;
MaxClients — максимальное количество соединений, которые будут обрабатываться одновременно;
MaxRequestsPerChild — лимит запросов дочернего процесса. После превышения процесс умирает.
открыть файл /etc/httpd/conf.d/mod_deflate.conf и добавить (Включение сжатия):
<filesMatch "\.(js|html|css|svg)$">
SetOutputFilter DEFLATE
</filesMatch>
AddOutputFilterByType DEFLATE text/html application/xhtml+xml text/plain text/xml text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent env=!dont-vary
открыть порт 80:
firewall-cmd --zone=public --add-port=80/tcp --permanent
открыть порт 433:
firewall-cmd --zone=public --add-port=443/tcp --permanent
применить настройки фаервола:
firewall-cmd --reload
открыть файл /etc/httpd/conf/httpd.conf и привести данные параметры к такому виду (иначе возникает ошибка о невозможности прочитать файл):
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
при включеном SELinux установить файлам chcon:
chcon -R unconfined_u:object_r:httpd_sys_content_t:s0 .
добавить апач в автозагрузку и запустить:
systemctl enable httpd.service
запустить апач:
systemctl start httpd.service
Установка PHP
добавить репозитория epel:
dnf install epel-release
добавить репозиторий remi:
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
указать какую версию php установить (к примеру 8.2):
dnf module enable php:remi-8.2
установка пакетов php:
dnf install php php-gd php-mbstring php-mysql php-pdo php-xml php-process php-mcrypt php-pear php-opcache php-ldap php-intl php-soap php-imap php-devel php-bcmath php-pecl-zip
открыть файл /etc/php.ini и привети параметры к данным:
date.timezone = "Europe/Moscow"
short_open_tag = On
upload_max_filesize = 128M // Максимальный размер загружаемого файла
post_max_size = 128M // Максимальный размер POST
max_input_vars = 1000000
session.gc_maxlifetime = 86400
memory_limit = // ОЗУ
Установка MariaDB
установить wget:
dnf install wget
скачать установщик добавления репозитория mariadb:
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
добавить разрешение на выполнения:
chmod +x mariadb_repo_setup
запустить установщик добавления репозитория mariadb:
./mariadb_repo_setup
установка mariadb-server:
dnf install MariaDB-server
добавление mariadb в автозапуск:
systemctl enable mariadb
запуск mariadb:
systemctl start mariadb
задать пароль пользователю root:
mysql -u root
use mysql;
ALTER USER 'root'@localhost IDENTIFIED BY 'PASSWORD';
flush privileges;
exit;
пример конфигурации /etc/httpd/conf/httpd.conf:
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin support@disweb.ru
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
<IfModule itk.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
#IncludeOptional vhosts.conf
пример конфигурации /etc/httpd/conf.d/ssl.conf:
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLCryptoDevice builtin
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLHonorCipherOrder on
SSLCipherSuite PROFILE=SYSTEM
SSLProxyCipherSuite PROFILE=SYSTEM
# Сертификаты сгенерированные при установке mod_ssl
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
# Сертификаты
#SSLCertificateFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/certificate.pem
#SSLCertificateKeyFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/private.pem
#SSLCertificateChainFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/fullchain.pem
#SSLCACertificateFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/cabundle.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
пример конфигурации /etc/httpd/vhosts.conf:
# Виртуальный хост на PHP скрипты, 80 порт
<VirtualHost *:80>
DocumentRoot /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/public
ServerName ДОМЕН
Alias /.well-known "/var/www/html/.well-known/"
AssignUserID ПОЛЬЗОВАТЕЛЬ ПОЛЬЗОВАТЕЛЬ
ErrorLog /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/logs/error_log
CustomLog /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/logs/access_log common
php_value session.save_path /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/session
</VirtualHost>
# Виртуальный хост на PHP скрипты, 443 SSL
<VirtualHost *:443>
DocumentRoot /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/public
ServerName ДОМЕН
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
# Сертификаты сгенерированные при установке mod_ssl
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
# Сертификаты
#SSLCertificateFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/certificate.pem
#SSLCertificateKeyFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/private.pem
#SSLCertificateChainFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/fullchain.pem
#SSLCACertificateFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/cabundle.pem
AssignUserID ПОЛЬЗОВАТЕЛЬ ПОЛЬЗОВАТЕЛЬ
ErrorLog /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/logs/error_log
CustomLog /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/logs/access_log common
php_value session.save_path /home/ПОЛЬЗОВАТЕЛЬ/ДОМЕН/session
</VirtualHost>
# Виртуальный хост как прокси на 3000 порт, 80 порт
<VirtualHost *:80>
ServerName ДОМЕН
Alias /.well-known "/var/www/html/.well-known/"
AssignUserID ПОЛЬЗОВАТЕЛЬ ПОЛЬЗОВАТЕЛЬ
ErrorLog /home/ПОЛЬЗОВАТЕЛЬ/logs/error_log
CustomLog /home/ПОЛЬЗОВАТЕЛЬ/logs/access_log common
<Location />
ProxyPass http://localhost:3000/
Order allow,deny
Allow from all
</Location>
</VirtualHost>
# Виртуальный хост как прокси на 3000 порт, 443 SSL
<VirtualHost *:443>
ServerName ДОМЕН
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
# Сертификаты сгенерированные при установке mod_ssl
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
# Сертификаты
#SSLCertificateFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/certificate.pem
#SSLCertificateKeyFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/private.pem
#SSLCertificateChainFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/fullchain.pem
#SSLCACertificateFile /var/www/html/КЛЮЧ/acme_v2/live/ДОМЕН/cabundle.pem
AssignUserID ПОЛЬЗОВАТЕЛЬ ПОЛЬЗОВАТЕЛЬ
ErrorLog /home/ПОЛЬЗОВАТЕЛЬ/logs/error_log
CustomLog /home/ПОЛЬЗОВАТЕЛЬ/logs/access_log common
<Location />
ProxyPass http://localhost:3000/
Order allow,deny
Allow from all
</Location>
</VirtualHost>