diff --git a/start.sh b/start.sh index 528ca78..c481501 100755 --- a/start.sh +++ b/start.sh @@ -1130,7 +1130,28 @@ setup_nginx() { log_success "Web2-client развернут в /var/www/my-network-web" fi - # Создание конфигурации nginx + # Полная очистка старых nginx конфигураций + log_info "Очистка старых nginx конфигураций..." + + # Удаляем все существующие конфигурации sites + rm -f /etc/nginx/sites-enabled/* 2>/dev/null || true + rm -f /etc/nginx/sites-available/my-network* 2>/dev/null || true + + # Очистка конфигураций certbot в nginx.conf + if [ -f /etc/nginx/nginx.conf.backup ]; then + cp /etc/nginx/nginx.conf.backup /etc/nginx/nginx.conf + else + cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup + fi + + # Удаляем все SSL включения из основного nginx.conf + sed -i '/# managed by Certbot/d' /etc/nginx/nginx.conf 2>/dev/null || true + sed -i '/ssl_certificate/d' /etc/nginx/nginx.conf 2>/dev/null || true + sed -i '/ssl_certificate_key/d' /etc/nginx/nginx.conf 2>/dev/null || true + sed -i '/ssl_dhparam/d' /etc/nginx/nginx.conf 2>/dev/null || true + + # Создание чистой HTTP конфигурации nginx + log_info "Создание чистой HTTP конфигурации nginx..." cat > /etc/nginx/sites-available/my-network << EOF # MY Network v3.0 nginx configuration @@ -1200,29 +1221,35 @@ $([ "$ENABLE_WEB_CLIENT" = "true" ] && echo " try_files \$uri \$uri/ =404 } EOF - # Активация сайта + # Активация HTTP конфигурации if [ ! -L "/etc/nginx/sites-enabled/my-network" ]; then ln -s /etc/nginx/sites-available/my-network /etc/nginx/sites-enabled/ fi - # Отключение дефолтного сайта - if [ -L "/etc/nginx/sites-enabled/default" ]; then - rm /etc/nginx/sites-enabled/default - fi - # Тест конфигурации nginx + log_info "Тестирование HTTP конфигурации nginx..." if nginx -t; then - log_success "Конфигурация nginx корректна" + log_success "HTTP конфигурация nginx корректна" else - log_error "Ошибка в конфигурации nginx" + log_error "Ошибка в HTTP конфигурации nginx" + log_info "Показать детали ошибки nginx:" + nginx -t 2>&1 || true return 1 fi - # Запуск nginx + # Запуск nginx с HTTP конфигурацией systemctl enable nginx systemctl restart nginx - log_success "Nginx настроен и запущен" + # Проверяем, что nginx запустился успешно + sleep 3 + if systemctl is-active nginx >/dev/null 2>&1; then + log_success "Nginx запущен с HTTP конфигурацией" + else + log_error "Nginx не запустился" + systemctl status nginx || true + return 1 + fi # Настройка SSL если нужно if [ "$ENABLE_SSL" = "true" ] && [ -n "$DOMAIN" ] && [ -n "$EMAIL" ]; then @@ -1270,45 +1297,17 @@ install_ssl_certificates() { if [ -d "/etc/letsencrypt/live/$DOMAIN" ]; then log_warn "Обнаружен существующий сертификат для $DOMAIN, удаляем для предотвращения конфликтов..." certbot delete --cert-name "$DOMAIN" --non-interactive 2>/dev/null || true - - # Перезапуск nginx после удаления сертификатов чтобы очистить SSL конфигурацию - log_info "Перезапуск nginx для обновления конфигурации..." - systemctl restart nginx - sleep 5 - - # Проверяем что nginx работает корректно без SSL - if ! nginx -t 2>/dev/null; then - log_warn "Nginx конфигурация некорректна, восстанавливаем базовую HTTP конфигурацию..." - # Пересоздаем чистую HTTP конфигурацию - cat > /etc/nginx/sites-available/my-network << EOF -server { - listen 80; - server_name $DOMAIN; - - client_max_body_size 10G; - client_body_timeout 300s; - client_header_timeout 300s; - - location / { -$([ "$ENABLE_WEB_CLIENT" = "true" ] && echo " root /var/www/my-network-web;" || echo " return 404;") -$([ "$ENABLE_WEB_CLIENT" = "true" ] && echo " index index.html;" || echo "") -$([ "$ENABLE_WEB_CLIENT" = "true" ] && echo " try_files \$uri \$uri/ =404;" || echo "") - } - - location /api/ { - proxy_pass http://127.0.0.1:15100; - 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; - } -} -EOF - systemctl restart nginx - fi sleep 2 fi + # Убеждаемся что nginx работает с HTTP перед установкой SSL + log_info "Проверка готовности nginx для SSL..." + if ! systemctl is-active nginx >/dev/null 2>&1 || ! nginx -t 2>/dev/null; then + log_error "Nginx не готов для SSL установки" + log_info "Система продолжит работу без SSL" + return 0 + fi + # Получение сертификата через certbot с явным указанием типа ключа log_info "Запуск certbot для получения SSL сертификата..." if certbot --nginx -d "$DOMAIN" --email "$EMAIL" --agree-tos --non-interactive --redirect --key-type rsa --cert-name "$DOMAIN"; then