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