Отсутствие статических файлов в Nginx + Django
Я знаю, что таких вопросов много. Но я перепробовал много всего, что нашел, и ничего не помогает.
У меня комбинация Django + uWSGI + Nginx + PostgreSQL.
Статический файл был собран python manage.py collectstatic
в директории movies_admin/static.
Я захожу в админку Django по локальному адресу через nginx 127.0.0.1/admin. Сама страница загружается, но только текст, поля и тому подобное. Никакой графики - вот в чем моя проблема. Мой файл docker-compose:
version: '3'
services:
django:
restart: always
build: movies_admin/.
env_file:
- .env
ports:
- "8000:8000"
container_name: work_django
depends_on:
- postgres
postgres:
restart: always
env_file:
- .env
image: 'postgres:${PG_VER}'
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
container_name: work_database
ports:
- "5432:5432"
volumes:
- ${DB_VOLUME_CATALOG_PATH}:/var/lib/postgresql/data/
nginx:
image: 'nginx:${NGINX_VER}'
volumes:
- ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
- ${NGINX_CONFD_CATALOG}:/etc/nginx/conf.d:ro
- ${STATIC_PATH}:/var/www/static/:ro
container_name: work_nginx
depends_on:
- django
ports:
- "80:80"
Я проверил. Статический каталог смонтирован в каталоге '/var/www/static/' контейнера nginx.
Мой site.conf:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /static/ {
alias /var/www/static/;
}
location @backend {
proxy_pass http://django:8000;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|css|js)$ {
log_not_found off;
expires 90d;
}
location / {
try_files $uri @backend;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Часть моего файла settings.py:
STATIC_ROOT = '/var/www/static'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static/'),
'/opt/app/static/',
]
STATIC_URL = '/static/'
WhiteNoise был не нужен. Оказалось, что проблема кроется в файле site.conf. Сам файл в порядке.
В этом состоянии все работало.
Удалены css и js из:
location ~* \.(?:jpg|jpeg|gif|png|ico|css|js)$ {
log_not_found off;
expires 90d;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location @backend {
proxy_pass http://django:8000;
}
location / {
try_files $uri @backend;
}
location /static/ {
alias /var/www/static/;
}
location ~* \.(?:jpg|jpeg|gif|png|ico)$ {
log_not_found off;
expires 90d;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}