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,221 @@
#!/bin/bash
echo "🔍 Тестирование доступа контейнеров к API и БД"
echo "==============================================="
echo ""
echo "🐳 Статус контейнеров:"
echo "----------------------"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo ""
echo "🌐 Тестирование сетевых соединений между контейнерами:"
echo "======================================================"
echo ""
echo "1. 📡 Frontend → Backend API"
echo "----------------------------"
echo "Проверяем доступ frontend к backend через внутреннюю сеть Docker..."
# Тестируем подключение frontend к backend
docker exec links-frontend-1 sh -c "
echo 'Тест ping к web контейнеру:'
if ping -c 1 links-web-1 >/dev/null 2>&1; then
echo '✅ Ping успешен'
else
echo '❌ Ping неудачен'
fi
echo ''
echo 'Тест HTTP запроса к API:'
if command -v curl >/dev/null 2>&1; then
echo 'Используем curl...'
response=\$(curl -s -w '%{http_code}' -o /dev/null http://links-web-1:8000/api/ 2>/dev/null || echo 'ERROR')
if [ \"\$response\" = 'ERROR' ]; then
echo '❌ Ошибка подключения к API'
else
echo \"✅ API отвечает (HTTP \$response)\"
fi
else
echo 'curl не найден, используем wget...'
if wget -q --spider http://links-web-1:8000/api/ 2>/dev/null; then
echo '✅ API доступен через wget'
else
echo '❌ API недоступен'
fi
fi
"
echo ""
echo "2. 🗄️ Backend → Database"
echo "------------------------"
echo "Проверяем доступ backend к базе данных..."
# Тестируем подключение backend к базе данных
docker exec links-web-1 sh -c "
echo 'Тест ping к БД контейнеру:'
if ping -c 1 links-db-1 >/dev/null 2>&1; then
echo '✅ Ping к БД успешен'
else
echo '❌ Ping к БД неудачен'
fi
echo ''
echo 'Тест подключения к PostgreSQL:'
if command -v pg_isready >/dev/null 2>&1; then
if pg_isready -h links-db-1 -p 5432 >/dev/null 2>&1; then
echo '✅ PostgreSQL доступен'
else
echo '❌ PostgreSQL недоступен'
fi
else
echo 'pg_isready не найден, пробуем через Python...'
fi
echo ''
echo 'Тест Django ORM подключения:'
cd /app
python manage.py shell -c \"
try:
from django.db import connection
cursor = connection.cursor()
cursor.execute('SELECT 1')
print('✅ Django ORM: подключение к БД успешно')
except Exception as e:
print(f'❌ Django ORM ошибка: {e}')
\"
"
echo ""
echo "3. 🔄 Frontend → Backend (через внешний API)"
echo "--------------------------------------------"
echo "Проверяем, как frontend обращается к backend через nginx..."
# Проверяем переменные окружения frontend
docker exec links-frontend-1 sh -c "
echo 'Переменные окружения API:'
env | grep -E 'API|NEXT' | sort
echo ''
echo 'Тест внешнего API через nginx:'
if command -v curl >/dev/null 2>&1; then
# Проверяем внешний доступ к API
response=\$(curl -s -w '%{http_code}' -o /dev/null https://links.shareon.kr/api/ 2>/dev/null || echo 'ERROR')
if [ \"\$response\" = 'ERROR' ]; then
echo '❌ Внешний API недоступен'
else
echo \"✅ Внешний API доступен (HTTP \$response)\"
fi
else
echo 'curl недоступен для внешних запросов'
fi
"
echo ""
echo "4. 📊 Проверка внутренней Docker сети"
echo "-------------------------------------"
echo "Информация о Docker сети:"
# Получаем информацию о сети
network_name=$(docker network ls --format "{{.Name}}" | grep catlink || echo "bridge")
echo "Используемая сеть: $network_name"
echo ""
echo "IP адреса контейнеров в сети:"
for container in links-web-1 links-db-1 links-frontend-1; do
if docker ps --format "{{.Names}}" | grep -q "^$container$"; then
ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container" 2>/dev/null || echo "N/A")
echo "$container: $ip"
else
echo "$container: не найден"
fi
done
echo ""
echo "5. 🔍 Проверка портов внутри контейнеров"
echo "----------------------------------------"
echo "Порты в web контейнере:"
docker exec links-web-1 sh -c "netstat -tlnp 2>/dev/null | grep -E ':8000|:5432' || ss -tlnp | grep -E ':8000|:5432'" || echo "netstat/ss недоступен"
echo ""
echo "Порты в frontend контейнере:"
docker exec links-frontend-1 sh -c "netstat -tlnp 2>/dev/null | grep :3000 || ss -tlnp | grep :3000" || echo "netstat/ss недоступен"
echo ""
echo "6. 📋 Тест Django команд"
echo "------------------------"
echo "Проверяем Django команды и миграции..."
docker exec links-web-1 sh -c "
cd /app
echo 'Проверка миграций:'
python manage.py showmigrations --verbosity=0 2>/dev/null | head -10 || echo 'Ошибка showmigrations'
echo ''
echo 'Проверка пользователей в БД:'
python manage.py shell -c \"
try:
from django.contrib.auth import get_user_model
User = get_user_model()
count = User.objects.count()
print(f'Пользователей в БД: {count}')
if count > 0:
print('✅ БД содержит данные')
else:
print('⚠️ БД пустая (это нормально для новой установки)')
except Exception as e:
print(f'❌ Ошибка запроса к БД: {e}')
\"
"
echo ""
echo "7. 🔐 Тест API авторизации"
echo "--------------------------"
echo "Проверяем доступность API endpoints..."
# Тестируем основные API endpoints
endpoints=(
"/api/"
"/api/auth/login/"
"/api/auth/register/"
"/api/swagger/"
)
for endpoint in "${endpoints[@]}"; do
echo -n "Тест $endpoint: "
response=$(docker exec links-web-1 curl -s -w '%{http_code}' -o /dev/null "http://localhost:8000$endpoint" 2>/dev/null || echo "ERROR")
case $response in
200)
echo "✅ OK ($response)"
;;
301|302)
echo "🔄 Redirect ($response)"
;;
405)
echo "✅ Method not allowed ($response) - endpoint существует"
;;
404)
echo "❌ Not found ($response)"
;;
ERROR)
echo "❌ Connection error"
;;
*)
echo "⚠️ Status: $response"
;;
esac
done
echo ""
echo "🎯 РЕЗЮМЕ ТЕСТИРОВАНИЯ:"
echo "======================"
echo "✅ Тестирование доступа контейнеров завершено"
echo ""
echo "Для дополнительной диагностики используйте:"
echo " • docker logs links-web-1 - логи Django"
echo " • docker logs links-db-1 - логи PostgreSQL"
echo " • docker logs links-frontend-1 - логи Next.js"
echo " • docker exec -it links-web-1 bash - войти в контейнер"
echo " • docker network inspect \$(docker network ls --format '{{.Name}}' | grep catlink) - детали сети"