From c6450193801c08f991e80e4cfd86b055863734a8 Mon Sep 17 00:00:00 2001 From: user Date: Sat, 5 Jul 2025 19:51:03 +0300 Subject: [PATCH] fix issues sh --- fix_server_issues.sh | 210 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 fix_server_issues.sh diff --git a/fix_server_issues.sh b/fix_server_issues.sh new file mode 100644 index 0000000..70a62bd --- /dev/null +++ b/fix_server_issues.sh @@ -0,0 +1,210 @@ +#!/bin/bash + +# MY Network Server Issues Fix Script +# Исправляет проблемы с nginx и контейнерами для проекта в /home/uploader-bot + +set -e + +echo "==============================================" +echo "MY NETWORK SERVER FIX SCRIPT" +echo "Время: $(date)" +echo "==============================================" + +PROJECT_DIR="/home/uploader-bot" + +echo "🔧 Проверяю проект в: $PROJECT_DIR" + +if [ ! -d "$PROJECT_DIR" ]; then + echo "❌ Директория проекта не найдена: $PROJECT_DIR" + exit 1 +fi + +cd "$PROJECT_DIR" +echo "✅ Работаю в: $(pwd)" + +if [ ! -f "docker-compose.production.yml" ]; then + echo "❌ docker-compose.production.yml не найден!" + exit 1 +fi + +echo "✅ Docker compose файл найден" + +echo "" +echo "=== 1. СОЗДАНИЕ NGINX КОНФИГУРАЦИИ ===" +echo "🔧 Создаю правильную nginx конфигурацию..." + +cat > /tmp/nginx_uploader.conf << 'EOF' +server { + listen 80; + server_name _; + + # API проксирование на приложение + location /api/ { + proxy_pass http://localhost:3000/api/; + 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; + proxy_connect_timeout 30s; + proxy_send_timeout 30s; + proxy_read_timeout 30s; + } + + # Альтернативные порты для API + location /api5000/ { + proxy_pass http://localhost:5000/; + 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; + } + + # Health check + location /health { + proxy_pass http://localhost:3000/api/health; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # Основная страница - пробуем API + location / { + proxy_pass http://localhost:3000/; + 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 + +sudo mv /tmp/nginx_uploader.conf /etc/nginx/sites-available/default +sudo ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default + +echo "✅ Nginx конфигурация создана" + +echo "" +echo "=== 2. ПРОВЕРКА ТЕКУЩИХ КОНТЕЙНЕРОВ ===" +echo "Текущий статус контейнеров:" +docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}" + +echo "" +echo "=== 3. АНАЛИЗ ЛОГОВ ПРИЛОЖЕНИЯ ===" +# Найти контейнер приложения +APP_CONTAINER=$(docker ps --format "{{.Names}}" | grep -E "(app|uploader)" | head -1) +if [ -n "$APP_CONTAINER" ]; then + echo "📄 Логи контейнера $APP_CONTAINER (последние 15 строк):" + docker logs --tail=15 "$APP_CONTAINER" 2>&1 || echo "Не удалось получить логи" +else + echo "❌ Контейнер приложения не найден" +fi + +echo "" +echo "=== 4. ПЕРЕЗАПУСК ПРОБЛЕМНЫХ КОНТЕЙНЕРОВ ===" + +# Остановить только перезапускающиеся контейнеры +RESTARTING_CONTAINERS=$(docker ps -a --filter "status=restarting" --format "{{.Names}}") +if [ -n "$RESTARTING_CONTAINERS" ]; then + echo "🛑 Останавливаю перезапускающиеся контейнеры:" + echo "$RESTARTING_CONTAINERS" + echo "$RESTARTING_CONTAINERS" | xargs docker stop 2>/dev/null || true + echo "$RESTARTING_CONTAINERS" | xargs docker rm 2>/dev/null || true +else + echo "✅ Нет перезапускающихся контейнеров" +fi + +# Удалить старые MariaDB контейнеры если есть +MARIADB_CONTAINERS=$(docker ps -a --format "{{.Names}}" | grep maria || true) +if [ -n "$MARIADB_CONTAINERS" ]; then + echo "🗑️ Удаляю старые MariaDB контейнеры:" + echo "$MARIADB_CONTAINERS" | xargs docker stop 2>/dev/null || true + echo "$MARIADB_CONTAINERS" | xargs docker rm 2>/dev/null || true +fi + +echo "" +echo "=== 5. ЗАПУСК СЕРВИСОВ ===" +echo "🚀 Запуск Docker Compose..." + +# Запуск основных сервисов +docker-compose -f docker-compose.production.yml up -d postgres redis + +echo "⏳ Ждем запуска БД (10 секунд)..." +sleep 10 + +# Запуск приложения +echo "🚀 Запуск приложения..." +docker-compose -f docker-compose.production.yml up -d app + +echo "⏳ Ждем запуска приложения (20 секунд)..." +sleep 20 + +echo "" +echo "=== 6. ПРОВЕРКА СТАТУСА ===" +echo "Новый статус контейнеров:" +docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}" + +echo "" +echo "=== 7. ТЕСТИРОВАНИЕ NGINX ===" +sudo nginx -t +if [ $? -eq 0 ]; then + sudo systemctl reload nginx + echo "✅ Nginx конфигурация корректна и перезагружена" +else + echo "❌ Ошибка в nginx конфигурации" +fi + +echo "" +echo "=== 8. ПРОВЕРКА ПРИЛОЖЕНИЯ ===" +echo "Тест локальных соединений:" +sleep 5 + +# Проверка портов приложения +for port in 3000 5000; do + if timeout 5 curl -s http://localhost:$port/api/health > /dev/null 2>&1; then + echo "✅ localhost:$port/api/health - РАБОТАЕТ" + else + echo "❌ localhost:$port/api/health - НЕ РАБОТАЕТ" + fi +done + +# Проверка через nginx +if timeout 5 curl -s http://localhost/api/health > /dev/null 2>&1; then + echo "✅ nginx proxy (/api/health) - РАБОТАЕТ" +else + echo "❌ nginx proxy (/api/health) - НЕ РАБОТАЕТ" +fi + +if timeout 5 curl -s http://localhost/health > /dev/null 2>&1; then + echo "✅ nginx proxy (/health) - РАБОТАЕТ" +else + echo "❌ nginx proxy (/health) - НЕ РАБОТАЕТ" +fi + +echo "" +echo "=== 9. ФИНАЛЬНЫЕ ЛОГИ ===" +APP_CONTAINER=$(docker ps --format "{{.Names}}" | grep -E "(app|uploader)" | head -1) +if [ -n "$APP_CONTAINER" ]; then + echo "📄 Финальные логи $APP_CONTAINER:" + docker logs --tail=10 "$APP_CONTAINER" 2>&1 || echo "Логи недоступны" +fi + +echo "" +echo "==============================================" +echo "ИСПРАВЛЕНИЕ ЗАВЕРШЕНО!" +echo "Время: $(date)" +echo "==============================================" + +echo "" +echo "📊 РЕЗУЛЬТАТ:" +echo "Проект: $PROJECT_DIR" +echo "Активные контейнеры:" +docker ps --format "{{.Names}}: {{.Status}}" | head -10 + +echo "" +echo "🌐 ВНЕШНИЙ ТЕСТ (выполните вручную):" +echo "curl -I http://$(curl -s ifconfig.me)/api/health" +echo "curl -I http://$(curl -s ifconfig.me)/health" + +echo "" +echo "🔍 ДЛЯ ОТЛАДКИ:" +echo "docker logs \$(docker ps --format \"{{.Names}}\" | grep app | head -1)" +echo "sudo journalctl -u nginx -f" \ No newline at end of file