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

wsxa1bj1  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(173)

我正在尝试在一个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;
    }
}
e4yzc0pl

e4yzc0pl1#

在你的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

通过执行这些步骤并确认您的配置和权限是准确的。让我知道它是否解决了你的问题!

相关问题