diff --git a/install.sh b/install.sh index ccbb117..71216b7 100644 --- a/install.sh +++ b/install.sh @@ -48,9 +48,14 @@ cleanup_apache_config() { if [ -f /etc/apache2/ports.conf ]; then cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup.$(date +%Y%m%d_%H%M%S) - grep -v "^Listen\s\+.*80$" /etc/apache2/ports.conf > /etc/apache2/ports.conf.tmp || true - echo "Listen *:80" >> /etc/apache2/ports.conf.tmp - mv /etc/apache2/ports.conf.tmp /etc/apache2/ports.conf + # Удаляем все Listen директивы для порта 80 + grep -v "^Listen\s\+.*:80$" /etc/apache2/ports.conf > /etc/apache2/ports.conf.tmp || true + grep -v "^Listen\s\+80$" /etc/apache2/ports.conf.tmp > /etc/apache2/ports.conf.tmp2 || true + + # Добавляем одну Listen директиву + echo "Listen *:80" >> /etc/apache2/ports.conf.tmp2 + mv /etc/apache2/ports.conf.tmp2 /etc/apache2/ports.conf + rm -f /etc/apache2/ports.conf.tmp fi elif [ "$DISTRO_FAMILY" = "rhel" ]; then @@ -58,11 +63,49 @@ cleanup_apache_config() { if [ -f "$HTTPD_CONF" ]; then cp "$HTTPD_CONF" "${HTTPD_CONF}.backup.$(date +%Y%m%d_%H%M%S)" - grep -v "^Listen.*:80" "$HTTPD_CONF" > "${HTTPD_CONF}.tmp" || true - echo "Listen *:80" >> "${HTTPD_CONF}.tmp" - mv "${HTTPD_CONF}.tmp" "$HTTPD_CONF" + # Удаляем все Listen директивы для порта 80 + grep -v "^Listen.*:80$" "$HTTPD_CONF" > "${HTTPD_CONF}.tmp" || true + grep -v "^Listen 80$" "${HTTPD_CONF}.tmp" > "${HTTPD_CONF}.tmp2" || true + + # Добавляем одну Listen директиву + echo "Listen 80" >> "${HTTPD_CONF}.tmp2" + mv "${HTTPD_CONF}.tmp2" "$HTTPD_CONF" + rm -f "${HTTPD_CONF}.tmp" + fi + + # Также очищаем PHP-FPM конфигурацию от дублирующихся модулей + if [ -f "/etc/httpd/conf.d/php-fpm.conf" ]; then + log_info "Очистка PHP-FPM конфигурации от LoadModule директив..." + + if [ "$DISTRO" = "fedora" ]; then + cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF' + + SetHandler "proxy:fcgi://127.0.0.1:9000" + + +DirectoryIndex index.php index.html index.htm + + + Require all granted + +EOF + else + cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF' + + SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost" + + +DirectoryIndex index.php index.html index.htm + + + Require all granted + +EOF + fi fi fi + + log_success "Конфигурация Apache очищена от дубликатов" } check_component() { @@ -581,21 +624,20 @@ proceed_with_installation() { APACHE_CONF="/etc/apache2/sites-available/000-default.conf" WEBSERVER_USER="www-data" -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - WEBROOT="/var/www/html" - APACHE_CONF="/etc/httpd/conf.d/000-default.conf" - WEBSERVER_USER="apache" - - rm -f /etc/httpd/conf.d/php.conf - - log_info "Настройка PHP-FPM для Apache..." - - if [ "$DISTRO" = "fedora" ]; then - cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF' -LoadModule proxy_module modules/mod_proxy.so -LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so -LoadModule rewrite_module modules/mod_rewrite.so - + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + WEBROOT="/var/www/html" + APACHE_CONF="/etc/httpd/conf.d/000-default.conf" + WEBSERVER_USER="apache" + + # Очищаем старые конфигурации + rm -f /etc/httpd/conf.d/php.conf + rm -f /etc/httpd/conf.d/php-fpm.conf + + log_info "Настройка PHP-FPM для Apache..." + + if [ "$DISTRO" = "fedora" ]; then + # Для Fedora используем стандартный PHP-FPM без LoadModule директив + cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF' SetHandler "proxy:fcgi://127.0.0.1:9000" @@ -606,28 +648,27 @@ DirectoryIndex index.php index.html index.htm Require all granted EOF - - if [ -f "/etc/php-fpm.d/www.conf" ]; then - PHP_FPM_CONF="/etc/php-fpm.d/www.conf" - cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)" + # Настраиваем стандартный PHP-FPM для Fedora + if [ -f "/etc/php-fpm.d/www.conf" ]; then + PHP_FPM_CONF="/etc/php-fpm.d/www.conf" + + cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)" + + sed -i 's/^user = .*/user = apache/' "$PHP_FPM_CONF" + sed -i 's/^group = .*/group = apache/' "$PHP_FPM_CONF" + sed -i 's/^listen = .*/listen = 127.0.0.1:9000/' "$PHP_FPM_CONF" + + log_info "PHP-FPM пул настроен для Fedora" + + # Запускаем и включаем PHP-FPM + systemctl enable php-fpm >/dev/null 2>&1 + systemctl start php-fpm >/dev/null 2>&1 + fi - sed -i 's/^user = .*/user = apache/' "$PHP_FPM_CONF" - sed -i 's/^group = .*/group = apache/' "$PHP_FPM_CONF" - sed -i 's/^listen = .*/listen = 127.0.0.1:9000/' "$PHP_FPM_CONF" - - log_info "PHP-FPM пул настроен для Fedora" - - systemctl enable php-fpm >/dev/null 2>&1 - systemctl start php-fpm >/dev/null 2>&1 - fi - - else - cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF' -LoadModule proxy_module modules/mod_proxy.so -LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so -LoadModule rewrite_module modules/mod_rewrite.so - + else + # Для CentOS/RHEL/AlmaLinux с Remi репозиторием + cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF' SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost" @@ -638,31 +679,54 @@ DirectoryIndex index.php index.html index.htm Require all granted EOF - - if [ -f "/etc/opt/remi/php83/php-fpm.d/www.conf" ]; then - PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf" - cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)" + if [ -f "/etc/opt/remi/php83/php-fpm.d/www.conf" ]; then + PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf" + + cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)" + + sed -i 's/^user = .*/user = apache/' "$PHP_FPM_CONF" + sed -i 's/^group = .*/group = apache/' "$PHP_FPM_CONF" + + sed -i 's/^listen = .*/listen = \/var\/opt\/remi\/php83\/run\/php-fpm\/www.sock/' "$PHP_FPM_CONF" + sed -i 's/^;listen.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF" + sed -i 's/^;listen.group = .*/listen.group = apache/' "$PHP_FPM_CONF" + sed -i 's/^;listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF" + + log_info "PHP-FPM пул настроен для RHEL/CentOS" + fi - sed -i 's/^user = .*/user = apache/' "$PHP_FPM_CONF" - sed -i 's/^group = .*/group = apache/' "$PHP_FPM_CONF" - - sed -i 's/^listen = .*/listen = \/var\/opt\/remi\/php83\/run\/php-fpm\/www.sock/' "$PHP_FPM_CONF" - sed -i 's/^;listen.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF" - sed -i 's/^;listen.group = .*/listen.group = apache/' "$PHP_FPM_CONF" - sed -i 's/^;listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF" - - log_info "PHP-FPM пул настроен для RHEL/CentOS" + mkdir -p /var/opt/remi/php83/run/php-fpm + chown apache:apache /var/opt/remi/php83/run/php-fpm fi - mkdir -p /var/opt/remi/php83/run/php-fpm - chown apache:apache /var/opt/remi/php83/run/php-fpm + # Очищаем дублирующиеся Listen директивы + HTTPD_CONF="/etc/httpd/conf/httpd.conf" + log_step "Очистка дублирующихся Listen директив..." + + # Создаем резервную копию + cp "$HTTPD_CONF" "${HTTPD_CONF}.backup.$(date +%Y%m%d_%H%M%S)" + + # Удаляем все существующие Listen директивы для порта 80 + sed -i '/^Listen.*:80$/d' "$HTTPD_CONF" + sed -i '/^Listen 80$/d' "$HTTPD_CONF" + + # Добавляем только одну Listen директиву в конец файла + if ! grep -q "^Listen 80$" "$HTTPD_CONF"; then + echo "Listen 80" >> "$HTTPD_CONF" + fi + + log_success "Listen директивы очищены" fi -fi - log_success "Модули Apache настроены" + + # mkdir -p /var/opt/remi/php83/run/php-fpm + # chown apache:apache /var/opt/remi/php83/run/php-fpm + # fi + # fi + log_success "Модули Apache настроены" - log_step "Создание конфигурации виртуального хоста..." -mkdir -p "$WEBROOT" + log_step "Создание конфигурации виртуального хоста..." + mkdir -p "$WEBROOT" SERVER_IP=$(hostname -I | awk '{print $1}') @@ -1169,19 +1233,22 @@ MYSQL_SCRIPT log_step "Проверка конфигурации Apache..." if [ "$DISTRO_FAMILY" = "debian" ]; then - if ! apache2ctl configtest >/dev/null 2>&1; then - log_error "Конфигурация Apache содержит ошибки." + if apache2ctl configtest >/dev/null 2>&1; then + log_success "Конфигурация Apache корректна" + else + log_error "Ошибка в конфигурации Apache" apache2ctl configtest - exit 1 + return 1 fi elif [ "$DISTRO_FAMILY" = "rhel" ]; then - if ! httpd -t >/dev/null 2>&1; then - log_error "Конфигурация Apache (httpd) содержит ошибки." + if httpd -t >/dev/null 2>&1; then + log_success "Конфигурация Apache корректна" + else + log_error "Ошибка в конфигурации Apache" httpd -t - exit 1 + return 1 fi fi - log_success "Конфигурация Apache проверена" log_step "Запуск и включение сервисов..."