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