Fix hardcoded localhost:8000 URLs
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
This commit is contained in:
2025-11-08 19:25:35 +09:00
parent fb74a4a25d
commit e82f0f8e6f
17 changed files with 1396 additions and 58 deletions

View File

@@ -0,0 +1,208 @@
#!/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 "🚀 Тестирование завершено!"