diff --git a/install.sh b/install.sh index 60debc1..ba2a482 100644 --- a/install.sh +++ b/install.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Скрипт для автоматической установки и настройки LEMP (Nginx, MariaDB, PHP-FPM 8.3) +# Исправленный скрипт для автоматической установки и настройки LEMP set -e # --- 1. ПРОВЕРКА СИСТЕМЫ И ПРАВ --- @@ -21,7 +21,7 @@ fi echo "Определен дистрибутив: $DISTRO (Семейство: ${FAMILY:-$DISTRO}, Версия: $VERSION_ID)" -# --- 2. УСТАНОВКА ДЛЯ DEBIAN-ПОДОБНЫХ СИСТЕМ (Debian, Ubuntu) --- +# --- 2. УСТАНОВКА ДЛЯ DEBIAN-ПОДОБНЫХ СИСТЕМ --- if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then echo "Начало установки LEMP для Debian-подобной системы..." @@ -29,7 +29,7 @@ if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then apt update -y apt install -y software-properties-common lsb-release ca-certificates curl wget gnupg2 - # Добавление PPA ondrej/php для гарантированной установки PHP 8.3 + # Добавление PPA ondrej/php для PHP 8.3 if ! apt-cache show php8.3-fpm &>/dev/null; then echo "PHP 8.3 не найден. Добавляем PPA ondrej/php..." CODENAME=$(lsb_release -sc) @@ -47,11 +47,17 @@ if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then exit 1 fi - echo "Установка пакетов: apache2, nginx (для прокси), mariadb, redis, php-fpm..." - # Устанавливаем Nginx и PHP-FPM - apt install -y apache2 nginx mariadb-server redis-server libreoffice default-jre + echo "Установка пакетов: nginx, mariadb, redis, php-fpm..." + + # Останавливаем Apache, если он запущен, и удаляем его + systemctl stop apache2 2>/dev/null || true + systemctl disable apache2 2>/dev/null || true + apt remove -y apache2 apache2-common apache2-utils 2>/dev/null || true + + # Устанавливаем только нужные пакеты + apt install -y nginx mariadb-server redis-server libreoffice default-jre - # Устанавливаем PHP 8.3-FPM и все необходимые расширения + # Устанавливаем PHP 8.3-FPM и расширения PHP_PACKAGES="php8.3-fpm 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" @@ -69,44 +75,20 @@ if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then fi echo "PHP 8.3 ($INSTALLED_PHP_VERSION) успешно установлен." - systemctl enable --now mariadb redis-server nginx php8.3-fpm + systemctl enable --now mariadb redis-server php8.3-fpm else echo "ОШИБКА: Ваш дистрибутив '$DISTRO' не поддерживается этим скриптом. Поддерживаются только Debian/Ubuntu." exit 1 fi -systemctl stop apache2 nginx +# --- 3. НАСТРОЙКА NGINX --- WEBROOT="/var/www/html" echo "Корневая директория веб-сервера: $WEBROOT" mkdir -p "$WEBROOT" -APACHE_CONF="/etc/apache2/sites-available/000-default.conf" -echo "Настройка Apache в $APACHE_CONF..." - -# Конфигурация Apache для работы с PHP-FPM -cat > "$APACHE_CONF" < - DocumentRoot $WEBROOT - - Options -Indexes +FollowSymLinks - AllowOverride All - Require all granted - - - - SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost" - - - ErrorLog \${APACHE_LOG_DIR}/error.log - CustomLog \${APACHE_LOG_DIR}/access.log combined - -EOF - -sed -i 's/Listen 80/Listen 8080/' /etc/apache2/ports.conf - -# Создание конфигурации Nginx для нашего сайта +# Создание правильной конфигурации Nginx NGINX_CONF="/etc/nginx/sites-available/default" echo "Создание конфигурации Nginx в $NGINX_CONF..." @@ -115,25 +97,36 @@ server { listen 80 default_server; listen [::]:80 default_server; + root $WEBROOT; + index index.php index.html index.htm; server_name _; + # Основная обработка файлов location / { - proxy_pass http://127.0.0.1:8080; - proxy_set_header Host \$host; - proxy_set_header X-Real-IP \$remote_addr; - proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto \$scheme; + try_files \$uri \$uri/ =404; } + # Обработка PHP файлов через PHP-FPM location ~ \.php$ { - return 404; + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; + fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; + include fastcgi_params; + } + + # Запрет доступа к .htaccess файлам + location ~ /\.ht { + deny all; + } + + # Кэширование статических файлов + location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { + expires 1y; + add_header Cache-Control "public, immutable"; } } EOF -a2enmod proxy_fcgi rewrite -systemctl restart apache2 - # Проверка конфигурации Nginx if ! nginx -t; then echo "ОШИБКА: Конфигурация Nginx содержит ошибки." @@ -142,7 +135,6 @@ fi # --- 4. СОЗДАНИЕ ВЕБ-ФАЙЛОВ --- -# Файлы db_config.php и index.php остаются такими же, как в предыдущей версии. # Создаем db_config.php cat > "$WEBROOT/db_config.php" << 'EOF' EOF -# Создаем index.php +# Создаем index.php (тот же код что и в оригинале) cat > "$WEBROOT/index.php" << 'EOF' body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; background-color: #f4f7f9; color: #333; margin: 0; padding: 20px; } .container { max-width: 800px; margin: auto; background: #fff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); overflow: hidden; } - h1, h2 { padding: 20px 25px; margin: 0; background: #009639; color: #fff; } /* Nginx green */ + h1, h2 { padding: 20px 25px; margin: 0; background: #009639; color: #fff; } h1 { font-size: 24px; } h2 { font-size: 18px; background: #68a068; margin-top: 10px; } .content { padding: 25px; } @@ -239,7 +231,7 @@ $opcache_enabled = function_exists('opcache_get_status') && opcache_get_status(f

