136 lines
5.4 KiB
Bash
Executable File
136 lines
5.4 KiB
Bash
Executable File
#!/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 "=================================" |