You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署后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

排查与解决方向

  1. 确认自定义静态文件是否被收集

    • 当前静态目录仅包含Django内置应用的资源,无自定义静态文件。需在settings.py中配置STATICFILES_DIRS指定自定义静态文件路径,示例:
      STATICFILES_DIRS = [
          BASE_DIR / "your_app/static",
      ]
      
    • 重新执行collectstatic命令,检查控制台输出是否有收集到自定义文件的记录。
  2. 修正Nginx路径配置

    • 使用alias时需保证路径末尾斜杠匹配,修改为:
      location /static/ {
          alias /coolsite/static/;
      }
      
    • 或改用root指令,对应路径调整为:
      location /static/ {
          root /coolsite;
      }
      
  3. 调整Docker卷挂载逻辑

    • coolsite_web容器同时挂载了./coolsite:/coolsite和static_volume:/coolsite/static,本地目录会覆盖卷内容。建议移除./coolsite:/coolsite挂载,或调整挂载顺序确保卷优先级更高。
  4. 检查文件权限

    • 确保Nginx进程有权限读取静态文件,执行以下命令:
      chmod -R 755 /coolsite/static
      chown -R nginx:nginx /coolsite/static
      

内容的提问来源于stack exchange,提问作者S99P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:37:05