uploader-bot/diagnose.sh

190 lines
8.1 KiB
Bash
Executable File
Raw 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 Uploader Bot - Диагностика 502 ошибки
# Автоматическая диагностика проблем с доступностью
DOMAIN="$1"
if [ -z "$DOMAIN" ]; then
echo "Использование: $0 <domain>"
echo "Пример: $0 my-public-node-3.projscale.dev"
exit 1
fi
MAIN_PROJECT_DIR="/home/myuploader/uploader-bot"
COMPOSE_FILE="docker-compose.production.yml"
# Цвета
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}🔍 MY UPLOADER BOT - ДИАГНОСТИКА 502${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
cd "$MAIN_PROJECT_DIR" 2>/dev/null || {
echo -e "${RED}Не найдена директория проекта: $MAIN_PROJECT_DIR${NC}"
exit 1
}
echo -e "${YELLOW}1. 🐳 Проверка статуса Docker контейнеров${NC}"
echo "----------------------------------------"
docker-compose -f "$COMPOSE_FILE" ps
echo ""
echo -e "${YELLOW}2. 🔍 Проверка работающих контейнеров${NC}"
echo "----------------------------------------"
RUNNING_CONTAINERS=$(docker-compose -f "$COMPOSE_FILE" ps --services --filter "status=running")
if [ -z "$RUNNING_CONTAINERS" ]; then
echo -e "${RED}НЕТ РАБОТАЮЩИХ КОНТЕЙНЕРОВ!${NC}"
echo -e "${YELLOW}Попробуйте запустить: sudo ./start.sh${NC}"
exit 1
else
echo -e "${GREEN}✅ Работающие контейнеры:${NC}"
echo "$RUNNING_CONTAINERS"
fi
echo ""
echo -e "${YELLOW}3. 🌐 Проверка доступности локальных портов${NC}"
echo "----------------------------------------"
echo -n "Порт 15100 (API): "
if curl -f -s http://localhost:15100/health > /dev/null 2>&1; then
echo -e "${GREEN}✅ Доступен${NC}"
API_STATUS="OK"
else
echo -e "${RED}❌ Недоступен${NC}"
API_STATUS="FAIL"
fi
echo -n "Порт 3000 (Web2-client): "
if curl -f -s http://localhost:3000/health > /dev/null 2>&1; then
echo -e "${GREEN}✅ Доступен${NC}"
WEB2_STATUS="OK"
else
echo -e "${YELLOW}⚠️ Недоступен (возможно, обычная нода)${NC}"
WEB2_STATUS="SKIP"
fi
echo -n "Порт 80 (Nginx): "
if curl -f -s http://localhost > /dev/null 2>&1; then
echo -e "${GREEN}✅ Доступен${NC}"
NGINX_STATUS="OK"
else
echo -e "${RED}❌ Недоступен${NC}"
NGINX_STATUS="FAIL"
fi
echo ""
echo -e "${YELLOW}4. 🗄️ Проверка базы данных${NC}"
echo "----------------------------------------"
echo -n "PostgreSQL: "
if docker-compose -f "$COMPOSE_FILE" exec -T postgres pg_isready -U my_user -d my_uploader_db 2>/dev/null; then
echo -e "${GREEN}✅ Доступна${NC}"
DB_STATUS="OK"
else
echo -e "${RED}❌ Недоступна${NC}"
DB_STATUS="FAIL"
fi
echo -n "Redis: "
if docker-compose -f "$COMPOSE_FILE" exec -T redis redis-cli ping 2>/dev/null | grep -q PONG; then
echo -e "${GREEN}✅ Доступен${NC}"
REDIS_STATUS="OK"
else
echo -e "${RED}❌ Недоступен${NC}"
REDIS_STATUS="FAIL"
fi
echo ""
echo -e "${YELLOW}5. 🔍 Последние логи основного приложения${NC}"
echo "----------------------------------------"
echo "Последние 10 строк логов app контейнера:"
docker-compose -f "$COMPOSE_FILE" logs --tail=10 app
echo ""
echo -e "${YELLOW}6. 🔍 Проверка nginx конфигурации${NC}"
echo "----------------------------------------"
echo -n "Nginx config test: "
if docker-compose -f "$COMPOSE_FILE" exec -T nginx nginx -t 2>/dev/null; then
echo -e "${GREEN}✅ Конфигурация корректна${NC}"
NGINX_CONFIG="OK"
else
echo -e "${RED}❌ Ошибка в конфигурации${NC}"
NGINX_CONFIG="FAIL"
echo "Детали ошибки:"
docker-compose -f "$COMPOSE_FILE" exec -T nginx nginx -t
fi
echo ""
echo -e "${YELLOW}7. 🌐 Проверка внешней доступности${NC}"
echo "----------------------------------------"
echo -n "HTTPS доступность ($DOMAIN): "
if curl -f -s -k "https://$DOMAIN/health" > /dev/null 2>&1; then
echo -e "${GREEN}✅ Доступен${NC}"
HTTPS_STATUS="OK"
else
echo -e "${RED}❌ Недоступен (502 ошибка)${NC}"
HTTPS_STATUS="FAIL"
fi
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}📊 СВОДКА ДИАГНОСТИКИ${NC}"
echo -e "${BLUE}========================================${NC}"
echo -e "API (localhost:15100): $([ "$API_STATUS" = "OK" ] && echo -e "${GREEN}" || echo -e "${RED}") $API_STATUS${NC}"
echo -e "Web2-client (localhost:3000): $([ "$WEB2_STATUS" = "OK" ] && echo -e "${GREEN}" || [ "$WEB2_STATUS" = "SKIP" ] && echo -e "${YELLOW}⚠️" || echo -e "${RED}") $WEB2_STATUS${NC}"
echo -e "Nginx (localhost:80): $([ "$NGINX_STATUS" = "OK" ] && echo -e "${GREEN}" || echo -e "${RED}") $NGINX_STATUS${NC}"
echo -e "PostgreSQL: $([ "$DB_STATUS" = "OK" ] && echo -e "${GREEN}" || echo -e "${RED}") $DB_STATUS${NC}"
echo -e "Redis: $([ "$REDIS_STATUS" = "OK" ] && echo -e "${GREEN}" || echo -e "${RED}") $REDIS_STATUS${NC}"
echo -e "Nginx Config: $([ "$NGINX_CONFIG" = "OK" ] && echo -e "${GREEN}" || echo -e "${RED}") $NGINX_CONFIG${NC}"
echo -e "HTTPS ($DOMAIN): $([ "$HTTPS_STATUS" = "OK" ] && echo -e "${GREEN}" || echo -e "${RED}") $HTTPS_STATUS${NC}"
echo ""
echo -e "${BLUE}🛠️ РЕКОМЕНДАЦИИ:${NC}"
if [ "$API_STATUS" != "OK" ]; then
echo -e "${RED}❌ Основная проблема: API приложение не работает${NC}"
echo -e "${YELLOW}Решение:${NC}"
echo "1. Проверьте логи приложения: sudo docker-compose -f $COMPOSE_FILE logs app"
echo "2. Перезапустите приложение: sudo docker-compose -f $COMPOSE_FILE restart app"
echo "3. Проверьте переменные окружения в .env файле"
echo ""
elif [ "$NGINX_CONFIG" != "OK" ]; then
echo -e "${RED}❌ Проблема в конфигурации Nginx${NC}"
echo -e "${YELLOW}Решение:${NC}"
echo "1. Проверьте конфигурацию nginx"
echo "2. Перезапустите nginx: sudo docker-compose -f $COMPOSE_FILE restart nginx"
echo ""
elif [ "$DB_STATUS" != "OK" ] || [ "$REDIS_STATUS" != "OK" ]; then
echo -e "${RED}❌ Проблема с базой данных или Redis${NC}"
echo -e "${YELLOW}Решение:${NC}"
echo "1. Перезапустите сервисы: sudo docker-compose -f $COMPOSE_FILE restart postgres redis"
echo "2. Проверьте логи: sudo docker-compose -f $COMPOSE_FILE logs postgres redis"
echo ""
else
echo -e "${GREEN}🔍 Все локальные сервисы работают корректно${NC}"
echo -e "${YELLOW}Возможные причины 502 ошибки:${NC}"
echo "1. Приложение еще запускается (подождите 2-3 минуты)"
echo "2. Проблема с SSL сертификатом"
echo "3. Неправильная конфигурация домена"
echo ""
echo -e "${BLUE}Дополнительная диагностика:${NC}"
echo "sudo docker-compose -f $COMPOSE_FILE logs -f app"
fi
echo -e "${BLUE}🔧 Быстрые команды для исправления:${NC}"
echo "# Полная перезагрузка всех сервисов:"
echo "sudo docker-compose -f $COMPOSE_FILE down && sudo docker-compose -f $COMPOSE_FILE up -d"
echo ""
echo "# Просмотр логов в реальном времени:"
echo "sudo docker-compose -f $COMPOSE_FILE logs -f"
echo ""
echo "# Перезапуск только основного приложения:"
echo "sudo docker-compose -f $COMPOSE_FILE restart app"
echo ""
echo "# Проверка статуса через 2 минуты:"
echo "sleep 120 && curl -v https://$DOMAIN/health"