diff --git a/install.sh b/install.sh index b543d01..1f874e8 100644 --- a/install.sh +++ b/install.sh @@ -73,7 +73,6 @@ cleanup_apache_config() { rm -f "${HTTPD_CONF}.tmp" fi - # Также очищаем PHP-FPM конфигурацию от дублирующихся модулей if [ -f "/etc/httpd/conf.d/php-fpm.conf" ]; then log_info "Очистка PHP-FPM конфигурации от LoadModule директив..." @@ -438,4 +437,691 @@ proceed_with_installation() { sleep 3 echo "" - echo "На \ No newline at end of file + 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 >/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 /etc/httpd/conf.d/php-fpm.conf 2>/dev/null || true + + 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) + DirectoryIndex index.php index.html + + + 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) + DirectoryIndex index.php index.html + + + 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 + PHP_INI_PATH="/etc/php.ini" + 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" + 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 + + DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php" + + create_fallback_index() { + cat > "$WEBROOT/index.php" << 'EOF' +Сервер готов"; +echo ""; +echo "

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

"; +if (file_exists(__DIR__ . '/db_config.php')) { + require_once __DIR__ . '/db_config.php'; + try { + $pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS); + echo "

✓ Подключение к базе данных '" . DB_NAME . "' успешно.

"; + } catch (PDOException $e) { + echo "

✗ Не удалось подключиться к БД: " . htmlspecialchars($e->getMessage()) . "

"; + } +} else { + echo "

✗ Файл db_config.php не найден.

"; +} +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 ! 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 "Настройка прав доступа к файлам..." + + cat > "$WEBROOT/.htaccess" << 'EOF' + + Require all denied + + + Require all denied + + + AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript + + + ExpiresActive On + ExpiresDefault "access plus 1 month" + + + Header always set X-Content-Type-Options nosniff + Header always set X-Frame-Options DENY + +RewriteEngine On +EOF + + chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT" + find "$WEBROOT" -type d -exec chmod 755 {} \; + find "$WEBROOT" -type f -exec chmod 644 {} \; + chmod 600 "$WEBROOT/db_config.php" 2>/dev/null || true + log_success "Права доступа настроены" + + log_step "Настройка базы данных MariaDB..." + + if ! systemctl is-active --quiet mariadb; then + log_info "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.sql" + cat > "$MYSQL_SECURE_SCRIPT" << MYSQL_SCRIPT +ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; +DELETE FROM mysql.user WHERE User=''; +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 -u root -p"$DB_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >/dev/null 2>&1 + log_success "База данных ALTCor создана/проверена" + + else + log_error "Не удалось подключиться к MariaDB. Попробуйте проверить пароль root вручную." + exit 1 + fi + + log_success "База данных настроена" + + log_step "Проверка конфигурации Apache..." + if [ "$DISTRO_FAMILY" = "debian" ]; then + if ! apache2ctl configtest 2>/dev/null; then + log_error "Ошибка в конфигурации Apache" + apache2ctl configtest + exit 1 + fi + elif [ "$DISTRO_FAMILY" = "rhel" ]; then + if ! httpd -t 2>/dev/null; then + log_error "Ошибка в конфигурации Apache" + httpd -t + exit 1 + fi + fi + log_success "Конфигурация Apache корректна" + + + 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 + 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 + 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 restart php83-php-fpm >/dev/null 2>&1 + systemctl enable php83-php-fpm >/dev/null 2>&1 + + sleep 2 + 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 enable mariadb >/dev/null 2>&1 + systemctl restart redis-server >/dev/null 2>&1 || systemctl restart 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_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 + 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 + firewall-cmd --reload >/dev/null 2>&1 + fi + log_success "Брандмауэр настроен" + + log_step "Финальная проверка работоспособности..." + + 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 icanhazip.com 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" != "недоступен" ] && [ ! -z "$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 "" +} + +# --- Main Execution --- +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