Files
altcorAutoinstall/fix_php_fpm.sh

176 lines
6.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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
<IfModule !mod_proxy.c>
LoadModule proxy_module modules/mod_proxy.so
</IfModule>
<IfModule !mod_proxy_fcgi.c>
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
</IfModule>
# Обработка PHP файлов через PHP-FPM
<FilesMatch \.php$>
SetHandler "proxy:unix:$SOCKET_PATH|fcgi://localhost"
</FilesMatch>
# Настройки производительности
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/"