【问题标题】:NGINX serve static files - django project has no stylingNGINX 提供静态文件 - django 项目没有样式
【发布时间】:2022-01-11 01:30:06
【问题描述】:

我设法部署了我的 Django 应用程序,但我无法使用 Nginx 传递静态文件。我已按照部署到生产环境的所有说明进行操作。当我检查页面时,我看到的只是空的静态文件夹 谁能看出错误?

非常感谢

nginx.conf

 10 upstream app_upstream {
  9     server app:8080;
  8 }
  7
  6 server {
  5     listen 80;
  4     listen 443;
  1     server_name #######;
  2
  3     location /static/ {
  4         alias /static/;
  5     }
  6
  7     location /media/ {
  8         alias /media/;
  9     }
 10
 11     location / {
 12         proxy_set_header Host $host;
 13         proxy_pass http://app_upstream;
 14     }
 15 }

settings.py

14
 13 STATIC_URL = '/static/'
 12 STATIC_ROOT = '/static/'

docker-compose.yml

....
 12   app:
 13     build: .
 14     ports:
 15       - 8000:8000
 16       - 8080:8080
 17     env_file:
 18       - db_${RTE}.env
 19     volumes:
 20       - .:/app/
 21       - static:/static/
 22       - media:/media/
 23     depends_on:
 24       - db
 25
 26   nginx:
 27     build: nginx/
 28     ports:
 29       - 443:443
 30       - 80:80
 31     volumes:
 32       - ./nginx/${RTE}/conf.d/:/etc/nginx/conf.d/
 34       - static:/static/
 35       - media:/media/
 36     depends_on:
 37       - app
 38
 39 volumes:
 40   static:
...

docker-compose 时的错误消息:

nginx_1  | 2022/01/10 16:26:17 [error] 10#10: *8 open() "/static/custom.css" failed (2: No such--More
--More--

【问题讨论】:

    标签: django nginx nginx-config django-staticfiles django-deployment


    【解决方案1】:

    遇到过类似问题(但不使用 Docker),也许这可能会有所帮助。

    如果您的根项目中有一个用于项目级静态文件的静态文件夹,并且如果您在 docker-compose 或 Dockerfile 中也有运行python manage.py collectstatic --noinput 的命令,那么我认为您不太了解 Docker d 仍然需要在生产中,然后重命名 settings.py 中的 STATIC_URL 和 STATIC_ROOT 可能会有所帮助,因为该命令会尝试将所有应用程序中的所有静态文件收集到一个文件夹中。试试这样的:

        STATIC_URL = '/staticfiles/'
        STATIC_ROOT = str(BASE_DIR.joinpath('staticfiles'))
        STATICFILES_DIRS = [str(BASE_DIR.joinpath('static'))]
    

    请注意,您还必须更新您的 Nginx 文件,即,

        server {
                ...
                location /staticfiles/ {
                ...
               }
    

    【讨论】:

    • 感谢您的建议!我可以看到 /staticfiles/ 已创建,其中包含所有静态内容。但是,当我访问该域时,它没有样式。我目录中的所有文件都在用户“myName”下。虽然创建的/staticfiles/root 下。 drwxr-sr-x - root 11 Jan 12:47 -N staticfiles/ 会不会是这个问题?
    • 是的,但我认为这就是 Docker 的运行方式。我对 Docker 不是很熟悉,但也许这回答了你的问题:stackoverflow.com/questions/50685775/…?
    • 谢谢!用线条解决它:STATIC_URL = '/staticfiles/' STATIC_ROOT = '/static/' STATICFILES_DIRS = [str(BASE_DIR.joinpath('static'))]
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 2021-12-02
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2015-11-30
    • 2016-01-28
    相关资源
    最近更新 更多