diff --git a/install.sh b/install.sh index d97c0f2..15d70e2 100644 --- a/install.sh +++ b/install.sh @@ -166,7 +166,7 @@ check_existing_installation() { echo "" if [ "$FORCE_REINSTALL" = false ]; then - echo "⚠️ Система уже настроена и работает." + echo "Система уже настроена и работает." echo "" read -p "Выполнить полную переустановку? [y/n]: " choice @@ -215,7 +215,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-server redis 2>/dev/null || true log_info "Удаление пакетов..." if [ "$DISTRO_FAMILY" = "debian" ]; then @@ -274,23 +274,26 @@ if [ "$UNINSTALL" = true ]; then full_uninstall fi -# Проверка существующей установки check_existing_installation INSTALL_TYPE=$? if [ "$INSTALL_TYPE" -eq 1 ]; then - # Только настройка конфигурации SKIP_PACKAGE_INSTALL=true else - # Полная установка SKIP_PACKAGE_INSTALL=false fi -DB_PASSWORD=$(generate_password) +if [ -f "/root/.db_password" ] && [ "$FORCE_REINSTALL" = false ] && [ "$SKIP_PACKAGE_INSTALL" = true ]; then + DB_PASSWORD=$(grep "DB_PASSWORD=" /root/.db_password | cut -d'=' -f2) + log_info "Используем существующий пароль БД" +else + DB_PASSWORD=$(generate_password) + log_info "Сгенерирован новый пароль БД" +fi if [ "$SKIP_PACKAGE_INSTALL" = false ]; then log_step "Остановка конфликтующих сервисов..." - systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true + systemctl stop nginx httpd apache2 php*-fpm mariadb mysql redis-server redis 2>/dev/null || true systemctl disable nginx httpd 2>/dev/null || true log_info "Ожидание полной остановки служб..." @@ -567,6 +570,8 @@ else DB_SOCKET="/var/lib/mysql/mysql.sock" fi +rm -f "$WEBROOT/db_config.php" + cat > "$WEBROOT/db_config.php" << EOF EOF + +chmod 600 "$WEBROOT/db_config.php" +chown root:root "$WEBROOT/db_config.php" log_success "Конфигурация БД создана" DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php" @@ -586,7 +594,11 @@ TEMP_DOWNLOAD="/tmp/web_files_$(date +%s)" create_fallback_index() { cat > "$WEBROOT/index.php" << 'EOF' "; echo ""; @@ -601,6 +613,7 @@ echo "h1 { color: #2c5282; margin-top: 0; }"; echo ".status { padding: 15px; margin: 10px 0; border-radius: 5px; }"; echo ".success { background: #c6f6d5; color: #22543d; border-left: 4px solid #38a169; }"; echo ".warning { background: #fef5e7; color: #744210; border-left: 4px solid #ed8936; }"; +echo ".error { background: #fed7d7; color: #742a2a; border-left: 4px solid #e53e3e; }"; echo ""; echo ""; echo ""; @@ -621,7 +634,7 @@ try { echo "Хост: " . DB_HOST; echo ""; } catch (PDOException $e) { - echo "
"; + echo "
"; echo "Проблема с БД: " . htmlspecialchars($e->getMessage()); echo "
"; } @@ -636,302 +649,4 @@ 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/index.php" - -cat > "$WEBROOT/.htaccess" << 'EOF' - - Require all denied - - - - 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_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 - -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 -# Учетные данные базы данных ALTCor - -DB_HOST=localhost -DB_USER=root -DB_PASSWORD=$DB_PASSWORD -DB_NAME=ALTCor -EOF - -chmod 600 "$DB_CREDENTIALS_FILE" -log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE" - -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 -f" -echo " • Для удаления: ./install.sh -u" -echo "" \ No newline at end of file +?> \ No newline at end of file