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