Установка 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>