【问题标题】:Django Static doesn't load but is accessible. NGINX and DockerDjango Static 不加载但可以访问。 NGINX 和 Docker
【发布时间】:2022-12-11 15:33:40
【问题描述】:

我已将我的 Django (DRF) 连接到 Gunicorn 和 Nginx,并将它们全部放在 docker 中。

当我加载 mysite.com/admin/ 时,它看起来很糟糕,只是纯文本。所以它似乎没有加载任何静态文件。但是,在浏览器控制台中,错误为零。

此外,我看到所有静态文件都已从服务器成功加载(所有 /static/ 请求都是 HTTP 200)并且我可以打开它们在我的浏览器中输入 url:mysite.com/static/admin/css/base.css。和这个文件将成功打开.但是管理站点不想应用它。 在具有 Debug=True 的本地主机上,一切都工作正常。

在主要网站上,所有 /media/ 也都运行良好,因此问题仅在 /static/ 内。

nginx 配置文件

events {}
http {
    server {
        listen 80;
        server_name mysite.com;
        server_tokens off;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 80;
        server_name api.mysite.com;
        server_tokens off;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 443 ssl;
        server_name mysite.com;
        server_tokens off;

        ssl_certificate  /etc/nginx/certs/mysite.com-chain.pem;
        ssl_certificate_key /etc/nginx/certs/mysite.com-key.pem;

        location / {
            proxy_pass http://10.0.2.237:3004; # React Frontend
        }

    }

    server {
        listen 443 ssl;
        server_name api.mysite.com;
        server_tokens off;

        ssl_certificate  /etc/nginx/certs/api.mysite.com-chain.pem;
        ssl_certificate_key /etc/nginx/certs/api.mysite.com-key.pem;

        location /media/ {
            autoindex on;
            alias /django-media/;
        }

        location /static/ {
            autoindex on;
            alias /django-static/;
        }

        location / {
            try_files $uri @proxy_api;
        }

        location @proxy_api {
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Url-Scheme $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass   http://10.0.2.237:7000; # Django Gunicorn Backend
        }


    }
}

docker-compose.backend.yml

version: '3.8'
services:
  postgres_db:
    container_name: postgres-prod
    image: postgres
    ports:
      - "5543:5543"
    volumes:
      - postgres_data_prod:/var/lib/postgresql/data/
    env_file:
      - .env.production
    command: -p 5543
  web:
    container_name: django-backend-prod
    build: .
    env_file:
      - .env.production
    ports:
      - "7000:8001"
    entrypoint: ./entrypoint.production.sh
    volumes:
      - .:/code
      - media:/code/media
      - static:/code/project/static
    depends_on:
      - postgres_db
    networks:
      - default
    restart: always

volumes:
  media:
    driver_opts:
      type: none
      device: ${PWD}/media
      o: bind
  postgres_data_prod:

networks:
  default:
    external:
      name: sentry-net

docker-compose.frontend.yml(在不同的目录下,静态和媒体通过卷连接)

version: '3.8'

services:
  frontapp:
    container_name: React-Frontend-PROD
    build:
      context: .
      dockerfile: Dockerfile

    volumes:
      - '.:/app'
      - '/app/src'
      - '/app/node_modules'
    ports:
      - "3004:3000"
    env_file:
      - .env.production

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - .nginx/nginx.conf:/etc/nginx/nginx.conf
      - .certs/:/etc/nginx/certs
      - django-backend-prod_media:/django-media
      - django-backend-prod_static:/django-static
    links:
      - frontapp
    depends_on:
      - frontapp
    networks:
      - default

volumes:
  django-backend-prod_media:
    external: true
  django-backend-prod_static:
    external: true


networks:
  default:
    external:
      name: sentry-net

【问题讨论】:

  • 您的所有配置看起来都很好。尝试以隐身方式打开页面并检查
  • 是的,我在不同的设备、不同的浏览器上试过这个,但 Django 仍然不想应用所有这些样式,即使它成功加载了它

标签: django nginx docker-compose django-staticfiles django-media


【解决方案1】:

你找到答案了吗?我也面临同样的问题

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2017-09-25
    • 2016-08-15
    • 2021-01-16
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多