静态和媒体文件不显示在 django 网站 - nginx & gunicorn

Static and Media files are not shown in django website - nginx & gunicorn

提问人:Alin 提问时间:10/15/2023 更新时间:10/18/2023 访问量:67

问:

我正在尝试在 vps 上部署一个 django 网站,它现在已经启动并运行(经过很多麻烦!),但现在我的媒体和静态文件没有显示在我的网站中,我真的尝试了很多方法,但没有一个有效。

我的nginx配置:

server {
    listen 80;
    server_name domain_name;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/real_estate/static/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}


gunicorn.service:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=shahriar
Group=www-data
WorkingDirectory=/home/shahriar/Amlak/real_estate
ExecStart=/home/shahriar/Amlak/env/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          real_estate.wsgi:application

[Install]
WantedBy=multi-user.target

settings.py:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/

STATIC_URL = '/var/www/real_estate/static/'
STATIC_ROOT = '/var/www/real_estate/static/assets'
STATICFILES_DIRS = [ 'static/', BASE_DIR/'static/', '/var/www/real_estate/static/'

]

# Default primary key field type
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'


# Media Settings

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR.joinpath('media')



最终,我重新启动了所有可能的服务,但没有显示一个静态文件。

我尝试从中更改 settings.py:

STATIC_URL = 'static/'
STATIC_ROOT = 'assets/'
STATICFILES_DIRS = [ 'static/', BASE_DIR/'static/'
]

对此:

STATIC_URL = '/var/www/real_estate/static/'
STATIC_ROOT = '/var/www/real_estate/static/assets'
STATICFILES_DIRS = [ 'static/', BASE_DIR/'static/', '/var/www/real_estate/static/'

]

我试着从这里改变:

server {
    listen 80;
    server_name domain_name;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/real_estate/static/;
    }
    location /assets/ {
        root /var/www/real_estate/assets/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

对此:

server {
    listen 80;
    server_name domain_name;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/real_estate/static/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

Python django nginx gunicorn WSGI

评论

0赞 Asif 10/15/2023
通过运行以下 Django 管理命令,确保已收集静态文件:.此命令会将所有静态文件复制到您在 Django 设置中指定的 STATIC_ROOT 目录。python manage.py collectstatic
0赞 Alin 10/15/2023
也试过了。没用...
0赞 Asif 10/15/2023
您可以按照本教程 [digitalocean.com/community/tutorials/...
0赞 Ivan Starostin 10/15/2023
STATIC_URL = '/var/www/real_estate/static/'这应该是 URL,而不是 PATH。 很好。转到 Nginx 和/或 Django 日志,查找与静态文件相关的错误,并将这些错误添加到您的问题中。STATIC_URL = 'static/'

答:

0赞 Deep joshi 10/15/2023 #1

在 Django 设置中,确保正确设置以下配置以提供静态文件至关重要:

# settings.py

STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/real_estate/static/assets'

一旦你对你的 Django 设置进行了这些更改,下一步就是将你的静态文件收集到指定的STATIC_ROOT目录中。您可以通过在 Django 项目目录中运行以下命令来实现此目的:

python manage.py collectstatic

此外,请检查媒体文件的设置,类似于我们对以下静态文件所做的设置:

# settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR.joinpath('media')

这些设置定义媒体文件的 URL 和根目录。

我们还需要确保正确设置静态和媒体目录的权限,以允许 Nginx 和 Gunicorn 读取这些文件。您可以按如下方式调整权限:


sudo chown -R www-data:www-data /var/www/real_estate/static
sudo chown -R www-data:www-data /path/to/media

请按照以下步骤操作,并确认您的配置和权限准确无误。如果它解决了您的问题,请告诉我!

评论

0赞 Alin 10/17/2023
静态文件现在可以了,但媒体文件还没有显示......
0赞 Deep joshi 10/17/2023
您是否检查了媒体文件的权限?您如何在前端调用媒体文件?
0赞 Alin 10/18/2023 #2

我是这样做的:

location /static {
    alias /var/www/real_estate/static/;
}
location /media {
    root /home/path/to/real_estate/;
}

settings.py:

STATIC_URL = 'static/'
STATIC_ROOT = '/var/www/real_estate/static/'
STATICFILES_DIRS = [BASE_DIR/'static/',]

这是我对媒体文件所做的: 媒体文件未显示: open() “/home/shahriar/Amlak/real_estate/media/images/image1.jpg” 失败(13:权限被拒绝) - Django Nginx