190 lines
8.1 KiB
Bash
Executable File
190 lines
8.1 KiB
Bash
Executable File
#!/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" |