Оптимизация index.php

This commit is contained in:
2025-08-11 04:51:04 +03:00
parent ca7b2da587
commit 1f9398ccce

View File

@@ -2,13 +2,11 @@
clear clear
set -e set -e
# Переменные
UNINSTALL=false UNINSTALL=false
REINSTALL=false REINSTALL=false
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="/tmp/altcor_install_$(date +%Y%m%d_%H%M%S).log" LOG_FILE="/tmp/altcor_install_$(date +%Y%m%d_%H%M%S).log"
# Цвета для вывода
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
@@ -16,7 +14,6 @@ BLUE='\033[0;34m'
CYAN='\033[0;36m' CYAN='\033[0;36m'
NC='\033[0m' NC='\033[0m'
# Обработка параметров командной строки
while getopts ":ur" opt; do while getopts ":ur" opt; do
case $opt in case $opt in
u) UNINSTALL=true ;; u) UNINSTALL=true ;;
@@ -31,7 +28,6 @@ while getopts ":ur" opt; do
esac esac
done done
# Функции логирования
log_to_file() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"; } log_to_file() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"; }
log_success() { echo -e "${GREEN}[Успех]${NC} $1"; log_to_file "SUCCESS: $1"; } log_success() { echo -e "${GREEN}[Успех]${NC} $1"; log_to_file "SUCCESS: $1"; }
log_error() { echo -e "${RED}[Ошибка]${NC} $1"; log_to_file "ERROR: $1"; } log_error() { echo -e "${RED}[Ошибка]${NC} $1"; log_to_file "ERROR: $1"; }
@@ -39,17 +35,14 @@ log_info() { echo -e "${BLUE}[Инфо]${NC} $1"; log_to_file "INFO: $1"; }
log_warning() { echo -e "${YELLOW}[Предупреждение]${NC} $1"; log_to_file "WARNING: $1"; } log_warning() { echo -e "${YELLOW}[Предупреждение]${NC} $1"; log_to_file "WARNING: $1"; }
log_step() { echo -e "${CYAN}[Шаг]${NC} $1"; log_to_file "STEP: $1"; } log_step() { echo -e "${CYAN}[Шаг]${NC} $1"; log_to_file "STEP: $1"; }
# Генерация безопасного пароля
generate_password() { generate_password() {
if command -v openssl >/dev/null 2>&1; then if command -v openssl >/dev/null 2>&1; then
openssl rand -base64 32 | tr -d "=+/" | cut -c1-16 openssl rand -base64 32 | tr -d "=+/" | cut -c1-16
else else
# Fallback для систем без openssl
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16
fi fi
} }
# Проверка прав администратора
check_root() { check_root() {
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
log_error "Запустите этот скрипт с правами администратора (sudo)." log_error "Запустите этот скрипт с правами администратора (sudo)."
@@ -57,7 +50,6 @@ check_root() {
fi fi
} }
# Определение дистрибутива
detect_distro() { detect_distro() {
if [ -f /etc/os-release ]; then if [ -f /etc/os-release ]; then
source /etc/os-release source /etc/os-release
@@ -92,7 +84,6 @@ detect_distro() {
PKG_MANAGER="yum" PKG_MANAGER="yum"
fi fi
# Определяем путь к PHP INI для RHEL семейства
if [ -f "/etc/opt/remi/php83/php.ini" ]; then if [ -f "/etc/opt/remi/php83/php.ini" ]; then
PHP_INI_PATH="/etc/opt/remi/php83/php.ini" PHP_INI_PATH="/etc/opt/remi/php83/php.ini"
PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf" PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf"
@@ -113,7 +104,6 @@ detect_distro() {
log_info "Обнаружен дистрибутив: $DISTRO ($DISTRO_FAMILY)" log_info "Обнаружен дистрибутив: $DISTRO ($DISTRO_FAMILY)"
} }
# Функция для безопасного выполнения команд
safe_execute() { safe_execute() {
local description="$1" local description="$1"
shift shift
@@ -129,7 +119,6 @@ safe_execute() {
fi fi
} }
# Проверка статуса компонента
check_component_status() { check_component_status() {
local component=$1 local component=$1
local command_check=$2 local command_check=$2
@@ -138,26 +127,24 @@ check_component_status() {
if command -v "$command_check" >/dev/null 2>&1; then if command -v "$command_check" >/dev/null 2>&1; then
if [[ -n "$service_check" ]]; then if [[ -n "$service_check" ]]; then
if systemctl is-active --quiet "$service_check" 2>/dev/null; then if systemctl is-active --quiet "$service_check" 2>/dev/null; then
return 0 # Установлен и работает return 0
else else
return 1 # Установлен, но не работает return 1
fi fi
else else
return 0 # Установлен return 0
fi fi
else else
return 2 # Не установлен return 2
fi fi
} }
# Проверка существующей установки
check_existing_installation() { check_existing_installation() {
log_step "Проверка существующей установки..." log_step "Проверка существующей установки..."
local apache_status php_status mariadb_status redis_status local apache_status php_status mariadb_status redis_status
local need_reinstall=false local need_reinstall=false
# Проверка Apache
log_info "Проверка Apache..." log_info "Проверка Apache..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
check_component_status "Apache" "apache2" "apache2" check_component_status "Apache" "apache2" "apache2"
@@ -167,17 +154,14 @@ check_existing_installation() {
apache_status=$? apache_status=$?
fi fi
# Проверка PHP
log_info "Проверка PHP..." log_info "Проверка PHP..."
check_component_status "PHP" "php" "" check_component_status "PHP" "php" ""
php_status=$? php_status=$?
# Проверка MariaDB
log_info "Проверка MariaDB..." log_info "Проверка MariaDB..."
check_component_status "MariaDB" "mysql" "mariadb" check_component_status "MariaDB" "mysql" "mariadb"
mariadb_status=$? mariadb_status=$?
# Проверка Redis
log_info "Проверка Redis..." log_info "Проверка Redis..."
if systemctl is-active --quiet redis-server 2>/dev/null || systemctl is-active --quiet redis 2>/dev/null; then if systemctl is-active --quiet redis-server 2>/dev/null || systemctl is-active --quiet redis 2>/dev/null; then
redis_status=0 redis_status=0
@@ -187,14 +171,12 @@ check_existing_installation() {
redis_status=2 redis_status=2
fi fi
# Вывод статуса компонентов
echo "" echo ""
display_component_status "Apache" $apache_status display_component_status "Apache" $apache_status
display_php_status $php_status display_php_status $php_status
display_component_status "MariaDB" $mariadb_status display_component_status "MariaDB" $mariadb_status
display_component_status "Redis" $redis_status display_component_status "Redis" $redis_status
# Проверка конфигурации БД
if [ -f "/var/www/html/db_config.php" ]; then if [ -f "/var/www/html/db_config.php" ]; then
echo -e "Конфигурация БД: ${GREEN}Найдена${NC}" echo -e "Конфигурация БД: ${GREEN}Найдена${NC}"
else else
@@ -204,7 +186,6 @@ check_existing_installation() {
echo "" echo ""
# Определяем необходимость переустановки
if [[ $apache_status -ne 0 ]] || [[ $php_status -ne 0 ]] || [[ $mariadb_status -ne 0 ]]; then if [[ $apache_status -ne 0 ]] || [[ $php_status -ne 0 ]] || [[ $mariadb_status -ne 0 ]]; then
need_reinstall=true need_reinstall=true
fi fi
@@ -212,7 +193,6 @@ check_existing_installation() {
return $([ "$need_reinstall" = "true" ] && echo 1 || echo 0) return $([ "$need_reinstall" = "true" ] && echo 1 || echo 0)
} }
# Отображение статуса компонента
display_component_status() { display_component_status() {
local name=$1 local name=$1
local status=$2 local status=$2
@@ -224,7 +204,6 @@ display_component_status() {
esac esac
} }
# Отображение статуса PHP с проверкой версии
display_php_status() { display_php_status() {
local status=$1 local status=$1
@@ -243,22 +222,18 @@ display_php_status() {
return 0 return 0
} }
# Полное удаление системы
full_uninstall() { full_uninstall() {
log_step "Начинаем полное удаление Altcor..." log_step "Начинаем полное удаление Altcor..."
# Остановка сервисов
log_info "Остановка сервисов..." log_info "Остановка сервисов..."
for service in nginx apache2 httpd php*-fpm mariadb mysql redis redis-server php83-php-fpm; do for service in nginx apache2 httpd php*-fpm mariadb mysql redis redis-server php83-php-fpm; do
systemctl stop "$service" 2>/dev/null || true systemctl stop "$service" 2>/dev/null || true
done done
# Удаление пакетов
log_info "Удаление пакетов..." log_info "Удаление пакетов..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
# Подготавливаем автоматические ответы для удаления MariaDB/MySQL
for db_package in mariadb-server mysql-server; do for db_package in mariadb-server mysql-server; do
for version in "" "-10.3" "-10.5" "-10.6" "-10.11" "-5.7" "-8.0"; do for version in "" "-10.3" "-10.5" "-10.6" "-10.11" "-5.7" "-8.0"; do
echo "${db_package}${version} mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true echo "${db_package}${version} mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true
@@ -273,7 +248,6 @@ full_uninstall() {
$PKG_MANAGER remove -y nginx httpd php* mariadb* mysql* redis* $PKG_MANAGER remove -y nginx httpd php* mariadb* mysql* redis*
fi fi
# Удаление файлов и директорий
log_info "Удаление файлов конфигурации и данных..." log_info "Удаление файлов конфигурации и данных..."
rm -rf /etc/nginx /etc/apache2 /etc/httpd /etc/php* /var/www/html/* \ rm -rf /etc/nginx /etc/apache2 /etc/httpd /etc/php* /var/www/html/* \
/var/lib/mysql* /var/lib/redis* ~/.mysql_history /root/.mysql_history \ /var/lib/mysql* /var/lib/redis* ~/.mysql_history /root/.mysql_history \
@@ -289,7 +263,6 @@ full_uninstall() {
fi fi
} }
# Обновление системы и установка базовых пакетов
update_system() { update_system() {
log_step "Обновление системы и установка базовых пакетов..." log_step "Обновление системы и установка базовых пакетов..."
@@ -307,7 +280,6 @@ update_system() {
fi fi
} }
# Настройка репозиториев PHP 8.3
setup_php_repositories() { setup_php_repositories() {
log_step "Настройка репозиториев для PHP 8.3..." log_step "Настройка репозиториев для PHP 8.3..."
@@ -315,12 +287,10 @@ setup_php_repositories() {
if ! apt-cache show php8.3 &>/dev/null; then if ! apt-cache show php8.3 &>/dev/null; then
log_info "Добавление репозитория Sury для PHP 8.3..." log_info "Добавление репозитория Sury для PHP 8.3..."
# Добавляем ключ GPG
if ! curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/php-archive-keyring.gpg 2>/dev/null; then if ! curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/php-archive-keyring.gpg 2>/dev/null; then
log_warning "Не удалось добавить ключ Sury, пробуем PPA..." log_warning "Не удалось добавить ключ Sury, пробуем PPA..."
safe_execute "Добавление PPA ondrej/php" add-apt-repository ppa:ondrej/php -y safe_execute "Добавление PPA ondrej/php" add-apt-repository ppa:ondrej/php -y
else else
# Добавляем репозиторий Sury
CODENAME=$(lsb_release -cs) 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 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
fi fi
@@ -348,7 +318,6 @@ setup_php_repositories() {
$PKG_MANAGER install -y "https://rpms.remirepo.net/enterprise/remi-release-${version_id}.rpm" $PKG_MANAGER install -y "https://rpms.remirepo.net/enterprise/remi-release-${version_id}.rpm"
fi fi
# Включаем модуль PHP 8.3 если доступен DNF
if command -v dnf >/dev/null 2>&1; then if command -v dnf >/dev/null 2>&1; then
safe_execute "Сброс модуля PHP" dnf module reset php -y || true safe_execute "Сброс модуля PHP" dnf module reset php -y || true
safe_execute "Включение модуля PHP 8.3" dnf module enable php:remi-8.3 -y || true safe_execute "Включение модуля PHP 8.3" dnf module enable php:remi-8.3 -y || true
@@ -358,11 +327,9 @@ setup_php_repositories() {
fi fi
} }
# Установка компонентов системы
install_components() { install_components() {
log_step "Установка основных компонентов..." log_step "Установка основных компонентов..."
# Остановка конфликтующих сервисов
log_info "Остановка конфликтующих сервисов..." log_info "Остановка конфликтующих сервисов..."
for service in nginx httpd apache2 php*-fpm mariadb mysql; do for service in nginx httpd apache2 php*-fpm mariadb mysql; do
systemctl stop "$service" 2>/dev/null || true systemctl stop "$service" 2>/dev/null || true
@@ -371,34 +338,27 @@ install_components() {
sleep 3 sleep 3
# Удаление старых версий
remove_old_packages remove_old_packages
# Установка Apache
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
safe_execute "Установка Apache" apt install -y apache2 safe_execute "Установка Apache" apt install -y apache2
else else
safe_execute "Установка Apache (httpd)" $PKG_MANAGER install -y httpd safe_execute "Установка Apache (httpd)" $PKG_MANAGER install -y httpd
fi fi
# Установка MariaDB
install_mariadb install_mariadb
# Установка PHP 8.3
install_php83 install_php83
# Установка дополнительных компонентов
install_additional_components install_additional_components
} }
# Удаление старых пакетов
remove_old_packages() { remove_old_packages() {
log_info "Удаление старых версий пакетов..." log_info "Удаление старых версий пакетов..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
# Настройка автоматических ответов для MySQL/MariaDB
for db_package in mariadb-server mysql-server; do for db_package in mariadb-server mysql-server; do
for version in "" "-10.3" "-10.5" "-10.6" "-10.11" "-5.7" "-8.0"; do for version in "" "-10.3" "-10.5" "-10.6" "-10.11" "-5.7" "-8.0"; do
echo "${db_package}${version} mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true echo "${db_package}${version} mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true
@@ -413,11 +373,9 @@ remove_old_packages() {
$PKG_MANAGER remove -y nginx php php7* php80* php81* php82* mariadb* mysql* 2>/dev/null || true $PKG_MANAGER remove -y nginx php php7* php80* php81* php82* mariadb* mysql* 2>/dev/null || true
fi fi
# Удаление файлов данных MySQL/MariaDB
rm -rf /var/lib/mysql* /etc/mysql* /var/log/mysql* /etc/my.cnf* 2>/dev/null || true rm -rf /var/lib/mysql* /etc/mysql* /var/log/mysql* /etc/my.cnf* 2>/dev/null || true
} }
# Установка MariaDB
install_mariadb() { install_mariadb() {
log_info "Установка MariaDB..." log_info "Установка MariaDB..."
@@ -430,11 +388,9 @@ install_mariadb() {
safe_execute "Установка MariaDB" $PKG_MANAGER install -y mariadb-server safe_execute "Установка MariaDB" $PKG_MANAGER install -y mariadb-server
fi fi
# Запуск и включение MariaDB
safe_execute "Запуск MariaDB" systemctl start mariadb safe_execute "Запуск MariaDB" systemctl start mariadb
safe_execute "Включение MariaDB в автозагрузку" systemctl enable mariadb safe_execute "Включение MariaDB в автозагрузку" systemctl enable mariadb
# Ожидание полного запуска
log_info "Ожидание полного запуска MariaDB..." log_info "Ожидание полного запуска MariaDB..."
local retry_count=0 local retry_count=0
while ! systemctl is-active --quiet mariadb && [ $retry_count -lt 10 ]; do while ! systemctl is-active --quiet mariadb && [ $retry_count -lt 10 ]; do
@@ -448,7 +404,6 @@ install_mariadb() {
fi fi
} }
# Установка PHP 8.3
install_php83() { install_php83() {
log_info "Установка PHP 8.3 и расширений..." log_info "Установка PHP 8.3 и расширений..."
@@ -456,7 +411,6 @@ install_php83() {
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
local 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 php8.3-json php8.3-readline libapache2-mod-php8.3" local 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 php8.3-json php8.3-readline libapache2-mod-php8.3"
else else
# Определяем доступные пакеты PHP для RHEL семейства
if $PKG_MANAGER list available | grep -q "php83-php\b"; then if $PKG_MANAGER list available | grep -q "php83-php\b"; then
local 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-json php83-php-fpm" local 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-json php83-php-fpm"
else else
@@ -470,17 +424,14 @@ install_php83() {
exit 1 exit 1
fi fi
# Создание символических ссылок для php83 (если нужно)
if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then
ln -sf /opt/remi/php83/root/usr/bin/php /usr/bin/php 2>/dev/null || true ln -sf /opt/remi/php83/root/usr/bin/php /usr/bin/php 2>/dev/null || true
echo 'export PATH=/opt/remi/php83/root/usr/bin:$PATH' > /etc/profile.d/php83.sh echo 'export PATH=/opt/remi/php83/root/usr/bin:$PATH' > /etc/profile.d/php83.sh
fi fi
# Проверка установки PHP
verify_php_installation verify_php_installation
} }
# Проверка установки PHP
verify_php_installation() { verify_php_installation() {
log_info "Проверка установки PHP..." log_info "Проверка установки PHP..."
@@ -493,7 +444,6 @@ verify_php_installation() {
if [[ "$php_version" != "8.3" ]]; then if [[ "$php_version" != "8.3" ]]; then
log_warning "PHP версия $php_version (ожидалась 8.3)" log_warning "PHP версия $php_version (ожидалась 8.3)"
# Попытка исправления версии для Debian
if [ "$DISTRO_FAMILY" = "debian" ] && [ -f /usr/bin/php8.3 ]; then if [ "$DISTRO_FAMILY" = "debian" ] && [ -f /usr/bin/php8.3 ]; then
update-alternatives --set php /usr/bin/php8.3 2>/dev/null || true update-alternatives --set php /usr/bin/php8.3 2>/dev/null || true
php_version=$(php -v 2>/dev/null | head -1 | cut -d' ' -f2 | cut -d'.' -f1,2 2>/dev/null || echo "неизвестно") php_version=$(php -v 2>/dev/null | head -1 | cut -d' ' -f2 | cut -d'.' -f1,2 2>/dev/null || echo "неизвестно")
@@ -507,11 +457,9 @@ verify_php_installation() {
exit 1 exit 1
fi fi
# Проверка расширений PHP
verify_php_extensions verify_php_extensions
} }
# Проверка расширений PHP
verify_php_extensions() { verify_php_extensions() {
log_info "Проверка PHP расширений..." log_info "Проверка PHP расширений..."
@@ -533,7 +481,6 @@ verify_php_extensions() {
fi fi
} }
# Установка недостающих расширений PHP
install_missing_php_extensions() { install_missing_php_extensions() {
local missing_extensions="$1" local missing_extensions="$1"
@@ -556,7 +503,6 @@ install_missing_php_extensions() {
fi fi
} }
# Установка дополнительных компонентов
install_additional_components() { install_additional_components() {
log_info "Установка дополнительных компонентов (Redis, LibreOffice, Java)..." log_info "Установка дополнительных компонентов (Redis, LibreOffice, Java)..."
@@ -570,7 +516,6 @@ install_additional_components() {
fi fi
} }
# Настройка Apache и PHP
configure_apache_php() { configure_apache_php() {
log_step "Настройка Apache и PHP..." log_step "Настройка Apache и PHP..."
@@ -580,47 +525,36 @@ configure_apache_php() {
configure_apache_rhel configure_apache_rhel
fi fi
# Настройка PHP.ini
configure_php_ini configure_php_ini
# Создание виртуального хоста
create_virtual_host create_virtual_host
# Проверка конфигурации Apache
verify_apache_config verify_apache_config
} }
# Настройка Apache для Debian/Ubuntu
configure_apache_debian() { configure_apache_debian() {
log_info "Настройка Apache для Debian/Ubuntu..." log_info "Настройка Apache для Debian/Ubuntu..."
# Включение модулей
a2enmod php8.3 rewrite ssl headers expires deflate 2>/dev/null || true a2enmod php8.3 rewrite ssl headers expires deflate 2>/dev/null || true
# Отключение старых версий PHP
for php_ver in 7.4 8.0 8.1 8.2; do for php_ver in 7.4 8.0 8.1 8.2; do
a2dismod "php$php_ver" 2>/dev/null || true a2dismod "php$php_ver" 2>/dev/null || true
done done
} }
# Настройка Apache для RHEL семейства
configure_apache_rhel() { configure_apache_rhel() {
log_info "Настройка Apache для RHEL семейства..." log_info "Настройка Apache для RHEL семейства..."
# Удаление старых конфигураций PHP
rm -f /etc/httpd/conf.d/php.conf /etc/httpd/conf.modules.d/*php*.conf 2>/dev/null || true rm -f /etc/httpd/conf.d/php.conf /etc/httpd/conf.modules.d/*php*.conf 2>/dev/null || true
# Настройка PHP-FPM
configure_php_fpm configure_php_fpm
# Создание конфигурации PHP-FPM для Apache
create_php_fpm_config create_php_fpm_config
# Создание общей конфигурации Altcor
create_altcor_config create_altcor_config
} }
# Настройка PHP-FPM
configure_php_fpm() { configure_php_fpm() {
log_info "Настройка PHP-FPM..." log_info "Настройка PHP-FPM..."
@@ -629,30 +563,25 @@ configure_php_fpm() {
exit 1 exit 1
fi fi
# Создание резервной копии
cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)" cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
# Настройка параметров PHP-FPM pool
sed -i "s|;*listen = .*|listen = $SOCKET_PATH|" "$PHP_FPM_CONF" 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.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF"
sed -i 's/;*listen.group = .*/listen.group = 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/;*listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF"
sed -i 's/;*user = .*/user = apache/' "$PHP_FPM_CONF" sed -i 's/;*user = .*/user = apache/' "$PHP_FPM_CONF"
sed -i 's/;*group = .*/group = apache/' "$PHP_FPM_CONF" sed -i 's/;*group = .*/group = apache/' "$PHP_FPM_CONF"
# Настройка производительности
sed -i 's/;*pm = .*/pm = dynamic/' "$PHP_FPM_CONF" sed -i 's/;*pm = .*/pm = dynamic/' "$PHP_FPM_CONF"
sed -i 's/;*pm.max_children = .*/pm.max_children = 50/' "$PHP_FPM_CONF" sed -i 's/;*pm.max_children = .*/pm.max_children = 50/' "$PHP_FPM_CONF"
sed -i 's/;*pm.start_servers = .*/pm.start_servers = 5/' "$PHP_FPM_CONF" sed -i 's/;*pm.start_servers = .*/pm.start_servers = 5/' "$PHP_FPM_CONF"
sed -i 's/;*pm.min_spare_servers = .*/pm.min_spare_servers = 5/' "$PHP_FPM_CONF" sed -i 's/;*pm.min_spare_servers = .*/pm.min_spare_servers = 5/' "$PHP_FPM_CONF"
sed -i 's/;*pm.max_spare_servers = .*/pm.max_spare_servers = 35/' "$PHP_FPM_CONF" sed -i 's/;*pm.max_spare_servers = .*/pm.max_spare_servers = 35/' "$PHP_FPM_CONF"
# Создание директории для socket
local socket_dir=$(dirname "$SOCKET_PATH") local socket_dir=$(dirname "$SOCKET_PATH")
mkdir -p "$socket_dir" mkdir -p "$socket_dir"
chown apache:apache "$socket_dir" chown apache:apache "$socket_dir"
# Запуск PHP-FPM
safe_execute "Запуск PHP-FPM" systemctl start "$PHP_FPM_SERVICE" safe_execute "Запуск PHP-FPM" systemctl start "$PHP_FPM_SERVICE"
safe_execute "Включение PHP-FPM в автозагрузку" systemctl enable "$PHP_FPM_SERVICE" safe_execute "Включение PHP-FPM в автозагрузку" systemctl enable "$PHP_FPM_SERVICE"
@@ -663,7 +592,6 @@ configure_php_fpm() {
fi fi
} }
# Создание конфигурации PHP-FPM для Apache
create_php_fpm_config() { create_php_fpm_config() {
log_info "Создание конфигурации PHP-FPM для Apache..." log_info "Создание конфигурации PHP-FPM для Apache..."
@@ -702,7 +630,6 @@ ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:$SOCKET_PATH|fcgi://localhost/var/www/htm
EOF EOF
} }
# Создание основной конфигурации Altcor
create_altcor_config() { create_altcor_config() {
log_info "Создание конфигурации Altcor..." log_info "Создание конфигурации Altcor..."
@@ -783,7 +710,6 @@ ServerSignature Off
EOF EOF
} }
# Настройка PHP.ini
configure_php_ini() { configure_php_ini() {
log_info "Настройка PHP.ini..." log_info "Настройка PHP.ini..."
@@ -792,24 +718,20 @@ configure_php_ini() {
return return
fi fi
# Создание резервной копии
cp "$PHP_INI_PATH" "${PHP_INI_PATH}.backup.$(date +%Y%m%d_%H%M%S)" cp "$PHP_INI_PATH" "${PHP_INI_PATH}.backup.$(date +%Y%m%d_%H%M%S)"
# Основные настройки
sed -i 's/;*upload_max_filesize = .*/upload_max_filesize = 64M/' "$PHP_INI_PATH" sed -i 's/;*upload_max_filesize = .*/upload_max_filesize = 64M/' "$PHP_INI_PATH"
sed -i 's/;*post_max_size = .*/post_max_size = 64M/' "$PHP_INI_PATH" sed -i 's/;*post_max_size = .*/post_max_size = 64M/' "$PHP_INI_PATH"
sed -i 's/;*max_execution_time = .*/max_execution_time = 300/' "$PHP_INI_PATH" sed -i 's/;*max_execution_time = .*/max_execution_time = 300/' "$PHP_INI_PATH"
sed -i 's/;*memory_limit = .*/memory_limit = 256M/' "$PHP_INI_PATH" sed -i 's/;*memory_limit = .*/memory_limit = 256M/' "$PHP_INI_PATH"
sed -i 's/;*max_input_vars = .*/max_input_vars = 3000/' "$PHP_INI_PATH" sed -i 's/;*max_input_vars = .*/max_input_vars = 3000/' "$PHP_INI_PATH"
# Настройки OPcache
sed -i 's/;*opcache.enable=.*/opcache.enable=1/' "$PHP_INI_PATH" sed -i 's/;*opcache.enable=.*/opcache.enable=1/' "$PHP_INI_PATH"
sed -i 's/;*opcache.enable_cli=.*/opcache.enable_cli=1/' "$PHP_INI_PATH" sed -i 's/;*opcache.enable_cli=.*/opcache.enable_cli=1/' "$PHP_INI_PATH"
sed -i 's/;*opcache.memory_consumption=.*/opcache.memory_consumption=128/' "$PHP_INI_PATH" sed -i 's/;*opcache.memory_consumption=.*/opcache.memory_consumption=128/' "$PHP_INI_PATH"
sed -i 's/;*opcache.revalidate_freq=.*/opcache.revalidate_freq=2/' "$PHP_INI_PATH" sed -i 's/;*opcache.revalidate_freq=.*/opcache.revalidate_freq=2/' "$PHP_INI_PATH"
sed -i 's/;*opcache.max_accelerated_files=.*/opcache.max_accelerated_files=4000/' "$PHP_INI_PATH" sed -i 's/;*opcache.max_accelerated_files=.*/opcache.max_accelerated_files=4000/' "$PHP_INI_PATH"
# Настройки безопасности
sed -i 's/;*expose_php = .*/expose_php = Off/' "$PHP_INI_PATH" sed -i 's/;*expose_php = .*/expose_php = Off/' "$PHP_INI_PATH"
sed -i 's/;*display_errors = .*/display_errors = Off/' "$PHP_INI_PATH" sed -i 's/;*display_errors = .*/display_errors = Off/' "$PHP_INI_PATH"
sed -i 's/;*log_errors = .*/log_errors = On/' "$PHP_INI_PATH" sed -i 's/;*log_errors = .*/log_errors = On/' "$PHP_INI_PATH"
@@ -817,7 +739,6 @@ configure_php_ini() {
log_success "PHP.ini настроен" log_success "PHP.ini настроен"
} }
# Создание виртуального хоста
create_virtual_host() { create_virtual_host() {
log_info "Создание конфигурации виртуального хоста..." log_info "Создание конфигурации виртуального хоста..."
@@ -869,7 +790,6 @@ EOF
fi fi
} }
# Проверка конфигурации Apache
verify_apache_config() { verify_apache_config() {
log_info "Проверка конфигурации Apache..." log_info "Проверка конфигурации Apache..."
@@ -884,7 +804,6 @@ verify_apache_config() {
log_error "Конфигурация Apache (httpd) содержит ошибки:" log_error "Конфигурация Apache (httpd) содержит ошибки:"
httpd -t 2>&1 | tee -a "$LOG_FILE" httpd -t 2>&1 | tee -a "$LOG_FILE"
# Попытка исправления
if ! httpd -M 2>/dev/null | grep -q "rewrite_module"; then if ! httpd -M 2>/dev/null | grep -q "rewrite_module"; then
echo "LoadModule rewrite_module modules/mod_rewrite.so" >> /etc/httpd/conf.d/altcor.conf echo "LoadModule rewrite_module modules/mod_rewrite.so" >> /etc/httpd/conf.d/altcor.conf
fi fi
@@ -899,7 +818,6 @@ verify_apache_config() {
log_success "Конфигурация Apache проверена" log_success "Конфигурация Apache проверена"
} }
# Настройка базы данных
configure_database() { configure_database() {
log_step "Настройка базы данных MariaDB..." log_step "Настройка базы данных MariaDB..."
@@ -910,19 +828,15 @@ configure_database() {
exit 1 exit 1
fi fi
# Выполнение настройки безопасности MariaDB
setup_mariadb_security "$db_password" setup_mariadb_security "$db_password"
# Создание конфигурационного файла БД
create_db_config "$db_password" create_db_config "$db_password"
# Сохранение учетных данных
save_db_credentials "$db_password" save_db_credentials "$db_password"
echo "$db_password" # Возвращаем пароль для использования в main echo "$db_password"
} }
# Настройка безопасности MariaDB
setup_mariadb_security() { setup_mariadb_security() {
local db_password="$1" local db_password="$1"
@@ -940,7 +854,6 @@ setup_mariadb_security() {
fi fi
} }
# Первичная настройка MariaDB
setup_fresh_mariadb() { setup_fresh_mariadb() {
local db_password="$1" local db_password="$1"
local script_file="/tmp/mysql_secure_$(date +%s).sql" local script_file="/tmp/mysql_secure_$(date +%s).sql"
@@ -966,7 +879,6 @@ MYSQL_SCRIPT
rm -f "$script_file" rm -f "$script_file"
} }
# Обновление существующей MariaDB
update_existing_mariadb() { update_existing_mariadb() {
local db_password="$1" local db_password="$1"
local script_file="/tmp/mysql_update_$(date +%s).sql" local script_file="/tmp/mysql_update_$(date +%s).sql"
@@ -987,7 +899,6 @@ MYSQL_SCRIPT
rm -f "$script_file" rm -f "$script_file"
} }
# Сброс пароля MariaDB
reset_mariadb_password() { reset_mariadb_password() {
local db_password="$1" local db_password="$1"
@@ -1030,7 +941,6 @@ MYSQL_SCRIPT
rm -f "$reset_script" rm -f "$reset_script"
} }
# Создание конфигурационного файла БД
create_db_config() { create_db_config() {
local db_password="$1" local db_password="$1"
@@ -1047,12 +957,10 @@ define('DB_CHARSET', 'utf8mb4');
define('OFFICE', '/usr/bin/libreoffice'); define('OFFICE', '/usr/bin/libreoffice');
?> ?>
EOF EOF
# Установка правильных прав доступа
chown "$WEBSERVER_USER:$WEBSERVER_USER" "$WEBROOT/db_config.php" chown "$WEBSERVER_USER:$WEBSERVER_USER" "$WEBROOT/db_config.php"
chmod 600 "$WEBROOT/db_config.php" chmod 600 "$WEBROOT/db_config.php"
# Проверка доступности файла
if ! sudo -u "$WEBSERVER_USER" test -r "$WEBROOT/db_config.php"; then if ! sudo -u "$WEBSERVER_USER" test -r "$WEBROOT/db_config.php"; then
log_error "Веб-сервер не может читать db_config.php" log_error "Веб-сервер не может читать db_config.php"
exit 1 exit 1
@@ -1061,7 +969,6 @@ EOF
log_success "Конфигурация БД создана" log_success "Конфигурация БД создана"
} }
# Сохранение учетных данных
save_db_credentials() { save_db_credentials() {
local db_password="$1" local db_password="$1"
local credentials_file="/root/.db_password" local credentials_file="/root/.db_password"
@@ -1080,24 +987,18 @@ EOF
log_info "Учетные данные сохранены в $credentials_file" log_info "Учетные данные сохранены в $credentials_file"
} }
# Установка веб-приложения
setup_web_application() { setup_web_application() {
log_step "Настройка веб-приложения..." log_step "Настройка веб-приложения..."
# Очистка старых файлов (кроме db_config.php)
find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true
# Загрузка файлов приложения
download_application_files download_application_files
# Создание .htaccess
create_htaccess_file create_htaccess_file
# Настройка прав доступа
setup_file_permissions setup_file_permissions
} }
# Загрузка файлов приложения
download_application_files() { download_application_files() {
local download_url="https://cloud.altcor.ru/setup/download.php" local download_url="https://cloud.altcor.ru/setup/download.php"
@@ -1110,17 +1011,13 @@ download_application_files() {
fi fi
fi fi
# Если загрузка не удалась, создаем резервную страницу
log_warning "Не удалось загрузить файлы с $download_url, создаем резервную страницу" log_warning "Не удалось загрузить файлы с $download_url, создаем резервную страницу"
create_fallback_index create_fallback_index
} }
# Создание резервной индексной страницы
create_fallback_index() { create_fallback_index() {
cat > "$WEBROOT/index.php" << 'EOF' cat > "$WEBROOT/index.php" << 'EOF'
<?php <?php require_once __DIR__ . '/db_config.php'; ?>
require_once __DIR__ . '/db_config.php';
?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang='ru'> <html lang='ru'>
<head> <head>
@@ -1128,76 +1025,33 @@ require_once __DIR__ . '/db_config.php';
<meta name='viewport' content='width=device-width, initial-scale=1.0'> <meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Altcor - Сервер готов</title> <title>Altcor - Сервер готов</title>
<style> <style>
body { body { font-family: -apple-system, sans-serif; margin: 40px; background: linear-gradient(135deg, #667eea, #764ba2); min-height: 90vh; }
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; .container { max-width: 600px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); }
margin: 0; padding: 40px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); h1 { color: #2c5282; text-align: center; margin-top: 0; }
min-height: 100vh; color: #333; .status { padding: 15px; margin: 15px 0; border-radius: 5px; }
} .success { background: #c6f6d5; color: #22543d; border-left: 4px solid #38a169; }
.container { .info { background: #bee3f8; color: #2a4365; border-left: 4px solid #3182ce; }
max-width: 800px; margin: 0 auto; background: white;
padding: 40px; border-radius: 15px;
box-shadow: 0 20px 40px rgba(0,0,0,0.1);
}
h1 { color: #2c5282; margin-top: 0; text-align: center; }
.status {
padding: 15px; margin: 15px 0; border-radius: 8px;
border-left: 4px solid;
}
.success {
background: #c6f6d5; color: #22543d;
border-left-color: #38a169;
}
.info {
background: #bee3f8; color: #2a4365;
border-left-color: #3182ce;
}
.grid {
display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px; margin-top: 20px;
}
.card {
background: #f7fafc; padding: 20px; border-radius: 10px;
border: 1px solid #e2e8f0;
}
</style> </style>
</head> </head>
<body> <body>
<div class='container'> <div class='container'>
<h1>🚀 Altcor - Сервер готов к работе</h1> <h1>Altcor - Система готова</h1>
<div class='status success'> <div class='status success'>
<strong>✅ Система успешно установлена</strong><br> <strong>PHP <?= phpversion() ?> работает</strong><br>
PHP <?= phpversion() ?> работает корректно<br> Время: <?= date('Y-m-d H:i:s') ?>
Время сервера: <?= date('Y-m-d H:i:s T') ?>
</div> </div>
<div class='status <?=
<div class='grid'> try {
<div class='card'> new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
<h3>🔧 Системная информация</h3> echo "success'>✅ База данных подключена";
<p><strong>Document Root:</strong> <?= $_SERVER['DOCUMENT_ROOT'] ?></p> } catch (PDOException $e) {
<p><strong>Server Software:</strong> <?= $_SERVER['SERVER_SOFTWARE'] ?? 'N/A' ?></p> echo "info'>⚠️ БД: " . htmlspecialchars($e->getMessage());
<p><strong>PHP Version:</strong> <?= phpversion() ?></p> }
</div> ?>
<div class='card'>
<h3>💾 База данных</h3>
<?php
try {
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS);
echo "<p style='color: #22543d;'>✅ Подключение успешно</p>";
echo "<p><strong>База:</strong> " . DB_NAME . "</p>";
echo "<p><strong>Хост:</strong> " . DB_HOST . "</p>";
} catch (PDOException $e) {
echo "<p style='color: #e53e3e;'>❌ Ошибка подключения</p>";
echo "<p>" . htmlspecialchars($e->getMessage()) . "</p>";
}
?>
</div>
</div> </div>
<div class='status info'> <div class='status info'>
<strong>🎉 Установка завершена!</strong><br> <strong>Установка завершена!</strong><br>
Система готова для развертывания вашего приложения Altcor. Система готова для развертывания Altcor.
</div> </div>
</div> </div>
</body> </body>
@@ -1205,7 +1059,6 @@ require_once __DIR__ . '/db_config.php';
EOF EOF
} }
# Создание .htaccess файла
create_htaccess_file() { create_htaccess_file() {
log_info "Создание .htaccess файла..." log_info "Создание .htaccess файла..."
@@ -1258,31 +1111,25 @@ RewriteEngine On
EOF EOF
} }
# Настройка прав доступа к файлам
setup_file_permissions() { setup_file_permissions() {
log_info "Настройка прав доступа к файлам..." log_info "Настройка прав доступа к файлам..."
# Установка владельца и группы
chown -R "$WEBSERVER_USER:$WEBSERVER_USER" "$WEBROOT" chown -R "$WEBSERVER_USER:$WEBSERVER_USER" "$WEBROOT"
# Установка прав доступа
find "$WEBROOT" -type d -exec chmod 755 {} \; find "$WEBROOT" -type d -exec chmod 755 {} \;
find "$WEBROOT" -type f -exec chmod 644 {} \; find "$WEBROOT" -type f -exec chmod 644 {} \;
# Специальные права для конфигурации БД
chmod 600 "$WEBROOT/db_config.php" chmod 600 "$WEBROOT/db_config.php"
log_success "Права доступа настроены" log_success "Права доступа настроены"
} }
# Запуск и включение сервисов
start_services() { start_services() {
log_step "Запуск и включение сервисов..." log_step "Запуск и включение сервисов..."
local services_to_restart="" local services_to_restart=""
local services_to_enable="" local services_to_enable=""
# Определяем сервисы для перезапуска
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
services_to_restart="apache2 mariadb" services_to_restart="apache2 mariadb"
services_to_enable="apache2 mariadb" services_to_enable="apache2 mariadb"
@@ -1291,7 +1138,6 @@ start_services() {
services_to_enable="$PHP_FPM_SERVICE httpd mariadb" services_to_enable="$PHP_FPM_SERVICE httpd mariadb"
fi fi
# Добавляем Redis
if systemctl list-unit-files | grep -q "redis-server.service"; then if systemctl list-unit-files | grep -q "redis-server.service"; then
services_to_restart="$services_to_restart redis-server" services_to_restart="$services_to_restart redis-server"
services_to_enable="$services_to_enable redis-server" services_to_enable="$services_to_enable redis-server"
@@ -1300,7 +1146,6 @@ start_services() {
services_to_enable="$services_to_enable redis" services_to_enable="$services_to_enable redis"
fi fi
# Перезапуск сервисов
for service in $services_to_restart; do for service in $services_to_restart; do
if safe_execute "Перезапуск $service" systemctl restart "$service"; then if safe_execute "Перезапуск $service" systemctl restart "$service"; then
log_success "$service перезапущен" log_success "$service перезапущен"
@@ -1309,7 +1154,6 @@ start_services() {
fi fi
done done
# Включение в автозагрузку
for service in $services_to_enable; do for service in $services_to_enable; do
safe_execute "Включение $service в автозагрузку" systemctl enable "$service" || true safe_execute "Включение $service в автозагрузку" systemctl enable "$service" || true
done done
@@ -1317,13 +1161,11 @@ start_services() {
log_success "Все сервисы настроены" log_success "Все сервисы настроены"
} }
# Финальная проверка работоспособности
final_verification() { final_verification() {
log_step "Финальная проверка работоспособности..." log_step "Финальная проверка работоспособности..."
local errors=0 local errors=0
# Проверка веб-сервера
if ! systemctl is-active --quiet "$WEBSERVER_SERVICE"; then if ! systemctl is-active --quiet "$WEBSERVER_SERVICE"; then
log_error "Веб-сервер ($WEBSERVER_SERVICE) не запущен" log_error "Веб-сервер ($WEBSERVER_SERVICE) не запущен"
((errors++)) ((errors++))
@@ -1331,7 +1173,6 @@ final_verification() {
log_success "Веб-сервер работает" log_success "Веб-сервер работает"
fi fi
# Проверка PHP-FPM (для RHEL семейства)
if [ "$DISTRO_FAMILY" = "rhel" ] && [ -n "$PHP_FPM_SERVICE" ]; then if [ "$DISTRO_FAMILY" = "rhel" ] && [ -n "$PHP_FPM_SERVICE" ]; then
if ! systemctl is-active --quiet "$PHP_FPM_SERVICE"; then if ! systemctl is-active --quiet "$PHP_FPM_SERVICE"; then
log_error "PHP-FPM ($PHP_FPM_SERVICE) не запущен" log_error "PHP-FPM ($PHP_FPM_SERVICE) не запущен"
@@ -1341,7 +1182,6 @@ final_verification() {
fi fi
fi fi
# Проверка MariaDB
if ! systemctl is-active --quiet mariadb; then if ! systemctl is-active --quiet mariadb; then
log_error "MariaDB не запущен" log_error "MariaDB не запущен"
((errors++)) ((errors++))
@@ -1349,7 +1189,6 @@ final_verification() {
log_success "MariaDB работает" log_success "MariaDB работает"
fi fi
# Проверка PHP
if ! php -r "echo 'PHP OK';" >/dev/null 2>&1; then if ! php -r "echo 'PHP OK';" >/dev/null 2>&1; then
log_error "PHP не работает корректно" log_error "PHP не работает корректно"
((errors++)) ((errors++))
@@ -1357,7 +1196,6 @@ final_verification() {
log_success "PHP работает корректно" log_success "PHP работает корректно"
fi fi
# Проверка подключения к базе данных
if [ -f "$WEBROOT/db_config.php" ]; then if [ -f "$WEBROOT/db_config.php" ]; then
if php -r " if php -r "
require '$WEBROOT/db_config.php'; require '$WEBROOT/db_config.php';
@@ -1387,37 +1225,34 @@ final_verification() {
fi fi
} }
# Отображение итоговой информации
show_final_info() { show_final_info() {
local db_password="$1" local db_password="$1"
local ip_addr=$(hostname -I | awk '{print $1}' 2>/dev/null || echo "N/A") local ip_addr=$(hostname -I | awk '{print $1}' 2>/dev/null || echo "N/A")
echo "" echo ""
echo "=============================================================="
if [ "$REINSTALL" = true ]; then if [ "$REINSTALL" = true ]; then
log_success "Переустановка Altcor успешно завершена!" log_success "Переустановка Altcor успешно завершена"
else else
log_success "Установка Altcor успешно завершена!" log_success "Установка Altcor успешно завершена"
fi fi
echo "=============================================================="
echo "" echo ""
echo -e "${CYAN}🌐 Доступ к сайту:${NC}" echo -e "${CYAN}Доступ к сайту:${NC}"
echo " • http://localhost/" echo " • http://localhost/"
echo " • http://$ip_addr/" echo " • http://$ip_addr/"
echo "" echo ""
echo -e "${CYAN}💾 Доступ к БД:${NC}" echo -e "${CYAN}Доступ к БД:${NC}"
echo " • Хост: localhost" echo " • Хост: localhost"
echo " • Логин: root" echo " • Логин: root"
echo " • Пароль: $db_password" echo " • Пароль: $db_password"
echo " • База данных: ALTCor" echo " • База данных: ALTCor"
echo "" echo ""
echo -e "${CYAN}📁 Расположение файлов:${NC}" echo -e "${CYAN}Расположение файлов:${NC}"
echo "Веб-корень: $WEBROOT" echo "Веб-корень: $WEBROOT"
echo " • Конфигурация БД: $WEBROOT/db_config.php" echo " • Конфигурация БД: $WEBROOT/db_config.php"
echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/" echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/"
echo " • Лог установки: $LOG_FILE" echo " • Лог установки: $LOG_FILE"
echo "" echo ""
echo -e "${CYAN} Дополнительная информация:${NC}" echo -e "${CYAN}Дополнительная информация:${NC}"
echo " • Учетные данные БД: /root/.db_password" echo " • Учетные данные БД: /root/.db_password"
echo " • Для удаления: $0 -u" echo " • Для удаления: $0 -u"
echo " • Для переустановки: $0 -r" echo " • Для переустановки: $0 -r"
@@ -1427,35 +1262,26 @@ show_final_info() {
echo "" echo ""
} }
# Основная функция установки
proceed_with_installation() { proceed_with_installation() {
echo "" echo ""
echo "🚀 Начинаем установку Altcor..." echo "Начинаем установку Altcor..."
echo "" echo ""
# Обновление системы и установка базовых пакетов
update_system update_system
# Настройка репозиториев PHP 8.3
setup_php_repositories setup_php_repositories
# Установка основных компонентов
install_components install_components
# Настройка Apache и PHP
configure_apache_php configure_apache_php
# Настройка базы данных
local db_password local db_password
db_password=$(configure_database) db_password=$(configure_database)
# Настройка веб-приложения
setup_web_application setup_web_application
# Запуск сервисов
start_services start_services
# Финальная проверка
if final_verification; then if final_verification; then
show_final_info "$db_password" show_final_info "$db_password"
else else
@@ -1464,14 +1290,13 @@ proceed_with_installation() {
fi fi
} }
# Интерактивный выбор действий при обнаружении существующей установки
handle_existing_installation() { handle_existing_installation() {
local need_reinstall=$1 local need_reinstall=$1
if [ $need_reinstall -eq 0 ]; then if [ $need_reinstall -eq 0 ]; then
if [ "$REINSTALL" = true ]; then if [ "$REINSTALL" = true ]; then
log_warning "Обнаружена существующая установка. Начинаем переустановку..." log_warning "Обнаружена существующая установка. Начинаем переустановку..."
return 1 # Требуется переустановка return 1
else else
log_success "Все компоненты уже установлены и работают корректно" log_success "Все компоненты уже установлены и работают корректно"
echo "" echo ""
@@ -1482,7 +1307,7 @@ handle_existing_installation() {
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "Начинаем переустановку по запросу пользователя..." log_info "Начинаем переустановку по запросу пользователя..."
REINSTALL=true REINSTALL=true
return 1 # Требуется переустановка return 1
else else
echo "" echo ""
log_info "Переустановка отменена. Система остается без изменений." log_info "Переустановка отменена. Система остается без изменений."
@@ -1500,26 +1325,21 @@ handle_existing_installation() {
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "Начинаем полную переустановку..." log_info "Начинаем полную переустановку..."
REINSTALL=true REINSTALL=true
return 1 # Требуется переустановка return 1
else else
log_info "Продолжаем обычную установку/обновление компонентов..." log_info "Продолжаем обычную установку/обновление компонентов..."
return 0 # Продолжить обычную установку return 0
fi fi
fi fi
} }
# Главная функция
main() { main() {
# Инициализация log_to_file "Начало установки Altcor $(date)"
log_to_file "=== Начало установки Altcor $(date) ==="
# Проверка прав администратора
check_root check_root
# Определение дистрибутива
detect_distro detect_distro
# Обработка различных режимов работы
if [ "$UNINSTALL" = true ]; then if [ "$UNINSTALL" = true ]; then
full_uninstall full_uninstall
elif [ "$REINSTALL" = true ]; then elif [ "$REINSTALL" = true ]; then
@@ -1529,7 +1349,6 @@ main() {
full_uninstall full_uninstall
proceed_with_installation proceed_with_installation
else else
# Проверка существующей установки
local check_result=0 local check_result=0
check_existing_installation || check_result=$? check_existing_installation || check_result=$?
@@ -1549,8 +1368,5 @@ main() {
log_to_file "=== Завершение установки Altcor $(date) ===" log_to_file "=== Завершение установки Altcor $(date) ==="
} }
# Обработка сигналов для корректного завершения
trap 'log_error "Установка прервана пользователем"; exit 130' INT TERM trap 'log_error "Установка прервана пользователем"; exit 130' INT TERM
# Запуск основной функции
main "$@" main "$@"