#!/bin/bash # scripts/diagnose-server.sh - Диагностика проблем на сервере set -e echo "🔍 Диагностика сервера CatLink..." echo "=================================" echo "" echo "📊 1. Статус Docker контейнеров:" docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" echo "" echo "🔗 2. Статус сетей Docker:" docker network ls echo "" echo "📡 3. Проверка подключения к базе данных:" echo " Тестируем подключение из контейнера web к базе данных..." if docker-compose exec -T web python -c " import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings') django.setup() from django.db import connection try: with connection.cursor() as cursor: cursor.execute('SELECT 1') print('✅ Подключение к базе данных успешно') except Exception as e: print(f'❌ Ошибка подключения к БД: {e}') " 2>/dev/null; then echo "✅ База данных доступна" else echo "❌ База данных недоступна" fi echo "" echo "👥 4. Данные пользователей в базе:" if docker-compose exec -T db psql -U links_user -d links_db -c "SELECT COUNT(*) as user_count FROM users_user;" 2>/dev/null; then echo "✅ Таблица пользователей доступна" docker-compose exec -T db psql -U links_user -d links_db -c "SELECT id, username, email, is_active, is_staff, is_superuser FROM users_user ORDER BY date_joined DESC LIMIT 5;" else echo "❌ Не удается получить данные пользователей" fi echo "" echo "🌐 5. Проверка nginx конфигурации:" if sudo nginx -t 2>/dev/null; then echo "✅ Конфигурация nginx корректна" else echo "❌ Ошибка в конфигурации nginx" fi echo "" echo "🔧 6. Статус nginx сервиса:" sudo systemctl status nginx --no-pager -l echo "" echo "🚪 7. Проверка портов:" echo " Порты, которые слушает система:" sudo netstat -tlnp | grep -E ":(80|443|3000|8000|5432)" || echo "Нет активных портов" echo "" echo "📋 8. Логи nginx (последние 10 строк):" sudo tail -10 /var/log/nginx/error.log 2>/dev/null || echo "Логи nginx недоступны" echo "" echo "📋 9. Логи Docker контейнеров:" echo " --- Web контейнер (последние 5 строк) ---" docker-compose logs --tail=5 web 2>/dev/null || echo "Логи web недоступны" echo "" echo " --- Frontend контейнер (последние 5 строк) ---" docker-compose logs --tail=5 frontend 2>/dev/null || echo "Логи frontend недоступны" echo "" echo "🔗 10. Тест API эндпоинтов локально:" echo " Тестируем доступность API..." if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/admin/ | grep -q "200\|302"; then echo "✅ Django admin доступен по http://localhost:8000/admin/" else echo "❌ Django admin недоступен по http://localhost:8000/admin/" fi if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/api/ | grep -q "200\|404"; then echo "✅ Django API доступен по http://localhost:8000/api/" else echo "❌ Django API недоступен по http://localhost:8000/api/" fi if curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/ | grep -q "200"; then echo "✅ Frontend доступен по http://localhost:3000/" else echo "❌ Frontend недоступен по http://localhost:3000/" fi echo "" echo "🌍 11. Тест внешних эндпоинтов:" echo " Тестируем доступность через nginx..." if curl -s -o /dev/null -w "%{http_code}" http://localhost/admin/ | grep -q "200\|302"; then echo "✅ Admin доступен через nginx: http://localhost/admin/" else echo "❌ Admin недоступен через nginx: http://localhost/admin/" fi if curl -s -o /dev/null -w "%{http_code}" http://localhost/api/ | grep -q "200\|404"; then echo "✅ API доступен через nginx: http://localhost/api/" else echo "❌ API недоступен через nginx: http://localhost/api/" fi echo "" echo "🔐 12. SSL сертификаты:" if [ -d "/etc/letsencrypt/live" ]; then echo "✅ Директория SSL сертификатов существует:" sudo ls -la /etc/letsencrypt/live/ 2>/dev/null || echo "Не удается прочитать директорию сертификатов" else echo "❌ SSL сертификаты не найдены" fi echo "" echo "📄 13. Переменные окружения (.env):" echo " Проверяем ключевые переменные..." if [ -f ".env" ]; then echo "✅ Файл .env существует" echo " DJANGO_DEBUG: $(grep '^DJANGO_DEBUG=' .env | cut -d= -f2)" echo " NEXT_PUBLIC_API_URL: $(grep '^NEXT_PUBLIC_API_URL=' .env | cut -d= -f2)" echo " DATABASE_HOST: $(grep '^DATABASE_HOST=' .env | cut -d= -f2)" else echo "❌ Файл .env не найден" fi echo "" echo "🏁 Диагностика завершена!" echo "================================="