【问题标题】:How can I serve Django static files via nginx Docker container?如何通过 nginx Docker 容器提供 Django 静态文件?
【发布时间】:2020-06-17 21:00:54
【问题描述】:

在开发过程中,我喜欢在尽可能接近生产的设置中部署 Django 静态文件。为了实现这一点,我将 Django 后端包装到一个图像 (Dockerfile) 中,并将前端 JS 和后端 Django 静态文件与配置为 Web 服务器 (Dockerfile_nginx) 的 nginx 一起包装到另一个图像中。设置如下:

文件系统结构:

<projekt-repo>
  /frontend
  /backend
    /static (generated with python manage.py collectstatic)
    settings.py
  manage.py
  nginx.conf
  Dockerfile
  Dockerfile_nginx

settings.py:

STATIC_ROOT = os.path.join(BASE_DIR, "backend/static")
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

nginx.conf:

server {
  listen 0.0.0.0:8080;
  root /var/www;
  location / {
    try_files $uri $uri/ /index.html;
  }
}

server {
  listen 0.0.0.0:8000;
  root /var/www/django;
  location /static/ {
    autoindex on;
    alias /var/www/django/static/;
  }
}

Dockerfile_nginx:

FROM nginx:1.17.8-alpine
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
COPY edge_frontend/www /var/www
COPY edge_backend/static /var/www/django/static

如果我运行应用程序并尝试通过 Django 管理站点 (localhost:8000/admin) 登录,则该站点的样式不正确并且日志输出状态

backend  | Not Found: /static/admin/css/base.css
backend  | Not Found: /static/admin/css/login.css
backend  | Not Found: /static/admin/css/responsive.css
backend  | Not Found: /favicon.ico
backend  | Not Found: /static/admin/css/base.css
backend  | Not Found: /static/admin/css/login.css
backend  | Not Found: /static/admin/css/responsive.css
backend  | Not Found: /favicon.ico

显然设置中存在一些我现在无法发现的不匹配?有人可以帮忙吗?

【问题讨论】:

    标签: django python-3.x nginx


    【解决方案1】:

    在您的项目中创建一个名为“static”的文件夹,然后

    添加你的 settings.py

    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    或者你想要另一条路?

    【讨论】:

    • 我认为这不是我的问题。
    • 你的问题出在 nginx 配置文件中
    【解决方案2】:

    您必须在settings.py 中设置BASE_DIRSTATIC_URLSTATIC_ROOT 如下...

    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
    STATIC_URL = '/static/'
    

    然后运行python manage.py collectstatic

    【讨论】:

    • 我认为这不是我的问题。
    猜你喜欢
    • 2011-01-27
    • 2014-10-05
    • 2019-05-31
    • 2015-03-18
    • 1970-01-01
    • 2019-02-22
    • 2022-12-17
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多