Фикс
This commit is contained in:
300
install.sh
300
install.sh
@@ -386,45 +386,251 @@ proceed_with_installation() {
|
||||
fi
|
||||
log_success "Дополнительные компоненты установлены"
|
||||
|
||||
log_step "Добавление репозиториев для PHP 8.3..."
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
# Для Ubuntu/Debian
|
||||
if ! apt-cache show php8.3 &>/dev/null; then
|
||||
log_info "Добавление PPA ondrej/php для Ubuntu/Debian..."
|
||||
|
||||
# Устанавливаем необходимые пакеты для PPA
|
||||
apt update -y >/dev/null 2>&1
|
||||
apt install -y software-properties-common gnupg2 lsb-release >/dev/null 2>&1
|
||||
|
||||
# Добавляем ключ GPG для PPA ondrej/php
|
||||
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/php-archive-keyring.gpg 2>/dev/null
|
||||
|
||||
# Определяем кодовое имя дистрибутива
|
||||
CODENAME=$(lsb_release -cs)
|
||||
|
||||
# Добавляем репозиторий
|
||||
echo "deb [signed-by=/usr/share/keyrings/php-archive-keyring.gpg] https://packages.sury.org/php/ $CODENAME main" > /etc/apt/sources.list.d/php.list
|
||||
|
||||
# Обновляем списки пакетов
|
||||
apt update -y >/dev/null 2>&1
|
||||
|
||||
# Проверяем доступность PHP 8.3
|
||||
if ! apt-cache show php8.3 &>/dev/null; then
|
||||
log_error "PHP 8.3 все еще недоступен после добавления репозитория Sury."
|
||||
log_info "Попытка добавления через PPA..."
|
||||
|
||||
if add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1; then
|
||||
apt update -y >/dev/null 2>&1
|
||||
if ! apt-cache show php8.3 &>/dev/null; then
|
||||
log_error "PHP 8.3 недоступен ни через Sury, ни через PPA ondrej/php"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
log_error "Не удалось добавить ни один репозиторий для PHP 8.3"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
log_success "Репозиторий PHP добавлен успешно"
|
||||
else
|
||||
log_success "PHP 8.3 уже доступен в репозиториях"
|
||||
fi
|
||||
|
||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||
log_info "Настройка репозиториев для RHEL-семейства..."
|
||||
|
||||
# Определяем версию системы
|
||||
if [ -f /etc/os-release ]; then
|
||||
VERSION_ID=$(grep VERSION_ID /etc/os-release | cut -d'"' -f2 | cut -d'.' -f1)
|
||||
fi
|
||||
|
||||
if [ "$DISTRO" = "fedora" ]; then
|
||||
log_info "Добавление репозитория Remi для Fedora..."
|
||||
FEDORA_VERSION=$(rpm -E %fedora)
|
||||
|
||||
# Устанавливаем EPEL и Remi для Fedora
|
||||
$PKG_MANAGER install -y https://rpms.remirepo.net/fedora/remi-release-${FEDORA_VERSION}.rpm >/dev/null 2>&1 || true
|
||||
|
||||
# Включаем модуль PHP 8.3
|
||||
if command -v dnf >/dev/null 2>&1; then
|
||||
dnf module reset php -y >/dev/null 2>&1 || true
|
||||
dnf module enable php:remi-8.3 -y >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
elif echo "$DISTRO" | grep -qi "rocky\|rhel\|centos\|almalinux"; then
|
||||
log_info "Добавление репозитория Remi для RHEL/Rocky/CentOS..."
|
||||
|
||||
# Устанавливаем EPEL
|
||||
$PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true
|
||||
|
||||
# Добавляем Remi репозиторий в зависимости от версии
|
||||
if [ "$VERSION_ID" = "8" ]; then
|
||||
$PKG_MANAGER install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm >/dev/null 2>&1 || true
|
||||
elif [ "$VERSION_ID" = "9" ]; then
|
||||
$PKG_MANAGER install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm >/dev/null 2>&1 || true
|
||||
else
|
||||
log_warning "Неизвестная версия RHEL ($VERSION_ID), пробуем универсальный подход"
|
||||
$PKG_MANAGER install -y https://rpms.remirepo.net/enterprise/remi-release-${VERSION_ID}.rpm >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
# Включаем модуль PHP 8.3 если доступен DNF
|
||||
if command -v dnf >/dev/null 2>&1; then
|
||||
dnf module reset php -y >/dev/null 2>&1 || true
|
||||
dnf module enable php:remi-8.3 -y >/dev/null 2>&1 || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Обновляем кэш пакетов
|
||||
$PKG_MANAGER makecache >/dev/null 2>&1 || true
|
||||
|
||||
# Проверяем доступность PHP пакетов
|
||||
if ! $PKG_MANAGER list available | grep -E "php8[0-9].*8\.3|php-8\.3|php.*remi.*8\.3" >/dev/null 2>&1; then
|
||||
log_error "PHP 8.3 недоступен в репозиториях после добавления Remi"
|
||||
log_info "Доступные PHP пакеты:"
|
||||
$PKG_MANAGER list available | grep php | head -10
|
||||
exit 1
|
||||
fi
|
||||
log_success "Репозиторий Remi добавлен успешно"
|
||||
fi
|
||||
|
||||
log_step "Установка PHP 8.3 и расширений..."
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Список пакетов для Debian/Ubuntu
|
||||
PHP_PACKAGES="php8.3 php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd \
|
||||
php8.3-mbstring php8.3-xml php8.3-zip php8.3-opcache php8.3-intl \
|
||||
php8.3-bcmath libapache2-mod-php8.3"
|
||||
php8.3-bcmath php8.3-json php8.3-readline libapache2-mod-php8.3"
|
||||
|
||||
log_info "Устанавливаем пакеты: $PHP_PACKAGES"
|
||||
|
||||
if ! apt install -y $PHP_PACKAGES >/dev/null 2>&1; then
|
||||
log_error "Не удалось установить PHP 8.3 и/или его расширения."
|
||||
log_error "Не удалось установить базовые PHP пакеты. Подробности:"
|
||||
apt install -y $PHP_PACKAGES 2>&1 | tail -20
|
||||
|
||||
log_info "Попытка установки по одному пакету для выявления проблемного..."
|
||||
for pkg in $PHP_PACKAGES; do
|
||||
if apt install -y $pkg >/dev/null 2>&1; then
|
||||
log_success "Установлен: $pkg"
|
||||
else
|
||||
log_error "Не удалось установить: $pkg"
|
||||
fi
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||
if [ "$DISTRO" = "fedora" ]; then
|
||||
# Для Fedora используем PHP-FPM
|
||||
PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \
|
||||
php-mbstring php-xml php-zip php-opcache php-intl \
|
||||
php-bcmath php-fpm"
|
||||
else
|
||||
# Для Rocky Linux/CentOS используем PHP-FPM из Remi
|
||||
# Определяем, какие пакеты PHP нужно установить
|
||||
if $PKG_MANAGER list available | grep -q "php83-php\b"; then
|
||||
# Remi PHP 8.3 пакеты (Rocky/CentOS/RHEL)
|
||||
log_info "Используем пакеты php83-* из Remi репозитория"
|
||||
PHP_PACKAGES="php83-php php83-php-cli php83-php-common php83-php-mysqlnd php83-php-curl php83-php-gd \
|
||||
php83-php-mbstring php83-php-xml php83-php-zip php83-php-opcache php83-php-intl \
|
||||
php83-php-bcmath php83-php-fpm"
|
||||
php83-php-bcmath php83-php-json php83-php-fpm"
|
||||
|
||||
elif $PKG_MANAGER list available | grep -E "php-8\.3|php.*remi.*8\.3" >/dev/null 2>&1; then
|
||||
# Альтернативный формат пакетов Remi
|
||||
log_info "Используем пакеты php-* версии 8.3 из Remi репозитория"
|
||||
PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \
|
||||
php-mbstring php-xml php-zip php-opcache php-intl \
|
||||
php-bcmath php-json php-fpm"
|
||||
else
|
||||
# Стандартные пакеты (Fedora)
|
||||
log_info "Используем стандартные пакеты php-*"
|
||||
PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \
|
||||
php-mbstring php-xml php-zip php-opcache php-intl \
|
||||
php-bcmath php-json php-fpm"
|
||||
fi
|
||||
|
||||
log_info "Устанавливаем пакеты: $PHP_PACKAGES"
|
||||
|
||||
if ! $PKG_MANAGER install -y $PHP_PACKAGES >/dev/null 2>&1; then
|
||||
log_error "Не удалось установить PHP 8.3 и/или его расширения."
|
||||
log_error "Не удалось установить PHP пакеты. Подробности:"
|
||||
$PKG_MANAGER install -y $PHP_PACKAGES 2>&1 | tail -20
|
||||
|
||||
log_info "Попытка установки по одному пакету для выявления проблемного..."
|
||||
for pkg in $PHP_PACKAGES; do
|
||||
if $PKG_MANAGER install -y $pkg >/dev/null 2>&1; then
|
||||
log_success "Установлен: $pkg"
|
||||
else
|
||||
log_error "Не удалось установить: $pkg"
|
||||
fi
|
||||
done
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Создаем символические ссылки для PHP83 если нужно
|
||||
if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then
|
||||
log_info "Создание символических ссылок для php83..."
|
||||
ln -sf /opt/remi/php83/root/usr/bin/php /usr/bin/php >/dev/null 2>&1 || true
|
||||
ln -sf /opt/remi/php83/root/usr/bin/php-fpm /usr/bin/php-fpm >/dev/null 2>&1 || true
|
||||
|
||||
# Добавляем путь в PATH
|
||||
echo 'export PATH=/opt/remi/php83/root/usr/bin:$PATH' > /etc/profile.d/php83.sh
|
||||
source /etc/profile.d/php83.sh >/dev/null 2>&1 || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Проверяем успешность установки PHP
|
||||
log_info "Проверка установки PHP..."
|
||||
|
||||
if command -v php >/dev/null 2>&1; then
|
||||
PHP_VERSION=$(php -v 2>/dev/null | head -1 | cut -d' ' -f2 | cut -d'.' -f1,2 2>/dev/null || echo "неизвестно")
|
||||
if [[ "$PHP_VERSION" == "8.3" ]]; then
|
||||
log_success "PHP 8.3 успешно установлен (версия: $(php -v | head -1))"
|
||||
else
|
||||
log_warning "PHP установлен, но версия $PHP_VERSION (ожидалась 8.3)"
|
||||
log_info "Попытка исправления версии PHP..."
|
||||
|
||||
# Для Debian попробуем переключить версию
|
||||
if [ "$DISTRO_FAMILY" = "debian" ] && command -v update-alternatives >/dev/null 2>&1; then
|
||||
if [ -f /usr/bin/php8.3 ]; then
|
||||
update-alternatives --set php /usr/bin/php8.3 >/dev/null 2>&1 || true
|
||||
PHP_VERSION=$(php -v 2>/dev/null | head -1 | cut -d' ' -f2 | cut -d'.' -f1,2 2>/dev/null || echo "неизвестно")
|
||||
if [[ "$PHP_VERSION" == "8.3" ]]; then
|
||||
log_success "Версия PHP исправлена на 8.3"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_error "PHP не найден после установки"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем установку основных расширений
|
||||
log_info "Проверка PHP расширений..."
|
||||
REQUIRED_EXTENSIONS="mysqli pdo_mysql curl gd mbstring xml zip opcache intl bcmath json"
|
||||
MISSING_EXTENSIONS=""
|
||||
|
||||
for ext in $REQUIRED_EXTENSIONS; do
|
||||
if php -m | grep -q "^$ext$" 2>/dev/null; then
|
||||
log_success "Расширение $ext: установлено"
|
||||
else
|
||||
log_warning "Расширение $ext: НЕ найдено"
|
||||
MISSING_EXTENSIONS="$MISSING_EXTENSIONS $ext"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$MISSING_EXTENSIONS" ]; then
|
||||
log_warning "Отсутствующие расширения:$MISSING_EXTENSIONS"
|
||||
log_info "Попытка дополнительной установки расширений..."
|
||||
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
for ext in $MISSING_EXTENSIONS; do
|
||||
if [ "$ext" = "mysqli" ] || [ "$ext" = "pdo_mysql" ]; then
|
||||
apt install -y php8.3-mysql >/dev/null 2>&1 || true
|
||||
else
|
||||
apt install -y php8.3-$ext >/dev/null 2>&1 || true
|
||||
fi
|
||||
done
|
||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||
for ext in $MISSING_EXTENSIONS; do
|
||||
if [ "$ext" = "mysqli" ] || [ "$ext" = "pdo_mysql" ]; then
|
||||
$PKG_MANAGER install -y php*-mysqlnd >/dev/null 2>&1 || true
|
||||
else
|
||||
$PKG_MANAGER install -y php*-$ext >/dev/null 2>&1 || true
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
log_success "PHP 8.3 и расширения установлены"
|
||||
|
||||
log_step "Настройка Apache и модулей..."
|
||||
log_step "Настройка Apache и модулей..."
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
a2enmod php8.3 rewrite ssl headers expires deflate >/dev/null 2>&1
|
||||
|
||||
@@ -650,11 +856,11 @@ EOF
|
||||
log_success "Модули Apache настроены"
|
||||
|
||||
log_step "Создание конфигурации виртуального хоста..."
|
||||
mkdir -p "$WEBROOT"
|
||||
mkdir -p "$WEBROOT"
|
||||
|
||||
# Для Debian/Ubuntu создаем стандартный VirtualHost
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
cat > "$APACHE_CONF" <<EOF
|
||||
# Для Debian/Ubuntu создаем стандартный VirtualHost
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
cat > "$APACHE_CONF" <<EOF
|
||||
<VirtualHost *:80>
|
||||
DocumentRoot $WEBROOT
|
||||
ServerName localhost
|
||||
@@ -815,21 +1021,7 @@ echo "Время сервера: " . date('Y-m-d H:i:s T') . "<br>";
|
||||
echo "Document Root: " . $_SERVER['DOCUMENT_ROOT'];
|
||||
echo "</div>";
|
||||
|
||||
// Проверка подключения к БД
|
||||
try {
|
||||
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS);
|
||||
echo "<div class='status success'>";
|
||||
echo "<strong>База данных подключена</strong><br>";
|
||||
echo "База данных: " . DB_NAME . "<br>";
|
||||
echo "Хост: " . DB_HOST;
|
||||
echo "</div>";
|
||||
} catch (PDOException $e) {
|
||||
echo "<div class='status warning'>";
|
||||
echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage());
|
||||
echo "</div>";
|
||||
}
|
||||
|
||||
// Проверка подключения к БД
|
||||
// Диагностика конфигурации БД
|
||||
echo "<div class='status warning'>";
|
||||
echo "<strong>Диагностика конфигурации БД:</strong><br>";
|
||||
|
||||
@@ -854,34 +1046,34 @@ if (file_exists(__DIR__ . '/db_config.php')) {
|
||||
echo "✗ Файл НЕ читаемый<br>";
|
||||
}
|
||||
} else {
|
||||
echo "✗ Файл db_config.php НЕ существует<br>";
|
||||
}
|
||||
echo "</div>";
|
||||
echo "✗ Файл db_config.php НЕ существует<br>";
|
||||
}
|
||||
echo "</div>";
|
||||
|
||||
// Теперь пробуем подключиться к БД
|
||||
if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config.php')) {
|
||||
try {
|
||||
require_once __DIR__ . '/db_config.php';
|
||||
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS);
|
||||
echo "<div class='status success'>";
|
||||
echo "<strong>База данных подключена</strong><br>";
|
||||
echo "База данных: " . DB_NAME . "<br>";
|
||||
echo "Хост: " . DB_HOST;
|
||||
echo "</div>";
|
||||
} catch (PDOException $e) {
|
||||
echo "<div class='status warning'>";
|
||||
echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage());
|
||||
echo "</div>";
|
||||
}
|
||||
} else {
|
||||
// Теперь пробуем подключиться к БД
|
||||
if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config.php')) {
|
||||
try {
|
||||
require_once __DIR__ . '/db_config.php';
|
||||
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS);
|
||||
echo "<div class='status success'>";
|
||||
echo "<strong>База данных подключена</strong><br>";
|
||||
echo "База данных: " . DB_NAME . "<br>";
|
||||
echo "Хост: " . DB_HOST;
|
||||
echo "</div>";
|
||||
} catch (PDOException $e) {
|
||||
echo "<div class='status warning'>";
|
||||
echo "<strong>Не удалось загрузить конфигурацию БД</strong>";
|
||||
echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage());
|
||||
echo "</div>";
|
||||
}
|
||||
|
||||
} else {
|
||||
echo "<div class='status warning'>";
|
||||
echo "<strong>Не удалось загрузить конфигурацию БД</strong>";
|
||||
echo "</div>";
|
||||
echo "</body>";
|
||||
echo "</html>";
|
||||
}
|
||||
|
||||
echo "</div>";
|
||||
echo "</body>";
|
||||
echo "</html>";
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user