Nginx + Django 上没有静态文件

问题描述 投票:0回答:1

我知道有很多这样的问题。但我已经尝试了很多我发现的方法,但没有任何帮助。

我有 Django + uWSGI + Nginx + PostgreSQL 的组合。

静态文件由

python manage.py collectstatic
收集在movies_admin/static目录中。

我通过 nginx 127.0.0.1/admin 在本地地址登录 Django 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"

我查过了。 static目录挂载在nginx容器的'/var/www/static/'目录下。

我的站点.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/'
django docker nginx docker-compose
1个回答
0
投票

我相信您必须安装“WhiteNoise”库才能直接从同一服务器中的文件夹提供静态文件。当 Debug 为 False 时,Django 不提供静态文件。 我建议观看此视频的一小部分(它在正确的时间开始):https://youtu.be/IkHKg5Unniw?t=465

© www.soinside.com 2019 - 2024. All rights reserved.