python - NGINX 在 Dockered Django 项目中找不到静态文件

标签 python django docker nginx gunicorn

我刚开始使用 Docker 和 Nginx。我正在开展一个在本地工作的项目,其中包括平面页面和几个简单的应用程序,并将其与 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

local.conf

upstream hello_server {
    server djangoapp:8000;
}

server {

    listen 80;
    server_name localhost;

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

    location /static/ {
        autoindex on;
        alias /opt/services/djangoapp/static/;
    }

    location /media/ {
        alias /opt/services/djangoapp/media/;
    }
}

settings.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/',
]  

到目前为止,我已经尝试过许多其他事情:

  • 使用 STATIC_ROOT 和 STATICFILES_DIRS
    • 我对 Django 文档的理解是静态文件位于
      我需要使用 STATICFILES_DIRS 的多个位置
    • 如果我使用 STATIC_ROOT 并收集静态,Django 管理员确实会发现 静态文件,但找不到任何其他文件。
  • 导航应用程序 Docker 容器以手动查找文件。我 无法找到它们或任何有效的模板。我找到这个 很奇怪。

如果我需要澄清或包含其他内容,请告诉我。预先感谢您的帮助,非常感谢。

最佳答案

据我了解,您需要同步 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

关于python - NGINX 在 Dockered Django 项目中找不到静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55054261/

相关文章:

python - 如何使用 pywin32 知道窗口是否最大化?

python - 使用 Python 设置 Linux 功能的问题

javascript - 在 Django 中重用 javascript 函数来 Bootstrap 表

python - 使用 QAbstractListModel 从 python 访问 QML 中的列表元素

python - 在 Flask 中保护 REST API

django - ogrinfo : symbol lookup error:/usr/local/lib/libgdal. so.1: undefined symbol :sqlite3_column_table_name

mysql - 如何使用 django mysql 在原始 sql 查询中传递动态变量

docker - 为什么docker使用32768-65535之间的端口号?

docker 想访问驱动器 c 你想共享它吗?

docker - Kubernetes:未设置图像 “XXX.dkr.ecr.eu-west-1.amazonaws.com/msg/my_image:v1.0”的ID或大小