部署后Django静态文件失效求助:已排查Nginx、Docker配置
Django项目部署后静态文件加载异常排查
问题现象
项目部署后自定义静态文件无法正常加载,但以下场景资源加载正常:
- 基础模板中直接使用Bootstrap的CDN链接
- Django管理后台的静态资源
已尝试调整settings.py、Nginx及docker-compose配置,问题仍未解决。
相关配置信息
settings.py
STATIC_URL = '/static/' STATIC_ROOT = BASE_DIR / 'static' MEDIA_URL = '/media/' MEDIA_ROOT = BASE_DIR / 'media'
nginx.conf
upstream coolsite_web { server coolsite_web:8080; } server { listen 80; listen [::]:80; server_name zatolokina-clinic.ru www.zatolokina-clinic.ru; server_tokens off; charset utf-8; location / { proxy_pass http://coolsite_web; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; } location /static/ { alias /coolsite/static; } location /media/ { alias /coolsite/media; } }
docker-compose.yml
coolsite_web: build: context: . dockerfile: Dockerfile container_name: zatolokina expose: - "8080" volumes: - ./coolsite:/coolsite - static_volume:/coolsite/static - media_volume:/coolsite/media env_file: - .env environment: - POSTGRES_HOST=pg_db - POSTGRES_DB:${POSTGRES_DB} - POSTGRES_USER:${POSTGRES_USER} - POSTGRES_PASSWORD:${POSTGRES_PASSWORD} command: > sh -c "python manage.py collectstatic --noinput --clear && python manage.py makemigrations && python manage.py migrate && gunicorn coolsite.wsgi:application --bind 0.0.0.0:8080" depends_on: - pg_db nginx: build: context: ./nginx dockerfile: Dockerfile volumes: - static_volume:/coolsite/static - media_volume:/coolsite/media - ./nginx:/etc/nginx/conf.d ports: - "80:80" - "443:443" restart: always depends_on: - coolsite_web
静态目录内容
执行ls -l /coolsite/static命令输出:
total 12 drwxr-xr-x 5 root root 4096 Dec 13 15:25 admin drwxr-xr-x 4 root root 4096 Dec 13 15:25 debug_toolbar drwxr-xr-x 5 root root 4096 Dec 13 15:25 django_extensions
排查与解决方向
确认自定义静态文件是否被收集
- 当前静态目录仅包含Django内置应用的资源,无自定义静态文件。需在
settings.py中配置STATICFILES_DIRS指定自定义静态文件路径,示例:STATICFILES_DIRS = [ BASE_DIR / "your_app/static", ] - 重新执行
collectstatic命令,检查控制台输出是否有收集到自定义文件的记录。
- 当前静态目录仅包含Django内置应用的资源,无自定义静态文件。需在
修正Nginx路径配置
- 使用
alias时需保证路径末尾斜杠匹配,修改为:location /static/ { alias /coolsite/static/; } - 或改用
root指令,对应路径调整为:location /static/ { root /coolsite; }
- 使用
调整Docker卷挂载逻辑
coolsite_web容器同时挂载了./coolsite:/coolsite和static_volume:/coolsite/static,本地目录会覆盖卷内容。建议移除./coolsite:/coolsite挂载,或调整挂载顺序确保卷优先级更高。
检查文件权限
- 确保Nginx进程有权限读取静态文件,执行以下命令:
chmod -R 755 /coolsite/static chown -R nginx:nginx /coolsite/static
- 确保Nginx进程有权限读取静态文件,执行以下命令:
内容的提问来源于stack exchange,提问作者S99P
相关产品推荐
相关产品推荐

