Добавлена возможность переустановки

This commit is contained in:
2025-08-11 02:05:29 +03:00
parent b249e0ade8
commit db7ab6afe2

View File

@@ -4,16 +4,21 @@ clear
set -e set -e
UNINSTALL=false UNINSTALL=false
REINSTALL=false
while getopts ":u" opt; do while getopts ":ur" opt; do
case $opt in case $opt in
u) u)
UNINSTALL=true UNINSTALL=true
;; ;;
r)
REINSTALL=true
;;
\?) \?)
echo -e "${RED}[Ошибка]${NC} Неизвестный параметр: -$OPTARG" >&2 echo -e "${RED}[Ошибка]${NC} Неизвестный параметр: -$OPTARG" >&2
echo "Использование: $0 [-u]" echo "Использование: $0 [-u] [-r]"
echo " -u Полное удаление" echo " -u Полное удаление"
echo " -r Переустановка (удаление + установка)"
exit 1 exit 1
;; ;;
esac esac
@@ -157,22 +162,55 @@ check_existing_installation() {
echo "" echo ""
if [ "$need_reinstall" = false ] && [ "$apache_status" -eq 0 ] && [ "$php_status" -eq 0 ] && [ "$mariadb_status" -eq 0 ]; then if [ "$need_reinstall" = false ] && [ "$apache_status" -eq 0 ] && [ "$php_status" -eq 0 ] && [ "$mariadb_status" -eq 0 ]; then
if [ "$REINSTALL" = true ]; then
log_warning "Обнаружена существующая установка. Начинаем переустановку..."
return 1
else
log_success "Все компоненты уже установлены и работают корректно" log_success "Все компоненты уже установлены и работают корректно"
echo "" echo ""
echo "Altcor уже установлен. Установка остановлена." 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 "" echo ""
exit 0 exit 0
fi
fi
else else
log_info "Обнаружены отсутствующие или неработающие компоненты. Продолжаем установку..." 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 return 0
fi fi
else
log_info "Обнаружены отсутствующие компоненты. Продолжаем установку..."
return 0
fi
fi
} }
full_uninstall() { full_uninstall() {
log_step "Начинаем полное удаление Altcor... :(" log_step "Начинаем полное удаление Altcor... :("
log_info "Остановка сервисов..." 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 "Удаление пакетов..." log_info "Удаление пакетов..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
@@ -196,84 +234,57 @@ full_uninstall() {
/root/.db_password 2>/dev/null || true /root/.db_password 2>/dev/null || true
log_success "Полное удаление завершено." log_success "Полное удаление завершено."
if [ "$REINSTALL" = false ]; then
exit 0 exit 0
else
log_info "Переустановка: удаление завершено, продолжаем установку..."
echo ""
fi
} }
if [[ $EUID -ne 0 ]]; then proceed_with_installation() {
log_error "Запустите этот скрипт вместе с sudo." DB_PASSWORD=$(generate_password)
exit 1
fi
if [ -f /etc/os-release ]; then log_step "Остановка конфликтующих сервисов..."
. /etc/os-release systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true
DISTRO="$ID" systemctl disable nginx httpd 2>/dev/null || true
FAMILY="$ID_LIKE"
else
log_error "Не удалось определить дистрибутив."
exit 1
fi
if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then log_info "Ожидание полной остановки служб..."
PKG_MANAGER="apt" sleep 3
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 echo ""
full_uninstall echo "Начинаем установку Altcor..."
fi echo ""
check_existing_installation log_step "Удаление старых версий пакетов..."
if [ "$DISTRO_FAMILY" = "debian" ]; then
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 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 -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 >/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 >/dev/null 2>&1 || true
apt autoremove -y >/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 rm -rf /var/lib/mysql* /etc/mysql* /var/log/mysql* 2>/dev/null || true
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
$PKG_MANAGER remove -y nginx >/dev/null 2>&1 || true $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 php php7* php80* php81* php82* >/dev/null 2>&1 || true
$PKG_MANAGER remove -y mariadb* mysql* >/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 rm -rf /var/lib/mysql* /etc/my.cnf* /var/log/mysql* 2>/dev/null || true
fi fi
log_success "Старые пакеты удалены" log_success "Старые пакеты удалены"
log_step "Обновление списка пакетов..." log_step "Обновление списка пакетов..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
apt update -y >/dev/null 2>&1 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 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 elif [ "$DISTRO_FAMILY" = "rhel" ]; then
$PKG_MANAGER update -y >/dev/null 2>&1 $PKG_MANAGER update -y >/dev/null 2>&1
$PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true $PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true
$PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1 $PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1
fi fi
log_success "Система обновлена, базовые пакеты установлены" log_success "Система обновлена, базовые пакеты установлены"
log_step "Добавление репозиториев для PHP 8.3..." log_step "Добавление репозиториев для PHP 8.3..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
if ! apt-cache show php8.3 &>/dev/null; then if ! apt-cache show php8.3 &>/dev/null; then
log_info "Добавление PPA ondrej/php..." log_info "Добавление PPA ondrej/php..."
if ! add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1; then if ! add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1; then
@@ -292,7 +303,7 @@ if [ "$DISTRO_FAMILY" = "debian" ]; then
log_success "PHP 8.3 уже доступен в репозиториях" log_success "PHP 8.3 уже доступен в репозиториях"
fi fi
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
log_info "Добавление репозитория Remi..." log_info "Добавление репозитория Remi..."
if [ "$DISTRO" = "fedora" ]; then if [ "$DISTRO" = "fedora" ]; then
$PKG_MANAGER install -y https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm >/dev/null 2>&1 || true $PKG_MANAGER install -y https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm >/dev/null 2>&1 || true
@@ -310,47 +321,47 @@ elif [ "$DISTRO_FAMILY" = "rhel" ]; then
exit 1 exit 1
fi fi
log_success "Репозиторий Remi добавлен успешно" log_success "Репозиторий Remi добавлен успешно"
fi fi
log_step "Установка Apache..." log_step "Установка Apache..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
apt install -y apache2 >/dev/null 2>&1 apt install -y apache2 >/dev/null 2>&1
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
$PKG_MANAGER install -y httpd >/dev/null 2>&1 $PKG_MANAGER install -y httpd >/dev/null 2>&1
fi fi
log_success "Apache установлен" log_success "Apache установлен"
log_step "Установка MariaDB..." log_step "Установка MariaDB..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
apt install -y mariadb-server >/dev/null 2>&1 apt install -y mariadb-server >/dev/null 2>&1
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
$PKG_MANAGER install -y mariadb-server >/dev/null 2>&1 $PKG_MANAGER install -y mariadb-server >/dev/null 2>&1
fi fi
log_info "Запуск MariaDB..." log_info "Запуск MariaDB..."
systemctl start mariadb >/dev/null 2>&1 systemctl start mariadb >/dev/null 2>&1
systemctl enable mariadb >/dev/null 2>&1 systemctl enable mariadb >/dev/null 2>&1
log_info "Ожидание полного запуска MariaDB..." log_info "Ожидание полного запуска MariaDB..."
sleep 5 sleep 5
if ! systemctl is-active --quiet mariadb; then if ! systemctl is-active --quiet mariadb; then
log_error "MariaDB не смог запуститься" log_error "MariaDB не смог запуститься"
exit 1 exit 1
fi fi
log_success "MariaDB установлен и запущен" log_success "MariaDB установлен и запущен"
log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..." log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
apt install -y redis-server libreoffice default-jre >/dev/null 2>&1 apt install -y redis-server libreoffice default-jre >/dev/null 2>&1
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
$PKG_MANAGER install -y redis libreoffice java-11-openjdk >/dev/null 2>&1 $PKG_MANAGER install -y redis libreoffice java-11-openjdk >/dev/null 2>&1
fi fi
log_success "Дополнительные компоненты установлены" log_success "Дополнительные компоненты установлены"
log_step "Установка PHP 8.3 и расширений..." log_step "Установка PHP 8.3 и расширений..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
PHP_PACKAGES="php8.3 php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd \ 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-mbstring php8.3-xml php8.3-zip php8.3-opcache php8.3-intl \
php8.3-bcmath libapache2-mod-php8.3" php8.3-bcmath libapache2-mod-php8.3"
@@ -360,7 +371,7 @@ if [ "$DISTRO_FAMILY" = "debian" ]; then
exit 1 exit 1
fi fi
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
if [ "$DISTRO" = "fedora" ]; then if [ "$DISTRO" = "fedora" ]; then
PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \ PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \
php-mbstring php-xml php-zip php-opcache php-intl \ php-mbstring php-xml php-zip php-opcache php-intl \
@@ -379,11 +390,11 @@ elif [ "$DISTRO_FAMILY" = "rhel" ]; then
if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then 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 ln -sf /usr/bin/php83 /usr/bin/php >/dev/null 2>&1 || true
fi fi
fi fi
log_success "PHP 8.3 и расширения установлены" log_success "PHP 8.3 и расширения установлены"
log_step "Настройка Apache и модулей..." log_step "Настройка Apache и модулей..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
a2enmod php8.3 rewrite ssl headers expires deflate >/dev/null 2>&1 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 for php_ver in 7.4 8.0 8.1 8.2; do
@@ -394,7 +405,7 @@ if [ "$DISTRO_FAMILY" = "debian" ]; then
APACHE_CONF="/etc/apache2/sites-available/000-default.conf" APACHE_CONF="/etc/apache2/sites-available/000-default.conf"
WEBSERVER_USER="www-data" WEBSERVER_USER="www-data"
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
WEBROOT="/var/www/html" WEBROOT="/var/www/html"
APACHE_CONF="/etc/httpd/conf.d/000-default.conf" APACHE_CONF="/etc/httpd/conf.d/000-default.conf"
WEBSERVER_USER="apache" WEBSERVER_USER="apache"
@@ -407,13 +418,13 @@ LoadModule rewrite_module modules/mod_rewrite.so
SetHandler application/x-httpd-php SetHandler application/x-httpd-php
</FilesMatch> </FilesMatch>
EOF EOF
fi fi
log_success "Модули Apache настроены" log_success "Модули Apache настроены"
log_step "Создание конфигурации виртуального хоста..." log_step "Создание конфигурации виртуального хоста..."
mkdir -p "$WEBROOT" mkdir -p "$WEBROOT"
cat > "$APACHE_CONF" <<EOF cat > "$APACHE_CONF" <<EOF
<VirtualHost *:80> <VirtualHost *:80>
DocumentRoot $WEBROOT DocumentRoot $WEBROOT
ServerName localhost ServerName localhost
@@ -461,21 +472,21 @@ cat > "$APACHE_CONF" <<EOF
CustomLog \${APACHE_LOG_DIR}/access.log combined CustomLog \${APACHE_LOG_DIR}/access.log combined
</VirtualHost> </VirtualHost>
EOF EOF
log_success "Конфигурация виртуального хоста создана" log_success "Конфигурация виртуального хоста создана"
log_step "Настройка PHP.ini..." log_step "Настройка PHP.ini..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
PHP_INI_PATH="/etc/php/8.3/apache2/php.ini" PHP_INI_PATH="/etc/php/8.3/apache2/php.ini"
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
if [ "$DISTRO" = "fedora" ]; then if [ "$DISTRO" = "fedora" ]; then
PHP_INI_PATH="/etc/php.ini" PHP_INI_PATH="/etc/php.ini"
else else
PHP_INI_PATH="/etc/opt/remi/php83/php.ini" PHP_INI_PATH="/etc/opt/remi/php83/php.ini"
[ ! -f "$PHP_INI_PATH" ] && PHP_INI_PATH="/etc/php.ini" [ ! -f "$PHP_INI_PATH" ] && PHP_INI_PATH="/etc/php.ini"
fi fi
fi fi
if [ -f "$PHP_INI_PATH" ]; then if [ -f "$PHP_INI_PATH" ]; then
cp "$PHP_INI_PATH" "${PHP_INI_PATH}.backup.$(date +%Y%m%d_%H%M%S)" 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/;*upload_max_filesize = .*/upload_max_filesize = 64M/' "$PHP_INI_PATH"
@@ -495,18 +506,18 @@ if [ -f "$PHP_INI_PATH" ]; then
sed -i 's/;*log_errors = .*/log_errors = On/' "$PHP_INI_PATH" sed -i 's/;*log_errors = .*/log_errors = On/' "$PHP_INI_PATH"
log_success "PHP.ini настроен" log_success "PHP.ini настроен"
else else
log_warning "Файл PHP.ini не найден по пути: $PHP_INI_PATH" log_warning "Файл PHP.ini не найден по пути: $PHP_INI_PATH"
fi fi
log_step "Создание конфигурации базы данных..." log_step "Создание конфигурации базы данных..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
DB_SOCKET="/var/run/mysqld/mysqld.sock" DB_SOCKET="/var/run/mysqld/mysqld.sock"
else else
DB_SOCKET="/var/lib/mysql/mysql.sock" DB_SOCKET="/var/lib/mysql/mysql.sock"
fi fi
cat > "$WEBROOT/db_config.php" << EOF cat > "$WEBROOT/db_config.php" << EOF
<?php <?php
define('DB_HOST', 'localhost'); define('DB_HOST', 'localhost');
define('DB_USER', 'root'); define('DB_USER', 'root');
@@ -518,32 +529,32 @@ define('OFFICE', '/usr/bin/libreoffice');
?> ?>
EOF EOF
log_success "Конфигурация БД создана" log_success "Конфигурация БД создана"
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php"
chmod 644 "$WEBROOT/db_config.php" chmod 644 "$WEBROOT/db_config.php"
if sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then if sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then
log_success "Веб-сервер может читать db_config.php" log_success "Веб-сервер может читать db_config.php"
else else
log_error "Веб-сервер НЕ МОЖЕТ читать db_config.php" log_error "Веб-сервер НЕ МОЖЕТ читать db_config.php"
fi fi
if [ ! -f "$WEBROOT/db_config.php" ]; then if [ ! -f "$WEBROOT/db_config.php" ]; then
log_error "Не удалось создать файл db_config.php" log_error "Не удалось создать файл db_config.php"
exit 1 exit 1
fi fi
if ! sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then if ! sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then
log_warning "Веб-сервер не может прочитать db_config.php, исправляем права..." log_warning "Веб-сервер не может прочитать db_config.php, исправляем права..."
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php"
chmod 644 "$WEBROOT/db_config.php" chmod 644 "$WEBROOT/db_config.php"
fi fi
DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php" DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php"
TEMP_DOWNLOAD="/tmp/web_files_$(date +%s)" TEMP_DOWNLOAD="/tmp/web_files_$(date +%s)"
create_fallback_index() { create_fallback_index() {
cat > "$WEBROOT/index.php" << 'EOF' cat > "$WEBROOT/index.php" << 'EOF'
<?php <?php
require_once __DIR__ . '/db_config.php'; require_once __DIR__ . '/db_config.php';
@@ -612,11 +623,11 @@ if (file_exists(__DIR__ . '/db_config.php')) {
} }
} else { } else {
echo "✗ Файл db_config.php НЕ существует<br>"; echo "✗ Файл db_config.php НЕ существует<br>";
} }
echo "</div>"; echo "</div>";
// Теперь пробуем подключиться к БД // Теперь пробуем подключиться к БД
if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config.php')) { if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config.php')) {
try { try {
require_once __DIR__ . '/db_config.php'; require_once __DIR__ . '/db_config.php';
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS); $pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS);
@@ -630,39 +641,39 @@ if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config
echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage()); echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage());
echo "</div>"; echo "</div>";
} }
} else { } else {
echo "<div class='status warning'>"; echo "<div class='status warning'>";
echo "<strong>Не удалось загрузить конфигурацию БД</strong>"; echo "<strong>Не удалось загрузить конфигурацию БД</strong>";
echo "</div>"; echo "</div>";
} }
echo "</div>"; echo "</div>";
echo "</body>"; echo "</body>";
echo "</html>"; echo "</html>";
EOF EOF
} }
log_step "Загрузка файлов приложения..." log_step "Загрузка файлов приложения..."
find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true 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 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 if ! head -n 1 "$WEBROOT/index.php" | grep -q "<?php" && ! grep -q "<?php" "$WEBROOT/index.php" 2>/dev/null; then
create_fallback_index create_fallback_index
log_warning "Скачанный файл не является PHP-скриптом, создана резервная страница" log_warning "Скачанный файл не является PHP-скриптом, создана резервная страница"
else else
log_success "Файлы приложения загружены" log_success "Файлы приложения загружены"
fi fi
else else
create_fallback_index create_fallback_index
log_warning "Не удалось загрузить файл с $DOWNLOAD_URL, создана резервная страница" log_warning "Не удалось загрузить файл с $DOWNLOAD_URL, создана резервная страница"
fi fi
log_step "Настройка прав доступа к файлам..." log_step "Настройка прав доступа к файлам..."
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/index.php" chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/index.php"
chmod 644 "$WEBROOT/db_config.php" chmod 644 "$WEBROOT/db_config.php"
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php" chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php"
cat > "$WEBROOT/.htaccess" << 'EOF' cat > "$WEBROOT/.htaccess" << 'EOF'
<Files "*.conf"> <Files "*.conf">
Require all denied Require all denied
@@ -700,15 +711,15 @@ RewriteEngine On
# RewriteRule ^(.*)$ index.php [QSA,L] # RewriteRule ^(.*)$ index.php [QSA,L]
EOF EOF
chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT" chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT"
chmod -R 755 "$WEBROOT" chmod -R 755 "$WEBROOT"
chmod 644 "$WEBROOT/.htaccess" 2>/dev/null || true chmod 644 "$WEBROOT/.htaccess" 2>/dev/null || true
chmod 600 "$WEBROOT/db_config.php" chmod 600 "$WEBROOT/db_config.php"
log_success "Права доступа настроены" log_success "Права доступа настроены"
log_step "Настройка базы данных MariaDB..." log_step "Настройка базы данных MariaDB..."
if ! systemctl is-active --quiet mariadb; then if ! systemctl is-active --quiet mariadb; then
log_error "MariaDB не запущен. Попытка запуска..." log_error "MariaDB не запущен. Попытка запуска..."
systemctl start mariadb systemctl start mariadb
sleep 3 sleep 3
@@ -717,11 +728,11 @@ if ! systemctl is-active --quiet mariadb; then
log_error "Не удалось запустить MariaDB" log_error "Не удалось запустить MariaDB"
exit 1 exit 1
fi fi
fi fi
log_info "Выполнение базовой настройки безопасности MariaDB..." log_info "Выполнение базовой настройки безопасности MariaDB..."
if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then
log_info "Первичная настройка MariaDB (подключение без пароля доступно)..." log_info "Первичная настройка MariaDB (подключение без пароля доступно)..."
MYSQL_SECURE_SCRIPT="/tmp/mysql_secure_$(date +%s).sql" MYSQL_SECURE_SCRIPT="/tmp/mysql_secure_$(date +%s).sql"
@@ -758,7 +769,7 @@ MYSQL_SCRIPT
fi fi
rm -f "$MYSQL_SECURE_SCRIPT" rm -f "$MYSQL_SECURE_SCRIPT"
elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
log_info "MariaDB уже настроен с текущим паролем..." log_info "MariaDB уже настроен с текущим паролем..."
MYSQL_UPDATE_SCRIPT="/tmp/mysql_update_$(date +%s).sql" MYSQL_UPDATE_SCRIPT="/tmp/mysql_update_$(date +%s).sql"
@@ -777,7 +788,7 @@ MYSQL_SCRIPT
fi fi
rm -f "$MYSQL_UPDATE_SCRIPT" rm -f "$MYSQL_UPDATE_SCRIPT"
else else
log_error "Не удалось подключиться к MariaDB ни с пустым паролем, ни с текущим паролем" log_error "Не удалось подключиться к MariaDB ни с пустым паролем, ни с текущим паролем"
log_info "Попытка сброса пароля root в MariaDB..." log_info "Попытка сброса пароля root в MariaDB..."
@@ -833,12 +844,12 @@ MYSQL_SCRIPT
exit 1 exit 1
fi fi
rm -f "$MYSQL_RESET_SCRIPT" rm -f "$MYSQL_RESET_SCRIPT"
fi fi
log_success "База данных настроена" log_success "База данных настроена"
log_step "Проверка конфигурации Apache..." log_step "Проверка конфигурации Apache..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
if ! apache2ctl configtest >/dev/null 2>&1; then if ! apache2ctl configtest >/dev/null 2>&1; then
log_error "Конфигурация Apache содержит ошибки." log_error "Конфигурация Apache содержит ошибки."
exit 1 exit 1
@@ -846,59 +857,59 @@ if [ "$DISTRO_FAMILY" = "debian" ]; then
WEBSERVER_SERVICE="apache2" WEBSERVER_SERVICE="apache2"
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
if ! httpd -t >/dev/null 2>&1; then if ! httpd -t >/dev/null 2>&1; then
log_error "Конфигурация Apache (httpd) содержит ошибки." log_error "Конфигурация Apache (httpd) содержит ошибки."
exit 1 exit 1
fi fi
WEBSERVER_SERVICE="httpd" WEBSERVER_SERVICE="httpd"
fi fi
log_success "Конфигурация Apache проверена" log_success "Конфигурация Apache проверена"
log_step "Запуск и включение сервисов..." log_step "Запуск и включение сервисов..."
if [ "$DISTRO_FAMILY" = "debian" ]; then if [ "$DISTRO_FAMILY" = "debian" ]; then
systemctl restart apache2 >/dev/null 2>&1 systemctl restart apache2 >/dev/null 2>&1
systemctl enable apache2 >/dev/null 2>&1 systemctl enable apache2 >/dev/null 2>&1
elif [ "$DISTRO_FAMILY" = "rhel" ]; then elif [ "$DISTRO_FAMILY" = "rhel" ]; then
systemctl restart httpd >/dev/null 2>&1 systemctl restart httpd >/dev/null 2>&1
systemctl enable httpd >/dev/null 2>&1 systemctl enable httpd >/dev/null 2>&1
fi fi
systemctl restart mariadb >/dev/null 2>&1 systemctl restart mariadb >/dev/null 2>&1
systemctl restart redis-server >/dev/null 2>&1 || systemctl restart redis >/dev/null 2>&1 || true 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 mariadb >/dev/null 2>&1
systemctl enable redis-server >/dev/null 2>&1 || systemctl enable redis >/dev/null 2>&1 || true systemctl enable redis-server >/dev/null 2>&1 || systemctl enable redis >/dev/null 2>&1 || true
log_success "Все сервисы запущены и добавлены в автозагрузку" log_success "Все сервисы запущены и добавлены в автозагрузку"
log_step "Финальная проверка работоспособности..." log_step "Финальная проверка работоспособности..."
if ! systemctl is-active --quiet $WEBSERVER_SERVICE; then if ! systemctl is-active --quiet $WEBSERVER_SERVICE; then
log_error "Веб-сервер не запущен" log_error "Веб-сервер не запущен"
exit 1 exit 1
fi fi
if ! systemctl is-active --quiet mariadb; then if ! systemctl is-active --quiet mariadb; then
log_error "MariaDB не запущен" log_error "MariaDB не запущен"
exit 1 exit 1
fi fi
if ! php -r "echo phpversion();" >/dev/null 2>&1; then if ! php -r "echo phpversion();" >/dev/null 2>&1; then
log_error "PHP не работает корректно" log_error "PHP не работает корректно"
exit 1 exit 1
fi fi
if ! mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then if ! mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then
log_error "Не удается подключиться к базе данных ALTCor" log_error "Не удается подключиться к базе данных ALTCor"
exit 1 exit 1
fi fi
log_success "Все компоненты работают корректно" log_success "Все компоненты работают корректно"
log_step "Сохранение учетных данных..." log_step "Сохранение учетных данных..."
DB_CREDENTIALS_FILE="/root/.db_password" DB_CREDENTIALS_FILE="/root/.db_password"
cat > "$DB_CREDENTIALS_FILE" << EOF cat > "$DB_CREDENTIALS_FILE" << EOF
# Учетные данные базы данных ALTCor # Учетные данные базы данных ALTCor
DB_HOST=localhost DB_HOST=localhost
@@ -907,30 +918,88 @@ DB_PASSWORD=$DB_PASSWORD
DB_NAME=ALTCor DB_NAME=ALTCor
EOF EOF
chmod 600 "$DB_CREDENTIALS_FILE" chmod 600 "$DB_CREDENTIALS_FILE"
log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE" log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE"
IP_ADDR=$(hostname -I | awk '{print $1}') IP_ADDR=$(hostname -I | awk '{print $1}')
echo "" echo ""
log_success "Установка Altcor успешно завершена." if [ "$REINSTALL" = true ]; then
echo "" log_success "Переустановка Altcor успешно завершена."
echo " Доступ к сайту:" else
echo " • http://localhost/" log_success "Установка Altcor успешно завершена."
echo " • http://$IP_ADDR/" fi
echo "" echo ""
echo " Доступ к БД:" echo " Доступ к сайту:"
echo " • Хост: localhost" echo " • http://localhost/"
echo " • Логин: root" echo "http://$IP_ADDR/"
echo " • Пароль: $DB_PASSWORD" echo ""
echo " • База данных: ALTCor" echo " Доступ к БД:"
echo "" echo " • Хост: localhost"
echo " Расположение файлов:" echo " • Логин: root"
echo "Веб-корень: $WEBROOT" echo "Пароль: $DB_PASSWORD"
echo "Конфигурация БД: $WEBROOT/db_config.php" echo " • База данных: ALTCor"
echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/" echo ""
echo "" echo " Расположение файлов:"
echo " Дополнительная информация:" echo "Веб-корень: $WEBROOT"
echo "Учетные данные БД: $DB_CREDENTIALS_FILE" echo "Конфигурация БД: $WEBROOT/db_config.php"
echo " • Для удаления: ./install.sh -u" echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/"
echo "" 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