NGINX在docked Django proj中找不到静态文件

2024-05-15 20:23:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用Docker和Nginx。我正在做一个我在本地工作的项目,包括flatpages和几个简单的应用程序,并将其与this guide to utilise Docker, NGINX and Gunicorn相结合。在

由于某些原因,它找不到我的静态文件,甚至找不到标准的Django管理静态文件。在

控制台错误

GET http://0.0.0.0:8000/static/flatpages/CSS/flatpages.css 
net::ERR_ABORTED 404 (Not Found)

Django管理员Django Admin

本地.conf

^{pr2}$

设置.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 
    "static"),
    '/static/flatpages/',
]  

到目前为止,我还尝试过:

  • 使用静态根目录和静态文件目录
    • 我从Django文档中了解到,静态文件位于
      我需要在多个位置使用STATICFILES\u DIRS
    • 如果我使用STATIC_ROOT和collect STATIC,Django管理员会发现 静态文件,但找不到其他文件。在
  • 导航apps Docker容器以手动查找文件。我 找不到它们或任何有效的模板。我找到这个了 很奇怪。在

如有其他需要,请告诉我。提前谢谢你的帮助,真的很感激。在


Tags: 文件pathdjangodockerflatpagesbaseos管理员
3条回答

假设在docker容器上,静态文件夹位于/opt/services/djangoapp中,那么您的location/static config仍然应该通过代理传递到django服务器:

location /static/ {
    alias /opt/services/djangoapp/static/;

    proxy_pass http://hello_server;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect default;
}

据我所知,您需要在NGINX和Django文件夹之间同步静态卷。为此,您需要如下更新docker compose:

version: '3'

services:

  djangoapp:
    build: .
    volumes:
      - .:/opt/services/djangoapp/src
    networks: 
      - nginx_network

  nginx:
    image: nginx:1.13
    ports:
      - 8000:80
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
      - ./static:/opt/services/djangoapp/static/  # Syncing your current static directory to the Docker
    depends_on:
      - djangoapp
    networks: 
      - nginx_network

networks: 
  nginx_network:
    driver: bridge

首先,如果你使用nginx,比如一个代理来提供静态文件,你必须在端口80加载页面,并且你必须展示如何运行容器,在我的例子中,如果我像一个卷一样传递静态目录(container_path/static),你只需要将位置设置为container_path,因为nginx会在路径集中搜索一个静态目录,比如这个:

location /static/ {
        root /opt/services/djangoapp;
    }

记住运行collectstatic命令将静态文件收集到static目录中

相关问题 更多 >