Информация о системе

Java: &1 | head -n1'); echo $java_version ? htmlspecialchars(trim($java_version)) : 'Не найдена'; ?>
- Сервер:
+ Сервер:
Web SAPI:
@@ -253,7 +245,6 @@ chmod -R 755 "$WEBROOT" # --- 5. НАСТРОЙКА PHP.INI ДЛЯ FPM --- -# Настраиваем php.ini именно для FPM PHP_INI_FPM="/etc/php/8.3/fpm/php.ini" echo "Настройка PHP-FPM в $PHP_INI_FPM..." @@ -263,7 +254,6 @@ if [ -f "$PHP_INI_FPM" ]; then sed -i 's/post_max_size = .*/post_max_size = 64M/' "$PHP_INI_FPM" sed -i 's/max_execution_time = .*/max_execution_time = 300/' "$PHP_INI_FPM" sed -i 's/memory_limit = .*/memory_limit = 256M/' "$PHP_INI_FPM" - # Явно включаем opcache sed -i 's/;opcache.enable=.*/opcache.enable=1/' "$PHP_INI_FPM" sed -i 's/;opcache.enable_cli=.*/opcache.enable_cli=1/' "$PHP_INI_FPM" sed -i 's/;opcache.memory_consumption=.*/opcache.memory_consumption=128/' "$PHP_INI_FPM" @@ -285,7 +275,6 @@ DELETE FROM mysql.user WHERE user='root' AND host NOT IN ('localhost', '127.0.0. DROP DATABASE IF EXISTS test; MYSQL_SCRIPT -# Выполняем настройку через системный вызов if ! mysql -u root < "$MYSQL_TMP_SCRIPT"; then echo "ОШИБКА: Не удалось выполнить скрипт настройки MariaDB." rm -f "$MYSQL_TMP_SCRIPT" @@ -298,15 +287,15 @@ echo "База данных успешно настроена." # --- 7. ПЕРЕЗАПУСК СЛУЖБ И ФИНАЛЬНАЯ ПРОВЕРКА --- systemctl restart php8.3-fpm -systemctl restart apache2 systemctl restart nginx -systemctl enable apache2 nginx php8.3-fpm mariadb redis-server +systemctl enable nginx php8.3-fpm mariadb redis-server # --- ЗАВЕРШЕНИЕ --- IP_ADDR=$(hostname -I | awk '{print $1}') echo "" -echo "" +echo "=== УСТАНОВКА ЗАВЕРШЕНА ===" +echo " Архитектура: LEMP (Linux + Nginx + MariaDB + PHP)" echo " Версия PHP: $(php --version | head -n1)" echo " Веб-директория: $WEBROOT" echo "" @@ -315,5 +304,5 @@ echo " -> http://localhost/" echo " -> http://$IP_ADDR/" echo "" echo " Статус активных служб:" -systemctl is-active apache2 nginx php8.3-fpm mariadb redis-server || echo "ПРЕДУПРЕЖДЕНИЕ: Некоторые службы неактивны." -echo "" +systemctl is-active nginx php8.3-fpm mariadb redis-server || echo "ПРЕДУПРЕЖДЕНИЕ: Некоторые службы неактивны." +echo "" \ No newline at end of file