Оптимизация index.php
This commit is contained in:
260
install.sh
260
install.sh
@@ -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 "$@"
|
||||
Reference in New Issue
Block a user