#!/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"