176 lines
6.6 KiB
Bash
176 lines
6.6 KiB
Bash
#!/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/" |