From 3613ed496211c4d5b6f6d96afb34323bbe6fa06c Mon Sep 17 00:00:00 2001 From: user Date: Sat, 5 Jul 2025 13:26:14 +0300 Subject: [PATCH] add diagnose --- diagnose.sh | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100755 diagnose.sh diff --git a/diagnose.sh b/diagnose.sh new file mode 100755 index 0000000..b994a67 --- /dev/null +++ b/diagnose.sh @@ -0,0 +1,190 @@ +#!/bin/bash + +# MY Uploader Bot - Диагностика 502 ошибки +# Автоматическая диагностика проблем с доступностью + +DOMAIN="$1" +if [ -z "$DOMAIN" ]; then + echo "Использование: $0 " + 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" \ No newline at end of file