3.2 KiB
3.2 KiB
Решение проблем со статикой и API
Исправленные проблемы
✅ Статические файлы Django
Проблема: Статические файлы Django REST Framework не загружались (404 ошибки)
Решение:
-
Добавлен WhiteNoise middleware в
settings.py:MIDDLEWARE = [ "corsheaders.middleware.CorsMiddleware", 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # Добавлено # ... остальные middleware ] -
Настроено хранилище статических файлов:
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' -
Создан
entrypoint.shдля сборки статики при запуске:#!/bin/bash echo "Collecting static files..." python3 manage.py collectstatic --noinput --clear echo "Applying database migrations..." python3 manage.py migrate --noinput echo "Starting server..." exec gunicorn backend.wsgi:application --bind 0.0.0.0:8000 -
Обновлен
Dockerfileдля использования entrypoint
✅ Автоматические миграции
Теперь миграции применяются автоматически при запуске контейнера
⚠️ Frontend API подключение
Проблема: Frontend не может подключиться к backend API в Docker среде
Частичное решение:
- Обновлена конфигурация Next.js для использования
web:8000внутри Docker - API прокси работает с редиректами
Результат
Работающие сервисы:
- ✅ Backend: http://localhost:8000
- ✅ Backend API: http://localhost:8000/api/
- ✅ Статические файлы: http://localhost:8000/static/*
- ✅ Django Admin: http://localhost:8000/admin/
- ✅ Frontend: http://localhost:3000
- ✅ PostgreSQL: localhost:5432
Команды для запуска:
# Запуск всех сервисов
docker-compose up -d
# Проверка статуса
docker-compose ps
# Просмотр логов
docker-compose logs web
docker-compose logs frontend
# Остановка
docker-compose down
Переменные окружения (в .env):
DJANGO_SECRET_KEY=your-secret-key
DJANGO_DEBUG=True
DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost,0.0.0.0
DATABASE_NAME=links_db
DATABASE_USER=links_user
DATABASE_PASSWORD=links_password
DATABASE_HOST=db
DATABASE_PORT=5432
POSTGRES_DB=links_db
POSTGRES_USER=links_user
POSTGRES_PASSWORD=links_password
NEXT_PUBLIC_API_URL=http://localhost:8000
Проверка работы
Backend статика:
curl -I http://localhost:8000/static/rest_framework/css/bootstrap.min.css
# Должен вернуть 200 OK
API endpoints:
curl -s http://localhost:8000/api/ | jq
# Должен вернуть JSON с endpoints
Frontend:
curl -I http://localhost:3000
# Должен вернуть 200 OK