210 lines
7.2 KiB
Bash
210 lines
7.2 KiB
Bash
#!/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" |