Some checks failed
continuous-integration/drone/push Build is failing
- Add backend/utils.py for URL management - Update serializers to use normalize_file_url() - Update views to use URL utils from env vars - Fix frontend components to use NEXT_PUBLIC_API_URL - Add new env vars: DJANGO_BACKEND_URL, DJANGO_MEDIA_BASE_URL - Replace all hardcoded localhost:8000 with configurable URLs
208 lines
6.9 KiB
Bash
Executable File
208 lines
6.9 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
echo "🔍 Улучшенное тестирование доступа контейнеров"
|
||
echo "=============================================="
|
||
|
||
echo ""
|
||
echo "🐳 Статус контейнеров:"
|
||
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"
|
||
|
||
echo ""
|
||
echo "🌐 Сетевые подключения:"
|
||
echo "======================="
|
||
|
||
echo ""
|
||
echo "1. 📡 Frontend (Next.js) доступ к API"
|
||
echo "------------------------------------"
|
||
|
||
# Проверяем доступные команды в frontend контейнере
|
||
echo "Доступные инструменты в frontend контейнере:"
|
||
docker exec links-frontend-1 sh -c "
|
||
which wget >/dev/null 2>&1 && echo ' ✅ wget доступен'
|
||
which curl >/dev/null 2>&1 && echo ' ✅ curl доступен' || echo ' ❌ curl недоступен'
|
||
which node >/dev/null 2>&1 && echo ' ✅ node доступен'
|
||
"
|
||
|
||
echo ""
|
||
echo "Тест подключения Frontend → Backend через Docker сеть:"
|
||
docker exec links-frontend-1 sh -c "
|
||
if which wget >/dev/null 2>&1; then
|
||
echo 'Тестируем с wget...'
|
||
if wget -q --timeout=10 -O- http://links-web-1:8000/api/ 2>/dev/null | head -1; then
|
||
echo '✅ API доступен через внутреннюю сеть Docker'
|
||
else
|
||
echo '❌ API недоступен через внутреннюю сеть'
|
||
fi
|
||
elif which node >/dev/null 2>&1; then
|
||
echo 'Тестируем с Node.js...'
|
||
node -e \"
|
||
const http = require('http');
|
||
const req = http.get('http://links-web-1:8000/api/', (res) => {
|
||
console.log('✅ API доступен, статус:', res.statusCode);
|
||
});
|
||
req.on('error', () => console.log('❌ Ошибка подключения к API'));
|
||
req.setTimeout(5000, () => console.log('⏰ Timeout'));
|
||
\"
|
||
else
|
||
echo '⚠️ Нет доступных инструментов для HTTP запросов'
|
||
fi
|
||
"
|
||
|
||
echo ""
|
||
echo "2. 🗄️ Backend подключение к БД"
|
||
echo "------------------------------"
|
||
|
||
echo "Проверка БД через Django ORM:"
|
||
docker exec links-web-1 python manage.py shell -c "
|
||
from django.db import connection
|
||
from django.contrib.auth import get_user_model
|
||
|
||
try:
|
||
# Тест подключения
|
||
cursor = connection.cursor()
|
||
cursor.execute('SELECT version()')
|
||
version = cursor.fetchone()[0]
|
||
print(f'✅ PostgreSQL версия: {version[:30]}...')
|
||
|
||
# Тест данных
|
||
User = get_user_model()
|
||
users_count = User.objects.count()
|
||
print(f'✅ Пользователей в БД: {users_count}')
|
||
|
||
# Тест таблиц
|
||
cursor.execute(\"SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'\")
|
||
tables = [row[0] for row in cursor.fetchall()]
|
||
print(f'✅ Таблиц в БД: {len(tables)}')
|
||
|
||
if 'users_user' in tables:
|
||
print('✅ Таблица пользователей найдена')
|
||
if 'api_link' in tables:
|
||
print('✅ Таблица ссылок найдена')
|
||
|
||
except Exception as e:
|
||
print(f'❌ Ошибка БД: {e}')
|
||
"
|
||
|
||
echo ""
|
||
echo "3. 🔄 Проверка API endpoints изнутри Backend"
|
||
echo "-------------------------------------------"
|
||
|
||
echo "Тест API endpoints через Python requests:"
|
||
docker exec links-web-1 python -c "
|
||
import os
|
||
import sys
|
||
sys.path.append('/app')
|
||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
|
||
|
||
import django
|
||
django.setup()
|
||
|
||
from django.test import Client
|
||
from django.urls import reverse
|
||
|
||
try:
|
||
client = Client()
|
||
|
||
# Тест API root
|
||
response = client.get('/api/')
|
||
print(f'API Root: {response.status_code} - {\"✅ OK\" if response.status_code == 200 else \"❌ Error\"}')
|
||
|
||
# Тест Swagger
|
||
response = client.get('/api/swagger/')
|
||
print(f'Swagger: {response.status_code} - {\"✅ OK\" if response.status_code == 200 else \"❌ Error\"}')
|
||
|
||
# Тест Auth
|
||
response = client.get('/api/auth/login/')
|
||
print(f'Auth Login: {response.status_code} - {\"✅ OK\" if response.status_code in [200, 405] else \"❌ Error\"}')
|
||
|
||
# Тест Admin
|
||
response = client.get('/admin/')
|
||
print(f'Admin: {response.status_code} - {\"✅ OK (redirect)\" if response.status_code == 302 else \"❌ Error\"}')
|
||
|
||
except Exception as e:
|
||
print(f'❌ Ошибка тестирования: {e}')
|
||
"
|
||
|
||
echo ""
|
||
echo "4. 📊 Анализ Docker сети"
|
||
echo "========================"
|
||
|
||
echo "Информация о сети:"
|
||
network_name=$(docker network ls --format "{{.Name}}" | grep catlink || echo "default")
|
||
docker network inspect "$network_name" --format "
|
||
Сеть: {{.Name}}
|
||
Подсеть: {{range .IPAM.Config}}{{.Subnet}}{{end}}
|
||
Шлюз: {{range .IPAM.Config}}{{.Gateway}}{{end}}
|
||
"
|
||
|
||
echo ""
|
||
echo "Маршруты в web контейнере:"
|
||
docker exec links-web-1 sh -c "
|
||
ip route 2>/dev/null | head -5 || route -n 2>/dev/null | head -5 || echo 'Команды маршрутизации недоступны'
|
||
"
|
||
|
||
echo ""
|
||
echo "5. 🔍 Проверка переменных окружения"
|
||
echo "==================================="
|
||
|
||
echo "Frontend environment:"
|
||
docker exec links-frontend-1 env | grep -E "NEXT|API|URL" | sort
|
||
|
||
echo ""
|
||
echo "Backend environment (Django):"
|
||
docker exec links-web-1 env | grep -E "DJANGO|DATABASE|DEBUG" | head -10
|
||
|
||
echo ""
|
||
echo "6. 📋 Логи контейнеров (последние строки)"
|
||
echo "========================================="
|
||
|
||
echo "📝 Backend логи:"
|
||
docker logs --tail=3 links-web-1 2>/dev/null | tail -3
|
||
|
||
echo ""
|
||
echo "📝 Frontend логи:"
|
||
docker logs --tail=3 links-frontend-1 2>/dev/null | tail -3
|
||
|
||
echo ""
|
||
echo "📝 Database логи:"
|
||
docker logs --tail=3 links-db-1 2>/dev/null | tail -3
|
||
|
||
echo ""
|
||
echo "🎯 ИТОГОВЫЙ СТАТУС:"
|
||
echo "==================="
|
||
|
||
# Финальная проверка доступности
|
||
echo -n "Frontend (3000): "
|
||
if docker exec links-frontend-1 sh -c "netstat -tln 2>/dev/null | grep :3000" >/dev/null; then
|
||
echo "✅ Слушает порт"
|
||
else
|
||
echo "⚠️ Порт не найден"
|
||
fi
|
||
|
||
echo -n "Backend (8000): "
|
||
if docker exec links-web-1 sh -c "netstat -tln 2>/dev/null | grep :8000" >/dev/null; then
|
||
echo "✅ Слушает порт"
|
||
else
|
||
echo "⚠️ Проверим через ss или другим способом"
|
||
if docker exec links-web-1 python -c "import socket; s=socket.socket(); s.connect(('localhost', 8000)); print('✅ Порт 8000 доступен')" 2>/dev/null; then
|
||
echo "✅ Порт доступен"
|
||
else
|
||
echo "❌ Порт недоступен"
|
||
fi
|
||
fi
|
||
|
||
echo -n "Database (5432): "
|
||
docker exec links-web-1 python -c "
|
||
import socket
|
||
try:
|
||
s = socket.socket()
|
||
s.settimeout(3)
|
||
s.connect(('links-db-1', 5432))
|
||
print('✅ БД доступна')
|
||
s.close()
|
||
except:
|
||
print('❌ БД недоступна')
|
||
"
|
||
|
||
echo ""
|
||
echo "🚀 Тестирование завершено!" |