#!/bin/bash # Быстрое исправление проблемы с PHP-FPM # Запустите этот скрипт после неудачной установки RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_info() { echo -e "${BLUE}[Инфо]${NC} $1"; } log_success() { echo -e "${GREEN}[Успех]${NC} $1"; } log_error() { echo -e "${RED}[Ошибка]${NC} $1"; } log_warning() { echo -e "${YELLOW}[Предупреждение]${NC} $1"; } echo "=== Диагностика и исправление PHP-FPM ===" # Проверяем установленные PHP пакеты log_info "Установленные PHP пакеты:" rpm -qa | grep -E "php[0-9]*" | sort # Проверяем доступные сервисы log_info "Доступные PHP-FPM сервисы:" systemctl list-unit-files | grep php-fpm # Останавливаем все PHP-FPM сервисы log_info "Остановка всех PHP-FPM сервисов..." for service in php-fpm php83-php-fpm php82-php-fpm php81-php-fpm php80-php-fpm php74-php-fpm php84-php-fpm php85-php-fpm; do systemctl stop "$service" 2>/dev/null && log_info "Остановлен: $service" || true systemctl disable "$service" 2>/dev/null || true done # Определяем правильный сервис PHP 8.3 if systemctl list-unit-files | grep -q "php83-php-fpm.service"; then PHP_FPM_SERVICE="php83-php-fpm" PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf" SOCKET_PATH="/var/opt/remi/php83/run/php-fpm/www.sock" log_info "Используем: php83-php-fpm (Remi)" elif systemctl list-unit-files | grep -q "php-fpm.service"; then PHP_FPM_SERVICE="php-fpm" PHP_FPM_CONF="/etc/php-fpm.d/www.conf" SOCKET_PATH="/run/php-fpm/www.sock" log_info "Используем: php-fpm (стандартный)" else log_error "PHP-FPM сервис не найден!" exit 1 fi # Проверяем конфигурацию if [ ! -f "$PHP_FPM_CONF" ]; then log_error "Конфигурационный файл не найден: $PHP_FPM_CONF" # Ищем альтернативные конфигурации log_info "Поиск конфигурационных файлов..." find /etc -name "www.conf" -type f 2>/dev/null | grep php-fpm # Используем первый найденный PHP_FPM_CONF=$(find /etc -name "www.conf" -type f 2>/dev/null | grep php-fpm | head -1) if [ -f "$PHP_FPM_CONF" ]; then log_success "Найден конфигурационный файл: $PHP_FPM_CONF" # Обновляем путь к сокету SOCKET_PATH=$(dirname "$(dirname "$PHP_FPM_CONF")")/run/php-fpm/www.sock else log_error "Конфигурационный файл не найден" exit 1 fi fi # Создаем резервную копию и настраиваем log_info "Настройка конфигурации PHP-FPM..." cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)" # Настраиваем основные параметры sed -i "s|;*listen = .*|listen = $SOCKET_PATH|" "$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" sed -i 's/;*user = .*/user = apache/' "$PHP_FPM_CONF" sed -i 's/;*group = .*/group = apache/' "$PHP_FPM_CONF" # Создаем директорию для сокета socket_dir=$(dirname "$SOCKET_PATH") mkdir -p "$socket_dir" chown apache:apache "$socket_dir" chmod 755 "$socket_dir" # Запускаем сервис log_info "Запуск $PHP_FPM_SERVICE..." if systemctl start "$PHP_FPM_SERVICE"; then log_success "$PHP_FPM_SERVICE запущен успешно" systemctl enable "$PHP_FPM_SERVICE" # Проверяем создание сокета sleep 3 if [ -S "$SOCKET_PATH" ]; then log_success "Сокет создан: $SOCKET_PATH" chown apache:apache "$SOCKET_PATH" else log_warning "Сокет не создан, проверяем статус..." systemctl status "$PHP_FPM_SERVICE" --no-pager fi else log_error "Не удалось запустить $PHP_FPM_SERVICE" systemctl status "$PHP_FPM_SERVICE" --no-pager exit 1 fi # Обновляем конфигурацию Apache log_info "Обновление конфигурации Apache..." cat > /etc/httpd/conf.d/php-fpm.conf << EOF # PHP-FPM configuration for Apache LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # Обработка PHP файлов через PHP-FPM SetHandler "proxy:unix:$SOCKET_PATH|fcgi://localhost" # Настройки производительности ProxyTimeout 300 EOF # Тестируем конфигурацию Apache log_info "Тестирование конфигурации Apache..." if httpd -t; then log_success "Конфигурация Apache корректна" else log_error "Ошибка в конфигурации Apache" fi # Перезапускаем Apache log_info "Перезапуск Apache..." if systemctl restart httpd; then log_success "Apache перезапущен" else log_error "Не удалось перезапустить Apache" fi # Финальная проверка log_info "Финальная проверка сервисов..." echo "--- Статус PHP-FPM ---" systemctl status "$PHP_FPM_SERVICE" --no-pager echo "--- Статус Apache ---" systemctl status httpd --no-pager # Проверяем PHP log_info "Проверка PHP..." if command -v php >/dev/null 2>&1; then php_version=$(php -v | head -1) log_success "PHP работает: $php_version" else log_warning "PHP не найден в PATH, проверяем php83..." if /opt/remi/php83/root/usr/bin/php -v >/dev/null 2>&1; then php_version=$(/opt/remi/php83/root/usr/bin/php -v | head -1) log_success "PHP 8.3 найден: $php_version" # Создаем символическую ссылку ln -sf /opt/remi/php83/root/usr/bin/php /usr/bin/php log_info "Создана символическая ссылка для PHP" fi fi echo "" log_success "Исправление завершено!" echo "" echo "Проверьте работу сайта: http://localhost/" echo "Логи PHP-FPM: /var/opt/remi/php83/log/php-fpm/ или /var/log/php-fpm/" echo "Логи Apache: /var/log/httpd/"