uploader-bot/scripts/fix_server_issues.sh

210 lines
7.2 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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