提问人:Alin 提问时间:10/15/2023 更新时间:10/18/2023 访问量:67
静态和媒体文件不显示在 django 网站 - nginx & gunicorn
Static and Media files are not shown in django website - nginx & gunicorn
问:
我正在尝试在 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;
}
}
答:
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
评论
python manage.py collectstatic
STATIC_URL = '/var/www/real_estate/static/'
这应该是 URL,而不是 PATH。 很好。转到 Nginx 和/或 Django 日志,查找与静态文件相关的错误,并将这些错误添加到您的问题中。STATIC_URL = 'static/'