部署在DigitalOcean上的Django应用静态文件无法加载
Django部署DigitalOcean静态文件加载失败排查方案
核心问题:Whitenoise中间件未配置
你的settings里已经启用了Whitenoise的静态文件存储类,但缺少关键的Whitenoise中间件,这是静态文件无法被正确服务的主要原因。
修改MIDDLEWARE配置,在SecurityMiddleware后添加Whitenoise中间件:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', "whitenoise.middleware.WhiteNoiseMiddleware", # 新增该行 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
生产环境必执行步骤
- 收集静态文件
在服务器项目根目录运行命令,将所有静态文件归集到STATIC_ROOT指定的目录:
python manage.py collectstatic
执行时会提示确认,输入yes即可。
检查环境变量
- 确保
DEBUG设为False:生产环境下Django仅会通过Whitenoise或配置的静态文件服务器提供静态资源,开启DEBUG会导致资源加载异常。 ALLOWED_HOSTS必须包含你的服务器IP或域名,例如:DJANGO_ALLOWED_HOSTS=your-domain.com,192.168.1.100
- 确保
修复目录权限
确保web服务进程(如Gunicorn、Nginx)能读取静态文件目录:
sudo chmod -R 755 /path/to/your/project/staticfiles sudo chown -R www-data:www-data /path/to/your/project/staticfiles
额外排查方向
- 查看浏览器控制台的网络请求:静态文件返回404说明文件未被正确收集,500是服务器内部错误,403则是权限问题。
- 若使用Nginx反向代理,确认配置未拦截静态文件请求(使用Whitenoise时,无需Nginx处理静态文件,直接由Gunicorn转发即可)。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

