Django: обслуживание статических файлов для производства
Я столкнулся с проблемой при обслуживании моих статических файлов в Django. Проблема существует только в производственной конфигурации, где я использую docker (docker-compose.yml) с файлами nginx (default.conf). После выполнения команды python manage.py collecstatic
статические файлы помещаются в файл, определенный в STATIC_ROOT
. Но это не те файлы, которые я создал для модификации моих шаблонов сайтов и административной панели. Как я видел, мои пользовательские стили и фотографии со шрифтами не попадают в папку STATIC_ROOT
, указанную в файле settings.py
. Ниже я привожу некоторые из наиболее важных фрагментов кода, относящихся к моей конфигурации для обслуживания статических файлов
settings.py
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# SECURITY WARNING
DEBUG = False
INSTALLED_APPS = [
'whitenoise.runserver_nostatic',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.conf',
'rest_framework',
'django_filters',
'tinymce',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"django.middleware.security.SecurityMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
]
STATIC_URL = '/django_static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'django_static')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urls.py
urlpatterns = i18n_patterns(
path('panel/', admin.site.urls),
path('tinymce/', include('tinymce.urls')),
)
urlpatterns += [
re_path(r'^media/(?P<path>.*)$', serve,
{'document_root': settings.MEDIA_ROOT}),
re_path(r'^django_static/(?P<path>.*)$', serve,
{'document_root': settings.STATIC_ROOT}),
]
django_static директория после команды python manage.py collectstatic
введите описание изображения здесь
default.conf
location /django_static/ {
autoindex on;
alias /app/backend/cdd/django_static/;
}
docker-compose.yml
version: '3'
services:
nginx:
restart: unless-stopped
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
ports:
- 80:80
- 443:443
volumes:
- static_volume:/app/backend/cdd/django_static
- media_volume:/app/backend/cdd/media
- ./docker/nginx:/etc/nginx/conf.d
depends_on:
- backend
backend:
restart: unless-stopped
build:
context: .
dockerfile: ./docker/backend/Dockerfile
volumes:
- static_volume:/app/backend/cdd/django_static
- media_volume:/app/backend/cdd/media
- /etc/config.json:/etc/config.json
expose:
- 8000
volumes:
static_volume: {}
media_volume: {}