From 4ed747aa7a1496426cd62717a8ddca803509a353 Mon Sep 17 00:00:00 2001 From: hosh1 Date: Thu, 14 Aug 2025 06:02:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20ip-=D0=B0=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 971 ++--------------------------------------------------- 1 file changed, 21 insertions(+), 950 deletions(-) diff --git a/install.sh b/install.sh index 9c40ad6..b543d01 100644 --- a/install.sh +++ b/install.sh @@ -48,9 +48,11 @@ cleanup_apache_config() { if [ -f /etc/apache2/ports.conf ]; then cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup.$(date +%Y%m%d_%H%M%S) + # Удаляем все Listen директивы для порта 80 grep -v "^Listen\s\+.*:80$" /etc/apache2/ports.conf > /etc/apache2/ports.conf.tmp || true grep -v "^Listen\s\+80$" /etc/apache2/ports.conf.tmp > /etc/apache2/ports.conf.tmp2 || true + # Добавляем одну Listen директиву echo "Listen *:80" >> /etc/apache2/ports.conf.tmp2 mv /etc/apache2/ports.conf.tmp2 /etc/apache2/ports.conf rm -f /etc/apache2/ports.conf.tmp @@ -61,14 +63,17 @@ cleanup_apache_config() { if [ -f "$HTTPD_CONF" ]; then cp "$HTTPD_CONF" "${HTTPD_CONF}.backup.$(date +%Y%m%d_%H%M%S)" + # Удаляем все Listen директивы для порта 80 grep -v "^Listen.*:80$" "$HTTPD_CONF" > "${HTTPD_CONF}.tmp" || true grep -v "^Listen 80$" "${HTTPD_CONF}.tmp" > "${HTTPD_CONF}.tmp2" || true + # Добавляем одну Listen директиву echo "Listen 80" >> "${HTTPD_CONF}.tmp2" mv "${HTTPD_CONF}.tmp2" "$HTTPD_CONF" rm -f "${HTTPD_CONF}.tmp" fi + # Также очищаем PHP-FPM конфигурацию от дублирующихся модулей if [ -f "/etc/httpd/conf.d/php-fpm.conf" ]; then log_info "Очистка PHP-FPM конфигурации от LoadModule директив..." @@ -123,7 +128,7 @@ check_existing_installation() { if [ -f "/var/www/html/db_config.php" ]; then if grep -q "ALTCor" "/var/www/html/db_config.php" 2>/dev/null && grep -q "DB_NAME" "/var/www/html/db_config.php" 2>/dev/null; then altcor_signs=$((altcor_signs + 1)) - log_info "Найдена конфигурация БД Altcor" + log_info "✓ Найдена конфигурация БД Altcor" fi fi @@ -133,7 +138,7 @@ check_existing_installation() { source "/root/.db_password" 2>/dev/null || true if [ -n "$DB_PASSWORD" ] && mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then altcor_signs=$((altcor_signs + 1)) - log_info "Найдена рабочая база данных ALTCor" + log_info "✓ Найдена рабочая база данных ALTCor" fi fi fi @@ -144,7 +149,7 @@ check_existing_installation() { ! grep -q "phpinfo\|Сервер готов к работе\|PHP.*работает" "/var/www/html/index.php" 2>/dev/null && wc -l < "/var/www/html/index.php" > 50); then altcor_signs=$((altcor_signs + 1)) - log_info "Найдены файлы приложения Altcor" + log_info "✓ Найдены файлы приложения Altcor" fi fi @@ -214,9 +219,9 @@ check_existing_installation() { fi if [ "$altcor_installed" = true ]; then - log_error "Обнаружена рабочая установка Altcor, которая уже содержится в системе." + echo -e "${GREEN}✓ ALTCOR УЖЕ УСТАНОВЛЕН${NC}" echo "" - echo "Установлено следующее:" + echo "Обнаружена рабочая установка Altcor со следующими компонентами:" echo "" case $apache_status in @@ -284,7 +289,7 @@ check_existing_installation() { fi elif [ "$components_installed" = true ]; then - log_warning "ОБНАРУЖЕНЫ СУЩЕСТВУЮЩИЕ ВЕБ-КОМПОНЕНТЫ" + echo -e "${YELLOW}⚠ ОБНАРУЖЕНЫ СУЩЕСТВУЮЩИЕ ВЕБ-КОМПОНЕНТЫ${NC}" echo "" echo "На вашем сервере уже установлены следующие компоненты:" echo "" @@ -364,7 +369,15 @@ check_existing_installation() { fi else - log_success "Система готова к установке Altcor" + echo -e "${GREEN}✓ СИСТЕМА ГОТОВА К УСТАНОВКЕ${NC}" + echo "" + echo "Компоненты для установки:" + echo "• Apache веб-сервер" + echo "• PHP 8.3" + echo "• MariaDB база данных" + echo "• Redis кеш-сервер" + echo "• LibreOffice" + echo "" log_info "Начинаем чистую установку Altcor..." return 0 fi @@ -425,946 +438,4 @@ proceed_with_installation() { sleep 3 echo "" - echo "Начинаем установку Altcor..." - echo "" - - log_step "Удаление старых версий пакетов..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - export DEBIAN_FRONTEND=noninteractive - - echo "mariadb-server mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true - echo "mariadb-server-10.3 mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true - echo "mariadb-server-10.5 mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true - echo "mariadb-server-10.6 mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true - echo "mariadb-server-10.11 mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true - echo "mysql-server-5.7 mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true - echo "mysql-server-8.0 mysql-server/remove-data-dir boolean true" | debconf-set-selections 2>/dev/null || true - - 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 - - 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 - export DEBIAN_FRONTEND=noninteractive - 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 openssl >/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 - - 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 "Репозиторий Remi добавлен успешно" - fi - - log_step "Установка Apache..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - export DEBIAN_FRONTEND=noninteractive - 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_step "Установка MariaDB..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - export DEBIAN_FRONTEND=noninteractive - - echo "mariadb-server mysql-server/root_password password ''" | debconf-set-selections 2>/dev/null || true - echo "mariadb-server mysql-server/root_password_again password ''" | debconf-set-selections 2>/dev/null || true - - 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)..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - export DEBIAN_FRONTEND=noninteractive - apt install -y redis-server libreoffice default-jre >/dev/null 2>&1 - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER install -y redis libreoffice >/dev/null 2>&1 - fi - log_success "Дополнительные компоненты установлены" - - log_step "Установка PHP 8.3 и расширений..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - export DEBIAN_FRONTEND=noninteractive - 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 - PHP_PACKAGES="php83-php-cli php83-php-common php83-php-mysqlnd php83-php-curl php83-php-gd \ - php83-php-mbstring php83-php-xml php83-php-zip php83-php-opcache php83-php-intl \ - php83-php-bcmath php83-php-fpm" - - 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 /opt/remi/php83/root/usr/bin/php /usr/bin/php >/dev/null 2>&1 || true - ln -sf /opt/remi/php83/root/usr/bin/php-fpm /usr/bin/php-fpm >/dev/null 2>&1 || true - 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" - - rm -f /etc/httpd/conf.d/php.conf - rm -f /etc/httpd/conf.d/php-fpm.conf - - log_info "Настройка PHP-FPM для Apache..." - - cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF' - - SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost" - - -DirectoryIndex index.php index.html index.htm - - - Require all granted - -EOF - - if [ -f "/etc/opt/remi/php83/php-fpm.d/www.conf" ]; then - PHP_FPM_CONF="/etc/opt/remi/php83/php-fpm.d/www.conf" - - cp "$PHP_FPM_CONF" "${PHP_FPM_CONF}.backup.$(date +%Y%m%d_%H%M%S)" - - sed -i 's/^user = .*/user = apache/' "$PHP_FPM_CONF" - sed -i 's/^group = .*/group = apache/' "$PHP_FPM_CONF" - - sed -i 's/^listen = .*/listen = \/var\/opt\/remi\/php83\/run\/php-fpm\/www.sock/' "$PHP_FPM_CONF" - sed -i 's/^;listen.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF" - sed -i 's/^;listen.group = .*/listen.group = apache/' "$PHP_FPM_CONF" - sed -i 's/^;listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF" - - log_info "PHP-FPM пул настроен для RHEL/CentOS/Fedora" - fi - - mkdir -p /var/opt/remi/php83/run/php-fpm - chown apache:apache /var/opt/remi/php83/run/php-fpm - - HTTPD_CONF="/etc/httpd/conf/httpd.conf" - log_step "Очистка дублирующихся Listen директив..." - - cp "$HTTPD_CONF" "${HTTPD_CONF}.backup.$(date +%Y%m%d_%H%M%S)" - - sed -i '/^Listen.*:80$/d' "$HTTPD_CONF" - sed -i '/^Listen 80$/d' "$HTTPD_CONF" - - if ! grep -q "^Listen 80$" "$HTTPD_CONF"; then - echo "Listen 80" >> "$HTTPD_CONF" - fi - - log_success "Listen директивы очищены" - fi - log_success "Модули Apache настроены" - - log_step "Создание конфигурации виртуального хоста..." - mkdir -p "$WEBROOT" - -SERVER_IP=$(hostname -I | awk '{print $1}') - -if [ "$DISTRO_FAMILY" = "debian" ]; then - cat > "$APACHE_CONF" < - DocumentRoot $WEBROOT - ServerName localhost - ServerAlias www.localhost $SERVER_IP $(hostname -f) $(hostname -s) - - - Options -Indexes +FollowSymLinks - AllowOverride All - Require all granted - - - SetOutputFilter DEFLATE - SetEnvIfNoCase Request_URI \ - \.(?:gif|jpe?g|png)$ no-gzip dont-vary - SetEnvIfNoCase Request_URI \ - \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary - - - - - SetHandler application/x-httpd-php - - - - Require all denied - - - - Require all denied - - - - ExpiresActive On - ExpiresByType image/jpg "access plus 1 month" - ExpiresByType image/jpeg "access plus 1 month" - ExpiresByType image/gif "access plus 1 month" - ExpiresByType image/png "access plus 1 month" - ExpiresByType image/svg+xml "access plus 1 month" - ExpiresByType text/css "access plus 1 month" - ExpiresByType application/javascript "access plus 1 month" - ExpiresByType text/javascript "access plus 1 month" - - - ErrorLog \${APACHE_LOG_DIR}/error.log - CustomLog \${APACHE_LOG_DIR}/access.log combined - -EOF - -elif [ "$DISTRO_FAMILY" = "rhel" ]; then - cat > "$APACHE_CONF" < - DocumentRoot $WEBROOT - ServerName localhost - ServerAlias www.localhost $SERVER_IP $(hostname -f 2>/dev/null || hostname) $(hostname -s 2>/dev/null || hostname) - - - Options -Indexes +FollowSymLinks - AllowOverride All - Require all granted - - - SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost" - - - - SetOutputFilter DEFLATE - SetEnvIfNoCase Request_URI \ - \.(?:gif|jpe?g|png)$ no-gzip dont-vary - SetEnvIfNoCase Request_URI \ - \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary - - - - - Require all denied - - - - Require all denied - - - - ExpiresActive On - ExpiresByType image/jpg "access plus 1 month" - ExpiresByType image/jpeg "access plus 1 month" - ExpiresByType image/gif "access plus 1 month" - ExpiresByType image/png "access plus 1 month" - ExpiresByType image/svg+xml "access plus 1 month" - ExpiresByType text/css "access plus 1 month" - ExpiresByType application/javascript "access plus 1 month" - ExpiresByType text/javascript "access plus 1 month" - - - ErrorLog /var/log/httpd/error.log - CustomLog /var/log/httpd/access.log combined - -EOF - fi - log_success "Конфигурация виртуального хоста создана" - - cleanup_apache_config - - 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 [ -f "/etc/opt/remi/php83/php.ini" ]; then - PHP_INI_PATH="/etc/opt/remi/php83/php.ini" - elif [ -f "/opt/remi/php83/root/etc/php.ini" ]; then - PHP_INI_PATH="/opt/remi/php83/root/etc/php.ini" - elif [ -f "/etc/php.ini" ]; then - PHP_INI_PATH="/etc/php.ini" - 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 настроен ($PHP_INI_PATH)" - 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 - - cat > "$WEBROOT/db_config.php" << EOF - -EOF - - 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)" - - create_fallback_index() { - cat > "$WEBROOT/index.php" << 'EOF' -"; -echo ""; -echo ""; -echo ""; -echo ""; -echo "Сервер готов к работе"; -echo ""; -echo ""; -echo ""; -echo "
"; -echo "

Сервер готов к работе

"; -echo "
"; -echo "PHP " . phpversion() . " работает
"; -echo "Время сервера: " . date('Y-m-d H:i:s T') . "
"; -echo "Document Root: " . $_SERVER['DOCUMENT_ROOT']; -echo "
"; - -try { - $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 "
"; -} - -echo "
"; -echo "Диагностика конфигурации БД:
"; - -if (file_exists(__DIR__ . '/db_config.php')) { - echo "✓ Файл db_config.php существует
"; - echo "✓ Размер файла: " . filesize(__DIR__ . '/db_config.php') . " байт
"; - echo "✓ Права доступа: " . substr(sprintf('%o', fileperms(__DIR__ . '/db_config.php')), -4) . "
"; - - if (is_readable(__DIR__ . '/db_config.php')) { - echo "✓ Файл читаемый
"; - - try { - require_once __DIR__ . '/db_config.php'; - echo "✓ Файл успешно подключен
"; - echo "✓ DB_HOST: " . (defined('DB_HOST') ? DB_HOST : 'НЕ ОПРЕДЕЛЕН') . "
"; - echo "✓ DB_USER: " . (defined('DB_USER') ? DB_USER : 'НЕ ОПРЕДЕЛЕН') . "
"; - echo "✓ DB_NAME: " . (defined('DB_NAME') ? DB_NAME : 'НЕ ОПРЕДЕЛЕН') . "
"; - } catch (Exception $e) { - echo "✗ Ошибка подключения файла: " . htmlspecialchars($e->getMessage()) . "
"; - } - } else { - echo "✗ Файл НЕ читаемый
"; - } -} else { - 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) { - echo "
"; - echo "Проблема с БД: " . htmlspecialchars($e->getMessage()); - echo "
"; - } - } else { - echo "
"; - echo "Не удалось загрузить конфигурацию БД"; - echo "
"; - } - - echo "
"; - echo ""; - echo ""; -EOF - } - - 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-скриптом, создана резервная страница" - else - log_success "Файлы приложения загружены" - 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" - - cat > "$WEBROOT/.htaccess" << 'EOF' - - - Require all denied - - - - Require all denied - - - - AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json application/xml - - - - ExpiresActive On - ExpiresByType image/jpg "access plus 1 month" - ExpiresByType image/jpeg "access plus 1 month" - ExpiresByType image/gif "access plus 1 month" - ExpiresByType image/png "access plus 1 month" - ExpiresByType image/svg+xml "access plus 1 month" - ExpiresByType text/css "access plus 1 month" - ExpiresByType application/javascript "access plus 1 month" - ExpiresByType text/javascript "access plus 1 month" - - - - Header always set X-Content-Type-Options nosniff - Header always set X-Frame-Options DENY - Header always set X-XSS-Protection "1; mode=block" - - -RewriteEngine On -# RewriteCond %{REQUEST_FILENAME} !-f -# RewriteCond %{REQUEST_FILENAME} !-d -# 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 "Права доступа настроены" - - 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 - fi - fi - - 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 --- Устанавливаем пароль для root -ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; - --- Удаляем анонимных пользователей -DELETE FROM mysql.user WHERE User=''; - --- Удаляем root-доступ с удаленных хостов -DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); - --- Удаляем тестовую базу данных -DROP DATABASE IF EXISTS test; -DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; - --- Создаем нашу базу данных -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 < "$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" - - 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 "Не удалось обновить базу данных" - 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 -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 сброшен" - - 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 настроен после сброса пароля" - else - log_error "Не удалось создать базу данных после сброса пароля" - exit 1 - fi - rm -f "$MYSQL_FINAL_SCRIPT" - else - log_error "MariaDB не запустился после сброса пароля" - exit 1 - fi - else - log_error "Не удалось сбросить пароль root в MariaDB" - kill $MYSQLD_SAFE_PID 2>/dev/null || true - 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_success "Конфигурация Apache корректна" - else - log_error "Ошибка в конфигурации Apache" - apache2ctl configtest - return 1 - fi - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - if httpd -t >/dev/null 2>&1; then - log_success "Конфигурация Apache корректна" - else - log_error "Ошибка в конфигурации Apache" - httpd -t - return 1 - fi - fi - - log_step "Запуск и включение сервисов..." - - if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then - log_info "Настройка SELinux..." - setsebool -P httpd_can_network_connect 1 >/dev/null 2>&1 || true - setsebool -P httpd_execmem 1 >/dev/null 2>&1 || true - semanage fcontext -a -t httpd_exec_t "/var/opt/remi/php83/run/php-fpm/www.sock" >/dev/null 2>&1 || true - restorecon -R /var/www/html >/dev/null 2>&1 || true - restorecon -R /var/opt/remi/php83/run/php-fpm/ >/dev/null 2>&1 || true - fi - - if [ "$DISTRO_FAMILY" = "debian" ]; then - systemctl restart apache2 >/dev/null 2>&1 - systemctl enable apache2 >/dev/null 2>&1 - WEBSERVER_SERVICE="apache2" - - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - log_info "Запуск PHP-FPM..." - systemctl stop php83-php-fpm >/dev/null 2>&1 || true - systemctl start php83-php-fpm >/dev/null 2>&1 - systemctl enable php83-php-fpm >/dev/null 2>&1 - - sleep 3 - - if ! systemctl is-active --quiet php83-php-fpm; then - log_error "PHP-FPM не запустился" - systemctl status php83-php-fpm --no-pager -l - exit 1 - fi - - systemctl restart httpd >/dev/null 2>&1 - systemctl enable httpd >/dev/null 2>&1 - WEBSERVER_SERVICE="httpd" - 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 command -v ufw >/dev/null 2>&1 && ufw status | grep -q "Status: active"; then - log_info "Открываем порт 80 в UFW..." - ufw allow 80/tcp >/dev/null 2>&1 || true - elif command -v firewall-cmd >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then - log_info "Открываем порт 80 в firewalld..." - firewall-cmd --permanent --add-service=http >/dev/null 2>&1 || true - firewall-cmd --reload >/dev/null 2>&1 || true - elif command -v iptables >/dev/null 2>&1; then - log_info "Открываем порт 80 в iptables..." - iptables -I INPUT -p tcp --dport 80 -j ACCEPT >/dev/null 2>&1 || true - fi - log_success "Брандмауэр настроен" - - log_step "Финальная проверка работоспособности..." - if ! systemctl is-active --quiet $WEBSERVER_SERVICE; then - log_error "Веб-сервер не запущен" - systemctl status $WEBSERVER_SERVICE --no-pager -l - exit 1 - fi - - if ! systemctl is-active --quiet mariadb; then - log_error "MariaDB не запущен" - exit 1 - fi - - PHP_WORKS=false - if php -r "echo phpversion();" >/dev/null 2>&1; then - PHP_WORKS=true - elif [ -f "/opt/remi/php83/root/usr/bin/php" ] && /opt/remi/php83/root/usr/bin/php -r "echo phpversion();" >/dev/null 2>&1; then - PHP_WORKS=true - fi - - if [ "$PHP_WORKS" = false ]; then - log_error "PHP не работает корректно" - exit 1 - fi - - if [ "$DISTRO_FAMILY" = "rhel" ]; then - if ! systemctl is-active --quiet php83-php-fpm; then - log_error "PHP-FPM не запущен" - systemctl status php83-php-fpm --no-pager -l - exit 1 - fi - - if [ ! -S "/var/opt/remi/php83/run/php-fpm/www.sock" ]; then - log_warning "Сокет PHP-FPM не найден" - ls -la /var/opt/remi/php83/run/php-fpm/ 2>/dev/null || true - fi - fi - - if ! mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then - log_error "Не удается подключиться к базе данных ALTCor" - exit 1 - fi - - cat > "$WEBROOT/test.php" << 'EOF' - -EOF - chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/test.php" - - sleep 2 - if curl -s "http://localhost/test.php" 2>/dev/null | grep -q "PHP.*работает"; then - log_success "PHP работает через веб-сервер" - rm -f "$WEBROOT/test.php" - else - log_warning "Не удается проверить работу PHP через веб-сервер" - log_info "Проверьте вручную: curl http://localhost/test.php" - fi - - log_success "Все компоненты работают корректно" - - log_step "Сохранение учетных данных..." - DB_CREDENTIALS_FILE="/root/.db_password" - cat > "$DB_CREDENTIALS_FILE" << EOF - -DB_HOST=localhost -DB_USER=root -DB_PASSWORD=$DB_PASSWORD -DB_NAME=ALTCor -EOF - - chmod 600 "$DB_CREDENTIALS_FILE" - log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE" - - ALL_IPS=$(hostname -I | tr ' ' '\n' | grep -v '^$' | head -5) - EXTERNAL_IP=$(curl -s ifconfig.me 2>/dev/null || echo "недоступен") - - echo "" - if [ "$REINSTALL" = true ]; then - log_success "Переустановка Altcor успешно завершена." - else - log_success "Установка Altcor успешно завершена." - fi - echo "" - echo " Доступ к сайту:" - echo " • http://localhost/" - while IFS= read -r ip; do - [ -n "$ip" ] && echo " • http://$ip/" - done <<< "$ALL_IPS" - if [ "$EXTERNAL_IP" != "недоступен" ] && [ "$EXTERNAL_IP" != "" ]; then - echo " • http://$EXTERNAL_IP/ (внешний IP)" - fi - 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 + echo "На \ No newline at end of file