Откат
This commit is contained in:
334
install.sh
334
install.sh
@@ -215,7 +215,7 @@ full_uninstall() {
|
||||
log_step "Начинаем полное удаление Altcor... :("
|
||||
|
||||
log_info "Остановка сервисов..."
|
||||
systemctl stop nginx apache2 httpd php*-fpm mariadb mysql redis-server redis 2>/dev/null || true
|
||||
systemctl stop nginx apache2 httpd php*-fpm mariadb mysql redis 2>/dev/null || true
|
||||
|
||||
log_info "Удаление пакетов..."
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
@@ -283,18 +283,11 @@ else
|
||||
SKIP_PACKAGE_INSTALL=false
|
||||
fi
|
||||
|
||||
# ВАЖНО: Генерируем новый пароль только при полной установке
|
||||
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
|
||||
DB_PASSWORD=$(generate_password)
|
||||
|
||||
if [ "$SKIP_PACKAGE_INSTALL" = false ]; then
|
||||
log_step "Остановка конфликтующих сервисов..."
|
||||
systemctl stop nginx httpd apache2 php*-fpm mariadb mysql redis-server redis 2>/dev/null || true
|
||||
systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true
|
||||
systemctl disable nginx httpd 2>/dev/null || true
|
||||
|
||||
log_info "Ожидание полной остановки служб..."
|
||||
@@ -460,7 +453,7 @@ elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||
APACHE_CONF="/etc/httpd/conf.d/000-default.conf"
|
||||
WEBSERVER_USER="apache"
|
||||
|
||||
cat > "/etc/httpd/conf.d/php.conf" << 'PHP_CONF_EOF'
|
||||
cat > "/etc/httpd/conf.d/php.conf" << 'EOF'
|
||||
LoadModule php_module modules/libphp.so
|
||||
LoadModule rewrite_module modules/mod_rewrite.so
|
||||
|
||||
@@ -474,7 +467,7 @@ log_success "Модули Apache настроены"
|
||||
log_step "Создание конфигурации виртуального хоста..."
|
||||
mkdir -p "$WEBROOT"
|
||||
|
||||
cat > "$APACHE_CONF" <<APACHE_CONF_EOF
|
||||
cat > "$APACHE_CONF" <<EOF
|
||||
<VirtualHost *:80>
|
||||
DocumentRoot $WEBROOT
|
||||
ServerName localhost
|
||||
@@ -564,7 +557,6 @@ else
|
||||
log_warning "Файл PHP.ini не найден по пути: $PHP_INI_PATH"
|
||||
fi
|
||||
|
||||
# ИСПРАВЛЕНИЕ 1: Всегда пересоздаем конфигурацию БД с актуальным паролем
|
||||
log_step "Создание конфигурации базы данных..."
|
||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||
DB_SOCKET="/var/run/mysqld/mysqld.sock"
|
||||
@@ -572,10 +564,7 @@ else
|
||||
DB_SOCKET="/var/lib/mysql/mysql.sock"
|
||||
fi
|
||||
|
||||
# Удаляем старый конфиг, если есть
|
||||
rm -f "$WEBROOT/db_config.php"
|
||||
|
||||
cat > "$WEBROOT/db_config.php" << DB_CONFIG_EOF
|
||||
cat > "$WEBROOT/db_config.php" << EOF
|
||||
<?php
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_USER', 'root');
|
||||
@@ -586,10 +575,6 @@ define('DB_CHARSET', 'utf8mb4');
|
||||
define('OFFICE', '/usr/bin/libreoffice');
|
||||
?>
|
||||
EOF
|
||||
|
||||
# ИСПРАВЛЕНИЕ 2: Устанавливаем правильные права доступа на конфиг БД сразу
|
||||
chmod 600 "$WEBROOT/db_config.php"
|
||||
chown root:root "$WEBROOT/db_config.php"
|
||||
log_success "Конфигурация БД создана"
|
||||
|
||||
DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php"
|
||||
@@ -598,11 +583,7 @@ TEMP_DOWNLOAD="/tmp/web_files_$(date +%s)"
|
||||
create_fallback_index() {
|
||||
cat > "$WEBROOT/index.php" << 'EOF'
|
||||
<?php
|
||||
if (file_exists(__DIR__ . '/db_config.php')) {
|
||||
require_once __DIR__ . '/db_config.php';
|
||||
} else {
|
||||
die('Конфигурация базы данных не найдена');
|
||||
}
|
||||
require_once __DIR__ . '/db_config.php';
|
||||
|
||||
echo "<!DOCTYPE html>";
|
||||
echo "<html lang='ru'>";
|
||||
@@ -617,7 +598,6 @@ 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 "</style>";
|
||||
echo "</head>";
|
||||
echo "<body>";
|
||||
@@ -638,7 +618,7 @@ try {
|
||||
echo "Хост: " . DB_HOST;
|
||||
echo "</div>";
|
||||
} catch (PDOException $e) {
|
||||
echo "<div class='status error'>";
|
||||
echo "<div class='status warning'>";
|
||||
echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage());
|
||||
echo "</div>";
|
||||
}
|
||||
@@ -654,3 +634,301 @@ echo "</div>";
|
||||
echo "</body>";
|
||||
echo "</html>";
|
||||
?>
|
||||
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 "<?php" && ! grep -q "<?php" "$WEBROOT/index.php" 2>/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'
|
||||
<Files "db_config.php">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
<Files "*.conf">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
<Files ".env">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
<IfModule mod_deflate.c>
|
||||
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json application/xml
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_expires.c>
|
||||
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"
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_headers.c>
|
||||
Header always set X-Content-Type-Options nosniff
|
||||
Header always set X-Frame-Options DENY
|
||||
Header always set X-XSS-Protection "1; mode=block"
|
||||
</IfModule>
|
||||
|
||||
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 ""
|
||||
Reference in New Issue
Block a user