Django Static Files Not Loading in Production (DEBUG=False) with Gunicorn on Kubernetes

Проблема

Я запускаю Django-приложение в капсуле Kubernetes с Gunicorn, и мои статические файлы (CSS/JS панели администратора) не загружаются при DEBUG=False.

При локальной разработке я использую runserver, и все работает нормально при DEBUG=True. Однако, когда я устанавливаю DEBUG=False, мои статические файлы возвращают 404.

Журналы ошибок (Консоль браузера / Журналы Django)

GET /static/admin/css/base.efb520c4bb7c.css HTTP/1.1" 404 179
GET /static/admin/js/nav_sidebar.7605597ddf52.js HTTP/1.1" 404 179

Соответствующие настройки Django (settings.py)

DEBUG = False

INSTALLED_APPS = [
    "django.contrib.staticfiles",
    # Other apps...
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    # Other middleware...
]


BASE_DIR = Path(__file__).resolve().parent.parent
STATIC_URL = '/static/'
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATICFILES_DIRS = [
    BASE_DIR / 'static',  
]
STATIC_ROOT = BASE_DIR / 'staticfiles'

Как я запускаю свое приложение (точка входа в Docker)

#!/bin/sh

APP_PORT=${PORT:-8000}

echo "Migrating database..."
/opt/venv/bin/python manage.py migrate --noinput

echo "Collecting static files..."
/opt/venv/bin/python manage.py collectstatic --noinput
echo "Static files collected"

echo "Starting server..."
/opt/venv/bin/gunicorn secureuri.wsgi:application --bind "0.0.0.0:${APP_PORT}" --workers 1 --access-logfile - --error-logfile - --log-level debug

Что я пробовал

  • Проверил, что collectstatic запущен.

  • Запуск ls -la staticfiles/admin/css/ показывает, что файлы существуют внутри контейнера. Попробовал запустить встроенный dev-сервер Django с DEBUG=False

  • Запуск python manage. py runserver --insecure не работает

  • Проверил логи Gunicorn

  • Gunicorn работает нормально, и нет никаких ошибок, связанных со статическими файлами.

  • Попробовал добавить whitenoise ❌ (Не помогло)

INSTALLED_APPS = [
    "whitenoise.runserver_nostatic",
    "django.contrib.staticfiles",
]

MIDDLEWARE = [
    "whitenoise.middleware.WhiteNoiseMiddleware",
]

  • Перезапустил капсулу, но статические файлы по-прежнему выдают 404.

Вопрос

  1. Как правильно обслуживать статические файлы при DEBUG=False без использования внешнего сервиса вроде Nginx или S3?
  2. Есть ли что-то, чего мне не хватает в настройках Gunicorn/Kubernetes?
Вернуться на верх