diff --git a/install.sh b/install.sh index 44091c7..5767684 100644 --- a/install.sh +++ b/install.sh @@ -4,16 +4,21 @@ clear set -e UNINSTALL=false +REINSTALL=false -while getopts ":u" opt; do +while getopts ":ur" opt; do case $opt in u) UNINSTALL=true ;; + r) + REINSTALL=true + ;; \?) echo -e "${RED}[Ошибка]${NC} Неизвестный параметр: -$OPTARG" >&2 - echo "Использование: $0 [-u]" + echo "Использование: $0 [-u] [-r]" echo " -u Полное удаление" + echo " -r Переустановка (удаление + установка)" exit 1 ;; esac @@ -157,14 +162,47 @@ check_existing_installation() { echo "" if [ "$need_reinstall" = false ] && [ "$apache_status" -eq 0 ] && [ "$php_status" -eq 0 ] && [ "$mariadb_status" -eq 0 ]; then - log_success "Все компоненты уже установлены и работают корректно" - echo "" - echo "Altcor уже установлен. Установка остановлена." - echo "" - exit 0 + if [ "$REINSTALL" = true ]; then + log_warning "Обнаружена существующая установка. Начинаем переустановку..." + return 1 + else + log_success "Все компоненты уже установлены и работают корректно" + echo "" + echo -e "${YELLOW}Altcor уже полностью установлен и функционирует.${NC}" + echo "" + read -p "Хотите переустановить систему? [y/n]: " -n 1 -r + echo "" + if [[ $REPLY =~ ^[Yy]$ ]]; then + log_info "Начинаем переустановку по запросу пользователя..." + REINSTALL=true + return 1 + else + echo "" + log_info "Переустановка отменена. Система остается без изменений." + echo "" + echo "Для принудительной переустановки используйте: $0 -r" + echo "" + exit 0 + fi + fi else - log_info "Обнаружены отсутствующие или неработающие компоненты. Продолжаем установку..." - return 0 + if [ "$need_reinstall" = true ]; then + log_warning "Обнаружены проблемы с установленными компонентами." + echo "" + read -p "Хотите переустановить всю систему? [y/n]: " -n 1 -r + echo "" + if [[ $REPLY =~ ^[Yy]$ ]]; then + log_info "Начинаем полную переустановку..." + REINSTALL=true + return 1 + else + log_info "Продолжаем обычную установку/обновление компонентов..." + return 0 + fi + else + log_info "Обнаружены отсутствующие компоненты. Продолжаем установку..." + return 0 + fi fi } @@ -172,7 +210,7 @@ full_uninstall() { log_step "Начинаем полное удаление Altcor... :(" log_info "Остановка сервисов..." - systemctl stop nginx apache2 httpd php*-fpm mariadb mysql redis 2>/dev/null || true + systemctl stop nginx apache2 httpd php*-fpm mariadb mysql redis redis-server 2>/dev/null || true log_info "Удаление пакетов..." if [ "$DISTRO_FAMILY" = "debian" ]; then @@ -196,210 +234,183 @@ full_uninstall() { /root/.db_password 2>/dev/null || true log_success "Полное удаление завершено." - exit 0 + + if [ "$REINSTALL" = false ]; then + exit 0 + else + log_info "Переустановка: удаление завершено, продолжаем установку..." + echo "" + fi } -if [[ $EUID -ne 0 ]]; then - log_error "Запустите этот скрипт вместе с sudo." - exit 1 -fi +proceed_with_installation() { + DB_PASSWORD=$(generate_password) -if [ -f /etc/os-release ]; then - . /etc/os-release - DISTRO="$ID" - FAMILY="$ID_LIKE" -else - log_error "Не удалось определить дистрибутив." - exit 1 -fi + log_step "Остановка конфликтующих сервисов..." + systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true + systemctl disable nginx httpd 2>/dev/null || true -if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then - PKG_MANAGER="apt" - DISTRO_FAMILY="debian" -elif echo "$DISTRO $FAMILY" | grep -qi "rhel\|centos\|fedora"; then - PKG_MANAGER="dnf" - DISTRO_FAMILY="rhel" - if ! command -v dnf >/dev/null 2>&1; then - PKG_MANAGER="yum" + log_info "Ожидание полной остановки служб..." + sleep 3 + + echo "" + echo "Начинаем установку Altcor..." + echo "" + + log_step "Удаление старых версий пакетов..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + apt remove -y nginx nginx-common nginx-core >/dev/null 2>&1 || true + apt remove -y php7.* php8.0* php8.1* php8.2* libapache2-mod-php7.* libapache2-mod-php8.0* libapache2-mod-php8.1* libapache2-mod-php8.2* >/dev/null 2>&1 || true + env DEBIAN_FRONTEND=noninteractive apt remove --purge -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" mariadb* mysql* /dev/null 2>&1 || true + apt autoremove -y >/dev/null 2>&1 || true + rm -rf /var/lib/mysql* /etc/mysql* /var/log/mysql* 2>/dev/null || true + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER remove -y nginx >/dev/null 2>&1 || true + $PKG_MANAGER remove -y php php7* php80* php81* php82* >/dev/null 2>&1 || true + $PKG_MANAGER remove -y mariadb* mysql* >/dev/null 2>&1 || true + rm -rf /var/lib/mysql* /etc/my.cnf* /var/log/mysql* 2>/dev/null || true fi -else - log_error "Ваш дистрибутив '$DISTRO' не поддерживается. Поддерживаются: Debian/Ubuntu, CentOS/RHEL/Fedora." - exit 1 -fi + log_success "Старые пакеты удалены" -if [ "$UNINSTALL" = true ]; then - full_uninstall -fi - -check_existing_installation - -DB_PASSWORD=$(generate_password) - -log_step "Остановка конфликтующих сервисов..." -systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true -systemctl disable nginx httpd 2>/dev/null || true - -log_info "Ожидание полной остановки служб..." -sleep 3 - -echo "" -echo "Начинаем установку Altcor..." -echo "" - -log_step "Удаление старых версий пакетов..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - apt remove -y nginx nginx-common nginx-core >/dev/null 2>&1 || true - apt remove -y php7.* php8.0* php8.1* php8.2* libapache2-mod-php7.* libapache2-mod-php8.0* libapache2-mod-php8.1* libapache2-mod-php8.2* >/dev/null 2>&1 || true - env DEBIAN_FRONTEND=noninteractive apt remove --purge -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" mariadb* mysql* /dev/null 2>&1 || true - apt autoremove -y >/dev/null 2>&1 || true - rm -rf /var/lib/mysql* /etc/mysql* /var/log/mysql* 2>/dev/null || true -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER remove -y nginx >/dev/null 2>&1 || true - $PKG_MANAGER remove -y php php7* php80* php81* php82* >/dev/null 2>&1 || true - $PKG_MANAGER remove -y mariadb* mysql* >/dev/null 2>&1 || true - rm -rf /var/lib/mysql* /etc/my.cnf* /var/log/mysql* 2>/dev/null || true -fi -log_success "Старые пакеты удалены" - -log_step "Обновление списка пакетов..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - apt update -y >/dev/null 2>&1 - apt install -y software-properties-common lsb-release ca-certificates curl wget gnupg2 apt-transport-https unzip >/dev/null 2>&1 -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER update -y >/dev/null 2>&1 - $PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true - $PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1 -fi -log_success "Система обновлена, базовые пакеты установлены" - -log_step "Добавление репозиториев для PHP 8.3..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - if ! apt-cache show php8.3 &>/dev/null; then - log_info "Добавление PPA ondrej/php..." - if ! add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1; then - log_error "Не удалось добавить PPA ondrej/php." - exit 1 - fi - + log_step "Обновление списка пакетов..." + if [ "$DISTRO_FAMILY" = "debian" ]; then apt update -y >/dev/null 2>&1 - + apt install -y software-properties-common lsb-release ca-certificates curl wget gnupg2 apt-transport-https unzip >/dev/null 2>&1 + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER update -y >/dev/null 2>&1 + $PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true + $PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1 + fi + log_success "Система обновлена, базовые пакеты установлены" + + log_step "Добавление репозиториев для PHP 8.3..." + if [ "$DISTRO_FAMILY" = "debian" ]; then if ! apt-cache show php8.3 &>/dev/null; then - log_error "PHP 8.3 все еще недоступен после добавления PPA." + log_info "Добавление PPA ondrej/php..." + if ! add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1; then + log_error "Не удалось добавить PPA ondrej/php." + exit 1 + fi + + apt update -y >/dev/null 2>&1 + + if ! apt-cache show php8.3 &>/dev/null; then + log_error "PHP 8.3 все еще недоступен после добавления PPA." + exit 1 + fi + log_success "PPA добавлен успешно" + else + log_success "PHP 8.3 уже доступен в репозиториях" + fi + + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + log_info "Добавление репозитория Remi..." + if [ "$DISTRO" = "fedora" ]; then + $PKG_MANAGER install -y https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm >/dev/null 2>&1 || true + else + $PKG_MANAGER install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm >/dev/null 2>&1 || true + fi + + if command -v dnf >/dev/null 2>&1; then + dnf module reset php -y >/dev/null 2>&1 || true + dnf module enable php:remi-8.3 -y >/dev/null 2>&1 || true + fi + + if ! $PKG_MANAGER list available php83* php8.3* >/dev/null 2>&1; then + log_error "PHP 8.3 недоступен в репозиториях." exit 1 fi - log_success "PPA добавлен успешно" - else - log_success "PHP 8.3 уже доступен в репозиториях" + log_success "Репозиторий Remi добавлен успешно" fi - -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - log_info "Добавление репозитория Remi..." - if [ "$DISTRO" = "fedora" ]; then - $PKG_MANAGER install -y https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm >/dev/null 2>&1 || true - else - $PKG_MANAGER install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm >/dev/null 2>&1 || true + + log_step "Установка Apache..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + apt install -y apache2 >/dev/null 2>&1 + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER install -y httpd >/dev/null 2>&1 fi - - if command -v dnf >/dev/null 2>&1; then - dnf module reset php -y >/dev/null 2>&1 || true - dnf module enable php:remi-8.3 -y >/dev/null 2>&1 || true + log_success "Apache установлен" + + log_step "Установка MariaDB..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + apt install -y mariadb-server >/dev/null 2>&1 + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER install -y mariadb-server >/dev/null 2>&1 fi - - if ! $PKG_MANAGER list available php83* php8.3* >/dev/null 2>&1; then - log_error "PHP 8.3 недоступен в репозиториях." + + log_info "Запуск MariaDB..." + systemctl start mariadb >/dev/null 2>&1 + systemctl enable mariadb >/dev/null 2>&1 + + log_info "Ожидание полного запуска MariaDB..." + sleep 5 + + if ! systemctl is-active --quiet mariadb; then + log_error "MariaDB не смог запуститься" exit 1 fi - log_success "Репозиторий Remi добавлен успешно" -fi -log_step "Установка Apache..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - apt install -y apache2 >/dev/null 2>&1 -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER install -y httpd >/dev/null 2>&1 -fi -log_success "Apache установлен" + log_success "MariaDB установлен и запущен" -log_step "Установка MariaDB..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - apt install -y mariadb-server >/dev/null 2>&1 -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER install -y mariadb-server >/dev/null 2>&1 -fi - -log_info "Запуск MariaDB..." -systemctl start mariadb >/dev/null 2>&1 -systemctl enable mariadb >/dev/null 2>&1 - -log_info "Ожидание полного запуска MariaDB..." -sleep 5 - -if ! systemctl is-active --quiet mariadb; then - log_error "MariaDB не смог запуститься" - exit 1 -fi - -log_success "MariaDB установлен и запущен" - -log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - apt install -y redis-server libreoffice default-jre >/dev/null 2>&1 -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER install -y redis libreoffice java-11-openjdk >/dev/null 2>&1 -fi -log_success "Дополнительные компоненты установлены" - -log_step "Установка PHP 8.3 и расширений..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - PHP_PACKAGES="php8.3 php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd \ - php8.3-mbstring php8.3-xml php8.3-zip php8.3-opcache php8.3-intl \ - php8.3-bcmath libapache2-mod-php8.3" - - if ! apt install -y $PHP_PACKAGES >/dev/null 2>&1; then - log_error "Не удалось установить PHP 8.3 и/или его расширения." - exit 1 + log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + apt install -y redis-server libreoffice default-jre >/dev/null 2>&1 + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER install -y redis libreoffice java-11-openjdk >/dev/null 2>&1 fi - -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - if [ "$DISTRO" = "fedora" ]; then - PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \ - php-mbstring php-xml php-zip php-opcache php-intl \ - php-bcmath" - else - PHP_PACKAGES="php83 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" - fi - - if ! $PKG_MANAGER install -y $PHP_PACKAGES >/dev/null 2>&1; then - log_error "Не удалось установить PHP 8.3 и/или его расширения." - exit 1 - fi - - if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then - ln -sf /usr/bin/php83 /usr/bin/php >/dev/null 2>&1 || true - fi -fi -log_success "PHP 8.3 и расширения установлены" + log_success "Дополнительные компоненты установлены" -log_step "Настройка Apache и модулей..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - a2enmod php8.3 rewrite ssl headers expires deflate >/dev/null 2>&1 - - for php_ver in 7.4 8.0 8.1 8.2; do - a2dismod php$php_ver >/dev/null 2>&1 || true - done - - WEBROOT="/var/www/html" - APACHE_CONF="/etc/apache2/sites-available/000-default.conf" - WEBSERVER_USER="www-data" - -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - WEBROOT="/var/www/html" - APACHE_CONF="/etc/httpd/conf.d/000-default.conf" - WEBSERVER_USER="apache" - - cat > "/etc/httpd/conf.d/php.conf" << 'EOF' + log_step "Установка PHP 8.3 и расширений..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + PHP_PACKAGES="php8.3 php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd \ + php8.3-mbstring php8.3-xml php8.3-zip php8.3-opcache php8.3-intl \ + php8.3-bcmath libapache2-mod-php8.3" + + if ! apt install -y $PHP_PACKAGES >/dev/null 2>&1; then + log_error "Не удалось установить PHP 8.3 и/или его расширения." + exit 1 + fi + + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + if [ "$DISTRO" = "fedora" ]; then + PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \ + php-mbstring php-xml php-zip php-opcache php-intl \ + php-bcmath" + else + PHP_PACKAGES="php83 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" + fi + + if ! $PKG_MANAGER install -y $PHP_PACKAGES >/dev/null 2>&1; then + log_error "Не удалось установить PHP 8.3 и/или его расширения." + exit 1 + fi + + if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then + ln -sf /usr/bin/php83 /usr/bin/php >/dev/null 2>&1 || true + fi + fi + log_success "PHP 8.3 и расширения установлены" + + log_step "Настройка Apache и модулей..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + a2enmod php8.3 rewrite ssl headers expires deflate >/dev/null 2>&1 + + for php_ver in 7.4 8.0 8.1 8.2; do + a2dismod php$php_ver >/dev/null 2>&1 || true + done + + WEBROOT="/var/www/html" + APACHE_CONF="/etc/apache2/sites-available/000-default.conf" + WEBSERVER_USER="www-data" + + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + WEBROOT="/var/www/html" + APACHE_CONF="/etc/httpd/conf.d/000-default.conf" + WEBSERVER_USER="apache" + + cat > "/etc/httpd/conf.d/php.conf" << 'EOF' LoadModule php_module modules/libphp.so LoadModule rewrite_module modules/mod_rewrite.so @@ -407,13 +418,13 @@ LoadModule rewrite_module modules/mod_rewrite.so SetHandler application/x-httpd-php EOF -fi -log_success "Модули Apache настроены" + fi + log_success "Модули Apache настроены" -log_step "Создание конфигурации виртуального хоста..." -mkdir -p "$WEBROOT" + log_step "Создание конфигурации виртуального хоста..." + mkdir -p "$WEBROOT" -cat > "$APACHE_CONF" < "$APACHE_CONF" < DocumentRoot $WEBROOT ServerName localhost @@ -461,52 +472,52 @@ cat > "$APACHE_CONF" < EOF -log_success "Конфигурация виртуального хоста создана" + log_success "Конфигурация виртуального хоста создана" -log_step "Настройка PHP.ini..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - PHP_INI_PATH="/etc/php/8.3/apache2/php.ini" -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - if [ "$DISTRO" = "fedora" ]; then - PHP_INI_PATH="/etc/php.ini" - else - PHP_INI_PATH="/etc/opt/remi/php83/php.ini" - [ ! -f "$PHP_INI_PATH" ] && PHP_INI_PATH="/etc/php.ini" + log_step "Настройка PHP.ini..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + PHP_INI_PATH="/etc/php/8.3/apache2/php.ini" + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + if [ "$DISTRO" = "fedora" ]; then + PHP_INI_PATH="/etc/php.ini" + else + PHP_INI_PATH="/etc/opt/remi/php83/php.ini" + [ ! -f "$PHP_INI_PATH" ] && PHP_INI_PATH="/etc/php.ini" + fi fi -fi -if [ -f "$PHP_INI_PATH" ]; then - 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" - - 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" - - log_success "PHP.ini настроен" -else - log_warning "Файл PHP.ini не найден по пути: $PHP_INI_PATH" -fi + if [ -f "$PHP_INI_PATH" ]; then + 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" + + 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" + + log_success "PHP.ini настроен" + else + log_warning "Файл PHP.ini не найден по пути: $PHP_INI_PATH" + fi -log_step "Создание конфигурации базы данных..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - DB_SOCKET="/var/run/mysqld/mysqld.sock" -else - DB_SOCKET="/var/lib/mysql/mysql.sock" -fi + log_step "Создание конфигурации базы данных..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + DB_SOCKET="/var/run/mysqld/mysqld.sock" + else + DB_SOCKET="/var/lib/mysql/mysql.sock" + fi -cat > "$WEBROOT/db_config.php" << EOF + cat > "$WEBROOT/db_config.php" << EOF EOF -log_success "Конфигурация БД создана" + log_success "Конфигурация БД создана" -chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" -chmod 644 "$WEBROOT/db_config.php" - -if sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then - log_success "Веб-сервер может читать db_config.php" -else - log_error "Веб-сервер НЕ МОЖЕТ читать db_config.php" -fi - -if [ ! -f "$WEBROOT/db_config.php" ]; then - log_error "Не удалось создать файл db_config.php" - exit 1 -fi - -if ! sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then - log_warning "Веб-сервер не может прочитать db_config.php, исправляем права..." chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" chmod 644 "$WEBROOT/db_config.php" -fi -DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php" -TEMP_DOWNLOAD="/tmp/web_files_$(date +%s)" + if sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then + log_success "Веб-сервер может читать db_config.php" + else + log_error "Веб-сервер НЕ МОЖЕТ читать db_config.php" + fi -create_fallback_index() { - cat > "$WEBROOT/index.php" << 'EOF' + if [ ! -f "$WEBROOT/db_config.php" ]; then + log_error "Не удалось создать файл db_config.php" + exit 1 + fi + + if ! sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then + log_warning "Веб-сервер не может прочитать db_config.php, исправляем права..." + chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" + chmod 644 "$WEBROOT/db_config.php" + fi + + DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php" + TEMP_DOWNLOAD="/tmp/web_files_$(date +%s)" + + create_fallback_index() { + cat > "$WEBROOT/index.php" << 'EOF' "; } } else { - echo "✗ Файл db_config.php НЕ существует
"; -} -echo ""; + echo "✗ Файл db_config.php НЕ существует
"; + } + echo ""; -// Теперь пробуем подключиться к БД -if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config.php')) { - try { - require_once __DIR__ . '/db_config.php'; - $pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS); - echo "
"; - echo "База данных подключена
"; - echo "База данных: " . DB_NAME . "
"; - echo "Хост: " . DB_HOST; - echo "
"; - } catch (PDOException $e) { + // Теперь пробуем подключиться к БД + if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config.php')) { + try { + require_once __DIR__ . '/db_config.php'; + $pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS); + echo "
"; + echo "База данных подключена
"; + echo "База данных: " . DB_NAME . "
"; + echo "Хост: " . DB_HOST; + echo "
"; + } catch (PDOException $e) { + echo "
"; + echo "Проблема с БД: " . htmlspecialchars($e->getMessage()); + echo "
"; + } + } else { echo "
"; - echo "Проблема с БД: " . htmlspecialchars($e->getMessage()); + echo "Не удалось загрузить конфигурацию БД"; echo "
"; } -} else { - echo "
"; - echo "Не удалось загрузить конфигурацию БД"; + echo "
"; -} - -echo ""; -echo ""; -echo ""; + echo ""; + echo ""; EOF -} + } -log_step "Загрузка файлов приложения..." -find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true + log_step "Загрузка файлов приложения..." + find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true -if curl -f -L --max-time 30 -o "$WEBROOT/index.php" "$DOWNLOAD_URL" 2>/dev/null; then - if ! head -n 1 "$WEBROOT/index.php" | grep -q "/dev/null; then - create_fallback_index - log_warning "Скачанный файл не является PHP-скриптом, создана резервная страница" + if curl -f -L --max-time 30 -o "$WEBROOT/index.php" "$DOWNLOAD_URL" 2>/dev/null; then + if ! head -n 1 "$WEBROOT/index.php" | grep -q "/dev/null; then + create_fallback_index + log_warning "Скачанный файл не является PHP-скриптом, создана резервная страница" + else + log_success "Файлы приложения загружены" + fi else - log_success "Файлы приложения загружены" + create_fallback_index + log_warning "Не удалось загрузить файл с $DOWNLOAD_URL, создана резервная страница" fi -else - create_fallback_index - log_warning "Не удалось загрузить файл с $DOWNLOAD_URL, создана резервная страница" -fi -log_step "Настройка прав доступа к файлам..." -chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/index.php" -chmod 644 "$WEBROOT/db_config.php" -chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" + log_step "Настройка прав доступа к файлам..." + chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/index.php" + chmod 644 "$WEBROOT/db_config.php" + chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" -cat > "$WEBROOT/.htaccess" << 'EOF' + cat > "$WEBROOT/.htaccess" << 'EOF' Require all denied @@ -700,32 +711,32 @@ RewriteEngine On # RewriteRule ^(.*)$ index.php [QSA,L] EOF -chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT" -chmod -R 755 "$WEBROOT" -chmod 644 "$WEBROOT/.htaccess" 2>/dev/null || true -chmod 600 "$WEBROOT/db_config.php" -log_success "Права доступа настроены" + chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT" + chmod -R 755 "$WEBROOT" + chmod 644 "$WEBROOT/.htaccess" 2>/dev/null || true + chmod 600 "$WEBROOT/db_config.php" + log_success "Права доступа настроены" -log_step "Настройка базы данных MariaDB..." + log_step "Настройка базы данных MariaDB..." -if ! systemctl is-active --quiet mariadb; then - log_error "MariaDB не запущен. Попытка запуска..." - systemctl start mariadb - sleep 3 - if ! systemctl is-active --quiet mariadb; then - log_error "Не удалось запустить MariaDB" - exit 1 + log_error "MariaDB не запущен. Попытка запуска..." + systemctl start mariadb + sleep 3 + + if ! systemctl is-active --quiet mariadb; then + log_error "Не удалось запустить MariaDB" + exit 1 + fi fi -fi -log_info "Выполнение базовой настройки безопасности MariaDB..." + log_info "Выполнение базовой настройки безопасности MariaDB..." -if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then - log_info "Первичная настройка MariaDB (подключение без пароля доступно)..." - - MYSQL_SECURE_SCRIPT="/tmp/mysql_secure_$(date +%s).sql" - cat > "$MYSQL_SECURE_SCRIPT" << MYSQL_SCRIPT + if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then + log_info "Первичная настройка MariaDB (подключение без пароля доступно)..." + + MYSQL_SECURE_SCRIPT="/tmp/mysql_secure_$(date +%s).sql" + cat > "$MYSQL_SECURE_SCRIPT" << MYSQL_SCRIPT -- Устанавливаем пароль для root ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; @@ -749,156 +760,156 @@ GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost'; FLUSH PRIVILEGES; MYSQL_SCRIPT - if mysql -u root < "$MYSQL_SECURE_SCRIPT" >/dev/null 2>&1; then - log_success "Первичная настройка MariaDB выполнена успешно" - else - log_error "Не удалось выполнить первичную настройку MariaDB" + if mysql -u root < "$MYSQL_SECURE_SCRIPT" >/dev/null 2>&1; then + log_success "Первичная настройка MariaDB выполнена успешно" + else + log_error "Не удалось выполнить первичную настройку MariaDB" + rm -f "$MYSQL_SECURE_SCRIPT" + exit 1 + fi rm -f "$MYSQL_SECURE_SCRIPT" - exit 1 - fi - rm -f "$MYSQL_SECURE_SCRIPT" - -elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then - log_info "MariaDB уже настроен с текущим паролем..." - - MYSQL_UPDATE_SCRIPT="/tmp/mysql_update_$(date +%s).sql" - cat > "$MYSQL_UPDATE_SCRIPT" << MYSQL_SCRIPT + + elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then + log_info "MariaDB уже настроен с текущим паролем..." + + MYSQL_UPDATE_SCRIPT="/tmp/mysql_update_$(date +%s).sql" + cat > "$MYSQL_UPDATE_SCRIPT" << MYSQL_SCRIPT CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost'; FLUSH PRIVILEGES; MYSQL_SCRIPT - if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_UPDATE_SCRIPT" >/dev/null 2>&1; then - log_success "База данных ALTCor создана/обновлена" - else - log_error "Не удалось обновить базу данных" + if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_UPDATE_SCRIPT" >/dev/null 2>&1; then + log_success "База данных ALTCor создана/обновлена" + else + log_error "Не удалось обновить базу данных" + rm -f "$MYSQL_UPDATE_SCRIPT" + exit 1 + fi rm -f "$MYSQL_UPDATE_SCRIPT" - exit 1 - fi - rm -f "$MYSQL_UPDATE_SCRIPT" - -else - log_error "Не удалось подключиться к MariaDB ни с пустым паролем, ни с текущим паролем" - log_info "Попытка сброса пароля root в MariaDB..." - - systemctl stop mariadb - - mysqld_safe --skip-grant-tables --skip-networking & - MYSQLD_SAFE_PID=$! - - sleep 5 - - MYSQL_RESET_SCRIPT="/tmp/mysql_reset_$(date +%s).sql" - cat > "$MYSQL_RESET_SCRIPT" << MYSQL_SCRIPT + + else + log_error "Не удалось подключиться к MariaDB ни с пустым паролем, ни с текущим паролем" + log_info "Попытка сброса пароля root в MariaDB..." + + systemctl stop mariadb + + mysqld_safe --skip-grant-tables --skip-networking & + MYSQLD_SAFE_PID=$! + + sleep 5 + + MYSQL_RESET_SCRIPT="/tmp/mysql_reset_$(date +%s).sql" + cat > "$MYSQL_RESET_SCRIPT" << MYSQL_SCRIPT USE mysql; UPDATE user SET password=PASSWORD('$DB_PASSWORD') WHERE User='root'; UPDATE user SET plugin='mysql_native_password' WHERE User='root'; FLUSH PRIVILEGES; MYSQL_SCRIPT - if mysql -u root < "$MYSQL_RESET_SCRIPT" >/dev/null 2>&1; then - log_info "Пароль root сброшен" + if mysql -u root < "$MYSQL_RESET_SCRIPT" >/dev/null 2>&1; then + log_info "Пароль root сброшен" - kill $MYSQLD_SAFE_PID 2>/dev/null || true - sleep 2 - killall mysqld_safe 2>/dev/null || true - killall mysqld 2>/dev/null || true - sleep 3 - - systemctl start mariadb - sleep 3 - - if systemctl is-active --quiet mariadb && mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then - MYSQL_FINAL_SCRIPT="/tmp/mysql_final_$(date +%s).sql" - cat > "$MYSQL_FINAL_SCRIPT" << MYSQL_SCRIPT + kill $MYSQLD_SAFE_PID 2>/dev/null || true + sleep 2 + killall mysqld_safe 2>/dev/null || true + killall mysqld 2>/dev/null || true + sleep 3 + + systemctl start mariadb + sleep 3 + + if systemctl is-active --quiet mariadb && mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then + MYSQL_FINAL_SCRIPT="/tmp/mysql_final_$(date +%s).sql" + cat > "$MYSQL_FINAL_SCRIPT" << MYSQL_SCRIPT CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost'; FLUSH PRIVILEGES; MYSQL_SCRIPT - if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_FINAL_SCRIPT" >/dev/null 2>&1; then - log_success "MariaDB настроен после сброса пароля" + if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_FINAL_SCRIPT" >/dev/null 2>&1; then + log_success "MariaDB настроен после сброса пароля" + else + log_error "Не удалось создать базу данных после сброса пароля" + exit 1 + fi + rm -f "$MYSQL_FINAL_SCRIPT" else - log_error "Не удалось создать базу данных после сброса пароля" + log_error "MariaDB не запустился после сброса пароля" exit 1 fi - rm -f "$MYSQL_FINAL_SCRIPT" else - log_error "MariaDB не запустился после сброса пароля" + log_error "Не удалось сбросить пароль root в MariaDB" + kill $MYSQLD_SAFE_PID 2>/dev/null || true exit 1 fi - else - log_error "Не удалось сбросить пароль root в MariaDB" - kill $MYSQLD_SAFE_PID 2>/dev/null || true + rm -f "$MYSQL_RESET_SCRIPT" + fi + + log_success "База данных настроена" + + log_step "Проверка конфигурации Apache..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + if ! apache2ctl configtest >/dev/null 2>&1; then + log_error "Конфигурация Apache содержит ошибки." + exit 1 + fi + + WEBSERVER_SERVICE="apache2" + + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + if ! httpd -t >/dev/null 2>&1; then + log_error "Конфигурация Apache (httpd) содержит ошибки." + exit 1 + fi + + WEBSERVER_SERVICE="httpd" + fi + log_success "Конфигурация Apache проверена" + + log_step "Запуск и включение сервисов..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + systemctl restart apache2 >/dev/null 2>&1 + systemctl enable apache2 >/dev/null 2>&1 + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + systemctl restart httpd >/dev/null 2>&1 + systemctl enable httpd >/dev/null 2>&1 + fi + + systemctl restart mariadb >/dev/null 2>&1 + systemctl restart redis-server >/dev/null 2>&1 || systemctl restart redis >/dev/null 2>&1 || true + + systemctl enable mariadb >/dev/null 2>&1 + systemctl enable redis-server >/dev/null 2>&1 || systemctl enable redis >/dev/null 2>&1 || true + + log_success "Все сервисы запущены и добавлены в автозагрузку" + + log_step "Финальная проверка работоспособности..." + if ! systemctl is-active --quiet $WEBSERVER_SERVICE; then + log_error "Веб-сервер не запущен" exit 1 fi - rm -f "$MYSQL_RESET_SCRIPT" -fi -log_success "База данных настроена" - -log_step "Проверка конфигурации Apache..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - if ! apache2ctl configtest >/dev/null 2>&1; then - log_error "Конфигурация Apache содержит ошибки." + if ! systemctl is-active --quiet mariadb; then + log_error "MariaDB не запущен" exit 1 fi - - WEBSERVER_SERVICE="apache2" - -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - if ! httpd -t >/dev/null 2>&1; then - log_error "Конфигурация Apache (httpd) содержит ошибки." + + if ! php -r "echo phpversion();" >/dev/null 2>&1; then + log_error "PHP не работает корректно" exit 1 fi - - WEBSERVER_SERVICE="httpd" -fi -log_success "Конфигурация Apache проверена" -log_step "Запуск и включение сервисов..." -if [ "$DISTRO_FAMILY" = "debian" ]; then - systemctl restart apache2 >/dev/null 2>&1 - systemctl enable apache2 >/dev/null 2>&1 -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - systemctl restart httpd >/dev/null 2>&1 - systemctl enable httpd >/dev/null 2>&1 -fi + if ! mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then + log_error "Не удается подключиться к базе данных ALTCor" + exit 1 + fi -systemctl restart mariadb >/dev/null 2>&1 -systemctl restart redis-server >/dev/null 2>&1 || systemctl restart redis >/dev/null 2>&1 || true + log_success "Все компоненты работают корректно" -systemctl enable mariadb >/dev/null 2>&1 -systemctl enable redis-server >/dev/null 2>&1 || systemctl enable redis >/dev/null 2>&1 || true - -log_success "Все сервисы запущены и добавлены в автозагрузку" - -log_step "Финальная проверка работоспособности..." -if ! systemctl is-active --quiet $WEBSERVER_SERVICE; then - log_error "Веб-сервер не запущен" - exit 1 -fi - -if ! systemctl is-active --quiet mariadb; then - log_error "MariaDB не запущен" - exit 1 -fi - -if ! php -r "echo phpversion();" >/dev/null 2>&1; then - log_error "PHP не работает корректно" - exit 1 -fi - -if ! mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then - log_error "Не удается подключиться к базе данных ALTCor" - exit 1 -fi - -log_success "Все компоненты работают корректно" - -log_step "Сохранение учетных данных..." -DB_CREDENTIALS_FILE="/root/.db_password" -cat > "$DB_CREDENTIALS_FILE" << EOF + log_step "Сохранение учетных данных..." + DB_CREDENTIALS_FILE="/root/.db_password" + cat > "$DB_CREDENTIALS_FILE" << EOF # Учетные данные базы данных ALTCor DB_HOST=localhost @@ -907,30 +918,88 @@ DB_PASSWORD=$DB_PASSWORD DB_NAME=ALTCor EOF -chmod 600 "$DB_CREDENTIALS_FILE" -log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE" + chmod 600 "$DB_CREDENTIALS_FILE" + log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE" -IP_ADDR=$(hostname -I | awk '{print $1}') + IP_ADDR=$(hostname -I | awk '{print $1}') -echo "" -log_success "Установка Altcor успешно завершена." -echo "" -echo " Доступ к сайту:" -echo " • http://localhost/" -echo " • http://$IP_ADDR/" -echo "" -echo " Доступ к БД:" -echo " • Хост: localhost" -echo " • Логин: root" -echo " • Пароль: $DB_PASSWORD" -echo " • База данных: ALTCor" -echo "" -echo " Расположение файлов:" -echo " • Веб-корень: $WEBROOT" -echo " • Конфигурация БД: $WEBROOT/db_config.php" -echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/" -echo "" -echo " Дополнительная информация:" -echo " • Учетные данные БД: $DB_CREDENTIALS_FILE" -echo " • Для удаления: ./install.sh -u" -echo "" \ No newline at end of file + echo "" + if [ "$REINSTALL" = true ]; then + log_success "Переустановка Altcor успешно завершена." + else + log_success "Установка Altcor успешно завершена." + fi + echo "" + echo " Доступ к сайту:" + echo " • http://localhost/" + echo " • http://$IP_ADDR/" + echo "" + echo " Доступ к БД:" + echo " • Хост: localhost" + echo " • Логин: root" + echo " • Пароль: $DB_PASSWORD" + echo " • База данных: ALTCor" + echo "" + echo " Расположение файлов:" + echo " • Веб-корень: $WEBROOT" + echo " • Конфигурация БД: $WEBROOT/db_config.php" + echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/" + echo "" + echo " Дополнительная информация:" + echo " • Учетные данные БД: $DB_CREDENTIALS_FILE" + echo " • Для удаления: ./install.sh -u" + echo " • Для переустановки: ./install.sh -r" + echo "" +} + +if [[ $EUID -ne 0 ]]; then + log_error "Запустите этот скрипт вместе с sudo." + exit 1 +fi + +if [ -f /etc/os-release ]; then + . /etc/os-release + DISTRO="$ID" + FAMILY="$ID_LIKE" +else + log_error "Не удалось определить дистрибутив." + exit 1 +fi + +if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then + PKG_MANAGER="apt" + DISTRO_FAMILY="debian" +elif echo "$DISTRO $FAMILY" | grep -qi "rhel\|centos\|fedora"; then + PKG_MANAGER="dnf" + DISTRO_FAMILY="rhel" + if ! command -v dnf >/dev/null 2>&1; then + PKG_MANAGER="yum" + fi +else + log_error "Ваш дистрибутив '$DISTRO' не поддерживается. Поддерживаются: Debian/Ubuntu, CentOS/RHEL/Fedora." + exit 1 +fi + +if [ "$UNINSTALL" = true ]; then + full_uninstall +elif [ "$REINSTALL" = true ]; then + echo "" + log_step "Начинаем переустановку Altcor..." + echo "" + + full_uninstall + + proceed_with_installation +else + check_result=0 + check_existing_installation || check_result=$? + + if [ $check_result -eq 1 ]; then + if [ "$REINSTALL" = true ]; then + full_uninstall + fi + proceed_with_installation + elif [ $check_result -eq 0 ]; then + proceed_with_installation + fi +fi \ No newline at end of file